FOX ESS Homeassistant MQTT automations.yaml (ChatGPT)

Aus TippvomTibb
Zur Navigation springen Zur Suche springen

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.