Strong Energy Alfred 10 (Senergy/Sofar 3-Ph-Hybrid) in Home Assistant auslesen — Modbus TCP über Waveshare-Gateway

Ich hatte zuletzt einen Strong Energy Alfred 10 (3-phasiger Hybrid-Wechselrichter mit Batterie, dazu ein CHINT DTSU666 als Netzzähler) über ein Waveshare RS485-to-Ethernet-Gateway per Modbus TCP in Home Assistant zu holen. Da es dazu kaum kompakte Doku gibt, hier das Ergebnis — inklusive der Stolperfalle, an der es fast gescheitert wäre.

Die Registertabelle gilt für die ganze Senergy/Sofar-3-Phasen-Hybrid-Familie (5–10K) — die Register stammen aus der evcc-Vorlage senergy-hybrid.yaml.

Der eigentliche Knackpunkt: RS485 hat zwei Kanäle

Am RJ45-Port des Wechselrichters liegen zwei getrennte RS485-Busse:

  • Pin 7/8 = Meter-Bus: Hier ist der Wechselrichter Master und liest den DTSU666 (Adresse 200). Hier NICHT abgreifen.
  • Pin 1/2 = Monitoring/HEMS-Bus: Hier ist der Wechselrichter Slave (Adresse 1) und extern lesbar → hier gehört die Waveshare dran.

(Im Strong-Handbuch: Kap. 5.4.1 Tabelle 7 und Kap. 9 Tabelle 15.)

Pflicht-Einstellung in der App

In der StrongEnergy360-App → Experten (Passwort admin) → Sonstige muss „RS485 Gerät (Hybrid)" auf „Slave" stehen (Default). Sonst antwortet der Wechselrichter auf dem Pin-1/2-Kanal nicht. Die Option „PV Ext. / AC-Couple" braucht ihr nur, wenn ein fremder Zweit-Erzeuger dahinterhängt — sonst aus lassen.

Home Assistant Modbus-Konfiguration

Host = IP der Waveshare, dazu deren Port. Alle Register: input_type: holding, slave: 1.

Bestätigte Register

Diese habe ich gegen die App-Gesamtwerte gegengeprüft — sie stimmen:

  - name: "PV Erzeugung gesamt"
    address: 4129        # 0x1021
    input_type: holding
    data_type: uint32
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    slave: 1

  - name: "PV Leistung"
    address: 4168        # 0x1048
    input_type: holding
    data_type: uint32
    scale: 0.1
    unit_of_measurement: "W"
    device_class: power
    slave: 1

  - name: "Netzleistung L1"    # + L2 = 4866/0x1302, L3 = 4868/0x1304
    address: 4864        # 0x1300
    input_type: holding
    data_type: int32     # Vorzeichen: + = Bezug, − = Einspeisung
    scale: 0.1
    unit_of_measurement: "W"
    device_class: power
    slave: 1

  - name: "Netzbezug gesamt"
    address: 4870        # 0x1306
    input_type: holding
    data_type: uint32
    scale: 0.01
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    slave: 1

  - name: "Batterie Leistung"
    address: 8201        # 0x2009
    input_type: holding
    data_type: int32
    scale: 0.1
    unit_of_measurement: "W"
    device_class: power
    slave: 1

  - name: "Batterie SoC"
    address: 8192        # 0x2000
    input_type: holding
    data_type: uint16
    unit_of_measurement: "%"
    device_class: battery
    slave: 1

:warning: Noch nicht abschließend verifiziert — bitte an eurem Gerät gegenprüfen

Bei diesen drei bin ich mir nicht sicher bei Skalierung bzw. Existenz — ich will hier nichts als Fakt hinstellen, was ich nicht bestätigt habe:

  • Einspeisung gesamt: 4872 (0x1308), uint32. Das ist die natürliche Paarung direkt hinter dem Netzbezug-Zähler; ich habe das Register gefunden, aber die Skalierung noch nicht bestätigt — teste scale: 0.01 (wie beim Netzbezug) gegen deinen App-Wert „Ins Netz / Einspeisung gesamt". Evcc selbst führt keinen Einspeise-Zähler, leitet die Einspeisung stattdessen aus der vorzeichenbehafteten Netzleistung ab.
  • Batterie Entladung gesamt: 8209 (0x2011), uint32, scale 0.01. Aus der evcc-Vorlage; Prüfwert = App „Von Batterie/Gesamt".
  • Batterie Ladung gesamt: Kandidaten 8205 (0x200D) / 8207 (0x200F), uint32, scale 0.01. Nur vermutet, ungetestet — die Ladung muss etwas größer als die Entladung sein (Speicherverluste).

Das nützlichste Werkzeug: gegen die App-Gesamtwerte prüfen

Egal welches Register: Vergleicht den HA-Zählerstand mit dem Wert in der App unter Statistik → „…/Gesamt". So bestimmt ihr die richtige Skalierung exakt, statt zu raten — bei mir stimmte die PV-Erzeugung ohne scale, der Netzbezug brauchte scale: 0.01. Zwei gepaarte Zähler im selben Adressblock haben meist dieselbe Skalierung.

Rückmeldungen willkommen

Wenn jemand von euch die drei offenen Register (Einspeisung-Skalierung, Batterie-Ladung) an seinem Alfred bestätigt hat, ergänze ich das gern hier — dann wird die Tabelle für alle lückenlos.

Hintergrund, falls jemand fragt, wozu die Zähler: Ich werte die Werte anschließend mit eedc-homeasssitant (Energie Effizienz Data Center) aus — ein kostenloses HA-Add-on zur PV-Analyse. Für die Registersuche hier spielt das keine Rolle, die Modbus-Config oben funktioniert mit jedem HA-Setup.