FOX ESS Homeassistant MQTT automations.yaml (ChatGPT)
Dies ist eine Kopie einer ChatGPT-Antwort auf folgende Frage.
Prompt: wie kann ich mit home assistant die register eines fox devices an einen mqtt server weiterleiten
Das geht sehr gut und ist sogar eine der elegantesten Lösungen, wenn Home Assistant ohnehin bereits die FoxESS-Modbus-Register ausliest.
Es gibt grundsätzlich drei Möglichkeiten:
Variante 1 (empfohlen): Modbus → Home Assistant → MQTT
Der Ablauf ist:
FOX ESS H3 Pro
│
Modbus TCP / RS485
│
▼
Home Assistant
│
Sensor-Entity
│
MQTT Publish
│
▼
MQTT-Broker
│
beliebige Clients
Schritt 1: FoxESS per Modbus einbinden
Beispielsweise entstehen Entitäten wie:
sensor.fox_battery_soc sensor.fox_pv_power sensor.fox_grid_power sensor.fox_battery_power sensor.fox_load_power
Schritt 2: MQTT in Home Assistant einrichten
Unter:
Einstellungen → Geräte & Dienste → MQTT
mit deinem Broker verbinden.
Schritt 3: Automation anlegen
Beispiel:
alias: MQTT Fox PV
trigger:
- platform: state
entity_id: sensor.fox_pv_power
action:
- service: mqtt.publish
data:
topic: fox/pv_power
payload: "{{ states('sensor.fox_pv_power') }}"
Jetzt wird bei jeder Änderung veröffentlicht.
Mehrere Register gleichzeitig
Noch besser:
alias: Fox MQTT
trigger:
- platform: time_pattern
seconds: "/5"
action:
- service: mqtt.publish
data:
topic: fox/status
payload: >
{
"pv": {{ states('sensor.fox_pv_power') }},
"battery": {{ states('sensor.fox_battery_power') }},
"soc": {{ states('sensor.fox_battery_soc') }},
"grid": {{ states('sensor.fox_grid_power') }},
"load": {{ states('sensor.fox_load_power') }}
}
Alle 5 Sekunden wird ein JSON übertragen.
Variante 2: MQTT Discovery
Falls andere Home-Assistant-Instanzen die Werte automatisch erkennen sollen, kannst du zusätzlich MQTT Discovery verwenden.
Variante 3 (meine Empfehlung für dich)
Da ich aus früheren Gesprächen weiß, dass du:
- einen FOX ESS H3-Pro 15 kW besitzt,
- bereits Modbus nutzt,
- einen externen MQTT-Broker betreibst,
- viele Automationen mit KNX und MQTT verwendest,
würde ich nicht für jeden Wert eine eigene Automation anlegen.
Ich würde stattdessen ein kleines Python-Skript oder eine AppDaemon-/Pyscript-Lösung verwenden:
FOX → Home Assistant → Python → MQTT
Vorteile:
- beliebig viele Register
- sauberes JSON
- QoS einstellbar
- Retain möglich
- Zeitstempel
- Änderungen filtern
- nur ein einziges Script
Noch eleganter: MQTT Statestream
Home Assistant besitzt bereits eine eingebaute Integration namens Statestream. Damit können ausgewählte Entitäten automatisch auf MQTT veröffentlicht werden – ganz ohne einzelne Automationen.
Beispiel:
mqtt_statestream:
base_topic: homeassistant
include:
entities:
- sensor.fox_pv_power
- sensor.fox_battery_soc
- sensor.fox_grid_power
- sensor.fox_load_power
Danach veröffentlicht Home Assistant jede Zustandsänderung automatisch unter Topics wie:
homeassistant/sensor/fox_pv_power/state
homeassistant/sensor/fox_battery_soc/state
homeassistant/sensor/fox_grid_power/state
Für deinen Anwendungsfall halte ich das für die wartungsärmste Lösung.
Ich kann dir auch eine komplette Lösung für deinen FOX ESS H3-Pro erstellen
Da wir bereits über deinen Wechselrichter gesprochen haben, kann ich dir eine fertige configuration.yaml erstellen, die alle wichtigen Modbus-Register (PV1, PV2, Netzleistung, Batterieleistung, SOC, Lade-/Entladeleistung, Hausverbrauch, Einspeisung usw.) automatisch als JSON an deinen MQTT-Broker veröffentlicht. Das spart viele einzelne Automationen und lässt sich leicht erweitern.
Ich gebe dir eine direkt nutzbare Home-Assistant-Variante mit mqtt_statestream und eine zweite Variante als kompaktes JSON per Automation. Du musst nur die Entity-Namen an deine Fox-Integration anpassen.
Hier ist eine fertige Grundkonfiguration.
Variante A: einzelne MQTT-Topics per mqtt_statestream
In configuration.yaml:
mqtt_statestream:
base_topic: fox
publish_attributes: true
publish_timestamps: true
include:
entities:
- sensor.fox_pv_power
- sensor.fox_pv1_power
- sensor.fox_pv2_power
- sensor.fox_battery_soc
- sensor.fox_battery_power
- sensor.fox_grid_power
- sensor.fox_load_power
- sensor.fox_today_yield
- sensor.fox_total_yield
- sensor.fox_battery_voltage
- sensor.fox_battery_current
Danach erscheinen z. B.:
fox/sensor/fox_pv_power/state
fox/sensor/fox_battery_soc/state
fox/sensor/fox_grid_power/state
Danach Home Assistant neu starten.
Variante B: alles als ein JSON-Topic
In automations.yaml:
alias: Fox Werte an MQTT senden
mode: single
trigger:
- platform: time_pattern
seconds: "/10"
action:
- service: mqtt.publish
data:
topic: fox/status
retain: true
qos: 0
payload: >
{
"pv_power": {{ states('sensor.fox_pv_power') | float(0) }},
"pv1_power": {{ states('sensor.fox_pv1_power') | float(0) }},
"pv2_power": {{ states('sensor.fox_pv2_power') | float(0) }},
"battery_soc": {{ states('sensor.fox_battery_soc') | float(0) }},
"battery_power": {{ states('sensor.fox_battery_power') | float(0) }},
"grid_power": {{ states('sensor.fox_grid_power') | float(0) }},
"load_power": {{ states('sensor.fox_load_power') | float(0) }},
"today_yield": {{ states('sensor.fox_today_yield') | float(0) }},
"total_yield": {{ states('sensor.fox_total_yield') | float(0) }}
}
Dann kommt alles unter:
fox/status
als JSON an.
Meine Empfehlung
Für deine Zwecke würde ich Variante B nehmen. Ein sauberer JSON-Datensatz ist später einfacher in FHEM, Node-RED, KNX-Logik, InfluxDB oder eigenen Skripten weiterzuverarbeiten.
Wichtig: Die Entity-Namen musst du vorher unter Einstellungen → Geräte & Dienste → Entitäten nachsehen. Bei dir heißen sie wahrscheinlich etwas anders.