Kommunikation mit GoodWe ET im lokalen Netz

Guten Tag,
Ich mache die ersten Schritte im OpenEms, und nach dem Durcharbeiten des Simulationslaufs im “Getting Started” versuche ich, einen GoodWe ET Inverter im lokalen Netz zu erreichen.
Was wären die minimalen Componenten und Einstellungen in der “Apache Felix Web Console Configuration”?
Ich habe bei “Bridge Modbus/TCP” die IP-Adresse des GoodWe ET eingetragen, und den “GoodWe Battery Inverter” aktiviert. Der hat die voreingetragene Modbus UnitID 247

Die Verbindung versagt aber, mit diesen Einträgen im Debug Log:

2021-06-20 16:00:51,955 [modbus0 ] WARN [bridge.modbus.api.ModbusWorker] [modbus0] FC3ReadHoldingRegisters [batteryInverter0;unitid=247;ref=35001/0x88b9;length=15] execution failed: Connection to [192.168.1.47] failed: Connection refused (Connection refused)
2021-06-20 16:00:52,058 [re.Cycle] INFO [ntroller.debuglog.DebugLogImpl] [ctrlDebugLog0] _sum[State:Fault] modbus0[State:FAULT: LAN Communication to external device failed]

Ich wäre sehr dankbar für jeden Tipp!
Robert Imhoff

Hallo Robert,

willkommen in der OpenEMS Community.

Sicher, dass der GoodWe Wechselrichter über das Netzwerk (Modbus/TCP) angesprochen werden kann? Ich kenne nur die Verbindung über einen RS485-Bus (Modbus/RTU).

Die Konfiguration wäre dann:

  • Bridge Modbus/RTU
  • GoodWe ESS
  • GoodWe Meter (der Netzzähler)

Damit sollte es schon funktionieren.

Gruß,
Stefan

Hallo Stefan

Vielen Dank für die Antwort! Bei der Felix-Console gibt es nur ein Modbus/RTU (serial), wo die Parameter aussehen, als seien sie für eine serielle Schnittstelle bestimmt.

Der GoodWe ET Hybrid kommuniziert aber z.B. mit einer Android App über das lokale Netzwerk. Das müsste doch mit OpenEMS dann auch gehen, oder?

Im “Felix” steht bei Bridge nur die Komponente Modbus/RTU (serial) – was es wohl bräuchte, ist ein Modbus/RTU over UDP ? (Mit Netscan hat der GoodWe ET die UDP Port 8899 und 48899 offen, und mit einem Netzwerkschnüffler scheint das Android App auch über UDP mit dem Wechselrichter zu kommunizieren.)

P.S.: Hier sind zwei Links mit Beschreibungen der Kommunikation mit Modbus over UDP:

secondlifestorage.com

https://github.com/mletenay/home-assistant-goodwe-inverter

Es übersteigt aber bei weitem meine Fähigkeiten, das in OpenEMS zu implementieren!

Hallo Robert,

ich hatte das gleiche Problem. Es ist tatsächlich so, dass über WLAN kein Modbus/TCP möglich ist. Für eine Kommunikation wird das LAN-Modul angeboten, welches einfach mit dem WLAN-Modul getauscht wird.

Nach dem Tauschen lässt sich der Goodwe ET problemlos über die Modbus-TCP-Bridge mit Openems betreiben.

Hallo Christian, und vielen Dank für die Info!

Um den Zugriff über UDP zu testen, hab ich gestern eine minimale Installation von “www.home-assistant.io” gemacht. Die oben erwähnte Add-on von https://github.com/mletenay funktioniert tatsächlich auch über das standardmäßige WLAN-Modul.
Wenn man den Python-Code ansieht, schickt der eine Byte-Sequenz wie z.B. F7 03 89 1c 00 7d per UDP über das lokale Netzwerk und erhält die Registerdaten zurück:

    _READ_DEVICE_VERSION_INFO: ProtocolCommand = ModbusProtocolCommand("F70388b80021", 73)
  _READ_DEVICE_RUNNING_DATA1: ProtocolCommand = ModbusProtocolCommand("F703891c007d", 257)
  _READ_DEVICE_RUNNING_DATA2: ProtocolCommand = ModbusProtocolCommand("F7038ca00011", 41)
  _READ_BATTERY_INFO: ProtocolCommand = ModbusProtocolCommand("F7039088000b", 29)
  _GET_WORK_MODE: ProtocolCommand = ModbusProtocolCommand("F703b7980001", 9)

Anbei ein Output des Testscripts.

Ließe sich so etwas in OpenEMS implementieren?
Es müsste theoretisch möglich sein, das Package io.openems.edge.bridge.modbus zu erweitern, dass es zusätzlich zu TCP auch über UPD kommuniziert … Ich bin allerdings zu unerfahren mit OpenEMS!

python-test-UDP.docx (5.7 KB)

Hallo Joncas,

das ist interessant, die Byte-Sequenz ist tatsächlich ein ganz normaler Modbus Request

Beispiel: home-assistant-goodwe-inverter/goodwe_inverter.py at master · mletenay/home-assistant-goodwe-inverter · GitHub
_READ_DEVICE_VERSION_INFO: ProtocolCommand = ModbusProtocolCommand("F70388b80021", 73)

F70388b80021
0x7F -> default modbus unit id
  0x03 -> function code 03 Read Holding Registers
    0x88b8 -> read from register 35000
        0x0021 -> length 33

Ich habe bisher noch nie mit Modbus/UDP gearbeitet. Die verwendete Bibliothek j2mod kann das aber grundsätzlich, d.h. man müsste vermutlich wirklich ‘nur’ die Modbus-Bridge entsprechend erweitern.