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.

Hallo,
Ich habe einen GoodWE ET WR mit einer BYD Batterie, welchen ich über Modbus/TCP-Bridge mit OpenEMS auslesen kann. Für mich stellt sich die Frage, wie ich den GoodWe über das EMS ansteuern kann. Es gibt wohl das Module “GoodWe-EMS ctrlBalancing0” ess0 und meter0 ist richtig eingestellt. Nur wenn ich das Modul aktiviere steuert er trotzdem noch nicht den GoodWe an. Weiß jemand, ob man da noch etwas am GoodWe selber in den Einstellungen verändern muss ? und falls ja wo?
Bin dankbar für Euer feedback.
Manfred

Hallo,

der GoodWe hat serienmäßig KEIN modbus TCP. Man kann es zwar scheinheilig in der App einstellen, haben tut er es aber nicht. OpenEMS ist NUR kompatibel mit Modbus RTU mit GoodWe.

Geüße

Hallo Sn0w3y,
besten dank für die Info.
Ich weiß, die früheren Versionen konnten nur Modbus RTU:
Ab Software Version 25 Modbus kann der GoodWe Modbus TCP. Jedoch nur über LAN. Ich verwende das ja und es funktioniert ja mit Modbus TCP. Heißt ich kann die Daten ganz normal lesen und damit auch die Visualisierung machen. Nur das steuern also schreiben der entlade/Ladeleistung würde ich nun gerne testweise über Modbus ansteuern.
MFG
Manfred

ctrlBalancing ist NUR um das GridMeter auf einem bestimmten Level zu halten (e.g. 0)

Für eine Manuelle Be-Entladung nutzt du bitte den ctrlFixActivePower. Wichtig: DAVOR den Balancing ausschalten, da sonst beide gegeneinander arbeiten.

Danke für die Info,
Ich möchte doch den Balancig testweise verwenden. Heißt anstatt den GoordWe den internen Regler der OpenEMS verwenden. Damit ich mal prüfen kann ob der besser auf 0W ausregelt wie der GoodWe. Nur der Balancing steuert den GoodWe, so wich ich bisher festgestellt habe, nicht an.
Weiß nicht was ich ggf .noch falsch gemacht habe.
Wenn ich Dich nun richtig verstanden habe, muss ich da am GoodWe nichts anders einstellen, sondern nur den Balancing oder eben den ctrlFixPower aktivieren und es sollte funktionieren?!
werde es nochmals testen. Ggf mal mit dem ctrl FixPower.
Danke für deine Info.
LG
Manfred

controlMode auf smart oder internal stellen

beim ess0

Hi Sn0w3y,
Das war genau die Info welche ich gebraucht habe.
ess0 umstellen!!!
Danke jetzt funktionierts.
Noch ne kurze frage:
es gibt bei ess0 controll Mode:

  • internal, so wars eingestellt,
  • smart, so hab ichs gerade eingestellt
  • Remote ?? weißt du für was die Einstellung Remote gut ist ?
    besten dank
    Manfred
1 Like

@Albi1961:

  • mit internal regelt der Wechselrichter immer selbst; dann kann aber durch keinen OpenEMS-Controller übersteuert werden
  • mit smart regelt der Wechselrichter selbst, wenn von OpenEMS-Controllern die Vorgabe “Eigenverbrauchsoptimierung/Nullausregelung” kommt. Mit FixActivePower etc. übernimmt dann OpenEMS
  • mit remote steuert immer OpenEMS, d.h. auch in der Eigenverbrauchsoptimierung

Wenn ich deinen Test richtig verstehe, wäre für dich also remote geeignet.

Danke Stefan für die Info.

Sorry für das späte Feedback, aber ich hatte wenig Zeit es zum Testen.
Habe ich das so richtig verstanden.

  • Internal ist klar der WR regelt selber auf 0W aus.
  • Fix Power regelt nicht, wenn ich es richtig verstanden habe, sondern ist doch so, dass ich da eine feste Größe für laden/entladen der Batterie eingeben kann.
  • Bei smart regelt da also der WR? und nicht Open EMS? Es soll ja immer auf 0W geregelt werden.
  • Bei remote verhält sich der WR gleich wie bei smart. Ich kann da kein unterschied feststellen.

Das eigentliche Problem ist, das der GoodWe WR im Gegensatz zum Kaco sehr schlecht auf 0W regelt. Obwohl genügend Energy in der Batterie vorhanden ist, zieht er pro Tag im Schnitt 1kWh nur durch das regeln. 1kWh x 365Tage = 365kWh x 30Ct/kWh = ca. 120.-€/Jahr x 20 Jahre macht 2400.-€. Das ist mehr wie so ein WR kostet.

Extrem schlimm wird es beifolgenden Situationen:
Wolkenflug: zB 2kW rauf auf 10kW runter auf 3kW usw. Das in kürzen abständen.
Herdplatten, die alle paar Sekunden ein und ausschalten,
Kaffeemaschine, Backöfen welche an und abschalten.

Jeweils wird Leistung im kW Bereich in Sekunden geschalten und der Regler versucht das auszugleichen, bis er ausgeregelt hat, ist die Last schon wieder weg, bis er wieder ausgeregelt hat ist die Last wieder da.

Frage:
Kann man den GoodWe über den externen Zugang so regeln, dass es vernünftig funktioniert. Wenn ja wie müsste man bei ESS Power die Strategy und den PDI-Filter einstellen?
Ich wäre dankbar für Feedbacks.

beste Grüße
Manfred

Die Regel-Geschwindigkeit ist u.A. von der cycle-Time abhängig. Je kürzer diese ist, desto flotter die Regelung. Ich (persönlich) hatte mal 500ms erfolgreich im Einsatz. Je mehr Geräte, Controller, usw. desto hakerliger kann es in Verbindung auch mit der Datenbank werden. Da ist die eingesetzte Hardware der limitierende Faktor - das muss man einfach ausprobieren.

Der nächste Faktor ist in der Tat der PID-Regler. Auch hier gilt leider: ausprobieren. Ein falsche Justage kann schnell zum Über-Schwingen führen. Such mal im Forum…ein schlauer Mensch hatte mal gute initiale Einstellungen gepostet.
Ich selbst habe 0,2;0,1;0,1 eingestellt bei 1 Sekunde Zyklus-Zeit.

Der PID-Regler ist also auch wieder von der Cycle-Time abhängig. Je öfter er abtasten kann, desto besser funktioniert er.

Gruß,
klinki

1 Like

Hallo @Albi1961,

bei FENECON Home erleben wir so eine Regelungenauigkeit in der Praxis nicht. Ich habe selbst einen Home (mit GoodWe-WR) im Keller stehen. Ist eine aktuelle Firmware installiert?

Internal ist klar der WR regelt selber auf 0W aus.
Fix Power regelt nicht, wenn ich es richtig verstanden habe, sondern ist doch so, dass ich da eine feste Größe für laden/entladen der Batterie eingeben kann.
Bei smart regelt da also der WR? und nicht Open EMS? Es soll ja immer auf 0W geregelt werden.
Bei remote verhält sich der WR gleich wie bei smart. Ich kann da kein unterschied feststellen.

Um die verschiedenen Modi im Code nachzuvollziehen, startest du am besten hier → openems/io.openems.edge.goodwe/src/io/openems/edge/goodwe/common/ApplyPowerHandler.java at develop · OpenEMS/openems · GitHub.

Nützlich zum Debuggen und Nachvollziehen sind auch die Channels EMS_POWER_MODE und EMS_POWER_SET.

@klinki: Zum Einstellen der PID-Parameter ist dieser Excel-“Simulator” nützlich → openems/io.openems.edge.common/doc at develop · OpenEMS/openems · GitHub

Gruß,
Stefan