NEWS
[How-To] Goodwe Wechselrichter und Modbus TCP
-
Hallo in die Runde,
ich hoffe ihr könnt mir weiterhelfen.
Habe hier einen Goodwe GW3648-EM mit LX U5.4-L dem ich gerne seine Daten über RS485 seriell entlocken möchte (nicht über TCP).
Was man vom WR so abrufen konnte:
FW Version 3121217
ARM FW 02034.00
BMS Version 27136Ich versuche die RS485 über einen Waveshare Adapter (FTDI) RS485 to USB abzufragen.
Der Adapter hängt via USB an einem Raspberry 4B mit IOBroker und Modbus Adapter.An der RS485 habe ich sowohl die Pins 1 und 2, 3 und 6 sowie 1 mit 3 und 2 mit 6 verbunden getestet
und auch jeweils + und - vertauscht, leider jeweils ohne Erfolg (im Forum gab's mal einen Tip bezüglich der Parallelschaltung von Pin 1+3 und 2+6. Deswegen auch dies ausprobiert!).Die Kommunikation ist konfiguriert mit 9600bit/s, 8/N/1, Geräte-ID mit 247
Bekomme in keinem Fall eine brauchbare Kommunikation zustande.
Der Modbus Adapter startet, wird kurz grün und geht dann wieder auf gelb.
Ich hoffe, dass Ihr mir evtl. auf die Sprünge helfen könnt!
Hier mal die Meldungen nach Start der Modbus Instanz mit debug:
modbus.0
2024-06-05 20:08:22.053 error Error response: Data address of some or all the required entities are not allowed or do not exist in slavemodbus.0
2024-06-05 20:08:22.052 error Error response for FCx3: Illegal Data Addressmodbus.0
2024-06-05 20:08:21.779 debug [DevID_247/holdingRegs] Poll address 35103 - 6 registersmodbus.0
2024-06-05 20:08:21.779 debug Initialization of scale factors done!modbus.0
2024-06-05 20:08:21.777 debug [DevID_247] Poll start ---------------------modbus.0
2024-06-05 20:08:21.776 info Connected to slavemodbus.0
2024-06-05 20:08:21.762 debug connect to serial /dev/ttyUSB0 with 9600modbus.0
2024-06-05 20:08:21.482 debug Add holdingRegisters.35108_PV2Current: {"_id":"holdingRegisters.35108_PV2Current","type":"state","common":{"name":"","role":"","type":"number","read":true,"write":true,"def":0,"unit":"A"},"native":{"regType":"holdingRegs","address":35108,"deviceId":247,"type":"uint16be","len":1,"offset":0,"factor":1,"poll":true}}modbus.0
2024-06-05 20:08:21.482 debug Add holdingRegisters.35107_PV2_Voltage: {"_id":"holdingRegisters.35107_PV2_Voltage","type":"state","common":{"name":"","role":"","type":"number","read":true,"write":true,"def":0,"unit":"V"},"native":{"regType":"holdingRegs","address":35107,"deviceId":247,"type":"uint16be","len":1,"offset":0,"factor":1,"poll":true}}modbus.0
2024-06-05 20:08:21.482 debug Add holdingRegisters.35104_PV1_Current: {"_id":"holdingRegisters.35104_PV1_Current","type":"state","common":{"name":"","role":"","type":"number","read":true,"write":true,"def":0,"unit":"A"},"native":{"regType":"holdingRegs","address":35104,"deviceId":247,"type":"uint16be","len":1,"offset":0,"factor":1,"poll":true}}modbus.0
2024-06-05 20:08:21.481 debug Add holdingRegisters.35103_PV1_Voltage: {"_id":"holdingRegisters.35103_PV1_Voltage","type":"state","common":{"name":"","role":"","type":"number","read":true,"write":true,"def":0,"unit":"V"},"native":{"regType":"holdingRegs","address":35103,"deviceId":247,"type":"uint16be","len":1,"offset":0,"factor":1,"poll":true}}modbus.0
2024-06-05 20:08:21.481 debug Initialize Objects for holdingRegs: [{"_address":35103,"name":"PV1 Voltage","description":"","unit":"V","type":"uint16be","len":1,"factor":1,"offset":0,"formula":"","role":"","room":"","poll":true,"wp":"","cw":"","isScale":"","address":35103,"deviceId":247,"id":"holdingRegisters.35103_PV1_Voltage"},{"_address":35104,"name":"PV1 Current","description":"","unit":"A","type":"uint16be","len":1,"factor":1,"offset":0,"formula":"","role":"","room":"","poll":true,"wp":"","cw":"","isScale":"","address":35104,"deviceId":247,"id":"holdingRegisters.35104_PV1_Current"},{"_address":35107,"name":"PV2 Voltage","description":"","unit":"V","type":"uint16be","len":1,"factor":1,"offset":0,"formula":"","role":"","room":"","poll":true,"wp":"","cw":"","isScale":"","deviceId":247,"address":35107,"id":"holdingRegisters.35107_PV2_Voltage"},{"_address":35108,"name":"PV2Current","description":"","unit":"A","type":"uint16be","len":1,"factor":1,"offset":0,"formula":"","role":"","room":"","poll":true,"wp":"","cw":"","isScale":"","deviceId":247,"address":35108,"id":"holdingRegisters.35108_PV2Current"}]modbus.0
2024-06-05 20:08:21.480 debug Initialize Objects for inputRegs: []modbus.0
2024-06-05 20:08:21.479 debug Initialize Objects for coils: []modbus.0
2024-06-05 20:08:21.479 debug Initialize Objects for disInputs: []modbus.0
2024-06-05 20:08:21.326 info starting. Version 6.1.0 in /opt/iobroker/node_modules/iobroker.modbus, node: v20.14.0, js-controller: 5.0.19modbus.0
2024-06-05 20:08:20.894 debug Plugin sentry Initialize Plugin (enabled=true)modbus.0
2024-06-05 20:08:20.856 debug States connected to redis: 127.0.0.1:9000modbus.0
2024-06-05 20:08:20.796 debug States create User PubSub Clientmodbus.0
2024-06-05 20:08:20.795 debug States create System PubSub Clientmodbus.0
2024-06-05 20:08:20.787 debug Redis States: Use Redis connection: 127.0.0.1:9000modbus.0
2024-06-05 20:08:20.768 debug Objects connected to redis: 127.0.0.1:9001modbus.0
2024-06-05 20:08:20.759 debug Objects client initialize lua scriptsmodbus.0
2024-06-05 20:08:20.742 debug Objects create User PubSub Clientmodbus.0
2024-06-05 20:08:20.739 debug Objects create System PubSub Clientmodbus.0
2024-06-05 20:08:20.728 debug Objects client ready ... initialize nowmodbus.0
2024-06-05 20:08:20.688 debug Redis Objects: Use Redis connection: 127.0.0.1:9001
host.raspberrypi
2024-06-05 20:08:19.378 info instance system.adapter.modbus.0 started with pid 3270
host.raspberrypi
2024-06-05 20:08:19.252 info "system.adapter.modbus.0" enabled -
Hallo, ich bin neu hier und habe folgendes Problem.
Wechselrichter Goodwe ET29.9
Kann via Modbus RTU Daten lesen und auch schreiben.
Nur finde ich nicht raus, wie ich den Wechselrichter gezielt sagen kann, dass die Batterie jetzt mit einem Strom von xA geladen werden soll.
Kann mir jemand weiterhelfen? -
Hallo, ich bin neu hier und habe folgendes Problem.
Wechselrichter Goodwe ET29.9
Kann via Modbus RTU Daten lesen und auch schreiben.
Nur finde ich nicht raus, wie ich den Wechselrichter gezielt sagen kann, dass die Batterie jetzt mit einem Strom von xA geladen werden soll.
Kann mir jemand weiterhelfen?Hi @hochgern, es gibt verschiedene Möglichkeiten den Speicher zu laden. Ich selbst steuere das über die Schnelllade Funktion, das sind die Register 47545 = Fast chargin aktivieren, 47646 = SOC Stop und 47603 = Ladeleistung in %. Früher hab ich einfach den SOC minimum 45346 auf den gewünschten SOC wert eingestellt und dann wieder zurück bis der gewünschte Ladezustand erreicht wurde. Das funktioniert nur noch bedingt bei mir, da nur noch mit 450W geladen wird, wieso auch immer. Über die Register 47511 und 47512 würde auch gehen.
-
Hi @hochgern, es gibt verschiedene Möglichkeiten den Speicher zu laden. Ich selbst steuere das über die Schnelllade Funktion, das sind die Register 47545 = Fast chargin aktivieren, 47646 = SOC Stop und 47603 = Ladeleistung in %. Früher hab ich einfach den SOC minimum 45346 auf den gewünschten SOC wert eingestellt und dann wieder zurück bis der gewünschte Ladezustand erreicht wurde. Das funktioniert nur noch bedingt bei mir, da nur noch mit 450W geladen wird, wieso auch immer. Über die Register 47511 und 47512 würde auch gehen.
@michi_pi
ich habe auch das Problem das richtige Register für die Steuerung des SoC zu finden. Ich habe einen GW25 und auch die aktuelle Registerbelegung von Goodwe (hoffe ich zumindest), aber ich finde einfach nicht das Register für die Werte die in der PV-Master APP mit "Entladungstiefe Netz/netzunabhängig" einstellbar sind. Der Zugriff über Modbus funktioniert. -
Hi @hochgern, es gibt verschiedene Möglichkeiten den Speicher zu laden. Ich selbst steuere das über die Schnelllade Funktion, das sind die Register 47545 = Fast chargin aktivieren, 47646 = SOC Stop und 47603 = Ladeleistung in %. Früher hab ich einfach den SOC minimum 45346 auf den gewünschten SOC wert eingestellt und dann wieder zurück bis der gewünschte Ladezustand erreicht wurde. Das funktioniert nur noch bedingt bei mir, da nur noch mit 450W geladen wird, wieso auch immer. Über die Register 47511 und 47512 würde auch gehen.
Update:
Kaum habe ich mich extra angemeldet um die Frage zu stellen, schon habe ich die Register nun doch gefunden. Es sind die Register 45356 für "Entladungstiefe am Netz" und 45358 für "Entladungstiefe netzunabhängig". Beachten muß man nur, daß man im Unterschied zur APP den SoC eingeben muß. Der Wert für die Entladungstiefe ist also 100-gewünschte Entladungstiefe. -
Update:
Kaum habe ich mich extra angemeldet um die Frage zu stellen, schon habe ich die Register nun doch gefunden. Es sind die Register 45356 für "Entladungstiefe am Netz" und 45358 für "Entladungstiefe netzunabhängig". Beachten muß man nur, daß man im Unterschied zur APP den SoC eingeben muß. Der Wert für die Entladungstiefe ist also 100-gewünschte Entladungstiefe.@michi_pi said in [How-To] Goodwe Wechselrichter und Modbus TCP:
Hi @hochgern, es gibt verschiedene Möglichkeiten den Speicher zu laden. Ich selbst steuere das über die Schnelllade Funktion, das sind die Register 47545 = Fast chargin aktivieren, 47646 = SOC Stop und 47603 = Ladeleistung in %. Früher hab ich einfach den SOC minimum 45346 auf den gewünschten SOC wert eingestellt und dann wieder zurück bis der gewünschte Ladezustand erreicht wurde. Das funktioniert nur noch bedingt bei mir, da nur noch mit 450W geladen wird, wieso auch immer. Über die Register 47511 und 47512 würde auch gehen.
Jetzt habe ich doch noch ein Problem. Die von mir genutzte Lösung mit dem Register 45356 für "Entladungstiefe am Netz" funktioniert zwar perfekt, aber leider wirkt dieses Register nur auf die Batterie 1. Die Batterie 2 hat einen eigenen Einstellwert (siehe SolarGo-APP), für den ich das zugehörige Register aber bisher nicht gefunden habe. Falls Jemand eine Idee hat, dann immer her damit.
-
Bei mir erscheinem im Log jede Minute diese Meldungen obwohl der Datenpunkt (aktuell nur einer) richtig aktualisiert wird...
modbus.0 2025-03-04 15:51:09.572 info Disconnected from slave 192.168.178.45 modbus.0 2025-03-04 15:51:08.572 warn [DevID_247] Poll error count: 1 code: {"err":"timeout","timeout":5000} modbus.0 2025-03-04 15:51:08.571 error Client in error state. modbus.0 2025-03-04 15:51:08.571 error Request timed out. modbus.0 2025-03-04 15:51:08.571 warn Error: undefined modbus.0 2025-03-04 15:47:08.839 info Connected to slave 192.168.178.45Was ist die Ursache?
-
Bei mir erscheinem im Log jede Minute diese Meldungen obwohl der Datenpunkt (aktuell nur einer) richtig aktualisiert wird...
modbus.0 2025-03-04 15:51:09.572 info Disconnected from slave 192.168.178.45 modbus.0 2025-03-04 15:51:08.572 warn [DevID_247] Poll error count: 1 code: {"err":"timeout","timeout":5000} modbus.0 2025-03-04 15:51:08.571 error Client in error state. modbus.0 2025-03-04 15:51:08.571 error Request timed out. modbus.0 2025-03-04 15:51:08.571 warn Error: undefined modbus.0 2025-03-04 15:47:08.839 info Connected to slave 192.168.178.45Was ist die Ursache?
@sandmanyz Hast du die die Abfragezeit schon mal etwas erhöht? Ich frage direkt über den EMS Port ab mit 8sekunden, das ist da Minimum das bei mir funktioniert.
Mit dem WIFI/LAN Dongle musste ich mindestens 12 Sekunden einstellen. -
@sandmanyz Hast du die die Abfragezeit schon mal etwas erhöht? Ich frage direkt über den EMS Port ab mit 8sekunden, das ist da Minimum das bei mir funktioniert.
Mit dem WIFI/LAN Dongle musste ich mindestens 12 Sekunden einstellen.Welchen Wert muss ich ändern? Datenabfrageintervall (schon mit 10000ms getestet) unde/oder Leseintervall (auch schon mit 10000ms getestet).
Habe auch mal auf Serial gewechselt aber da erscheinen auch Warnungen...modbus.0 2025-03-13 18:14:24.716 info Disconnected from slave modbus.0 2025-03-13 18:14:24.666 warn [DevID_247] Poll error count: 8 code: "App Timeout" modbus.0 2025-03-13 18:14:19.465 info Connected to slave modbus.0 2025-03-13 18:13:19.451 info Disconnected from slave modbus.0 2025-03-13 18:13:19.399 warn [DevID_247] Poll error count: 7 code: "App Timeout" modbus.0 2025-03-13 18:13:14.198 info Connected to slave modbus.0 2025-03-13 18:12:14.182 info Disconnected from slave modbus.0 2025-03-13 18:12:14.130 warn [DevID_247] Poll error count: 6 code: "App Timeout" modbus.0 2025-03-13 18:11:58.878 warn [DevID_247] Poll error count: 5 code: "App Timeout" modbus.0 2025-03-13 18:11:43.625 warn [DevID_247] Poll error count: 4 code: "App Timeout" modbus.0 2025-03-13 18:11:28.372 warn [DevID_247] Poll error count: 3 code: "App Timeout" modbus.0 2025-03-13 18:11:13.120 warn [DevID_247] Poll error count: 2 code: "App Timeout" modbus.0 2025-03-13 18:10:57.867 warn [DevID_247] Poll error count: 1 code: "App Timeout" modbus.0 2025-03-13 18:10:52.664 info Connected to slave modbus.0 2025-03-13 18:10:52.196 info starting. Version 6.3.2 in /opt/iobroker/node_modules/iobroker.modbus, node: v20.18.2, js-controller: 7.0.6Hier meine aktuelle Konfiguration:



-
Welchen Wert muss ich ändern? Datenabfrageintervall (schon mit 10000ms getestet) unde/oder Leseintervall (auch schon mit 10000ms getestet).
Habe auch mal auf Serial gewechselt aber da erscheinen auch Warnungen...modbus.0 2025-03-13 18:14:24.716 info Disconnected from slave modbus.0 2025-03-13 18:14:24.666 warn [DevID_247] Poll error count: 8 code: "App Timeout" modbus.0 2025-03-13 18:14:19.465 info Connected to slave modbus.0 2025-03-13 18:13:19.451 info Disconnected from slave modbus.0 2025-03-13 18:13:19.399 warn [DevID_247] Poll error count: 7 code: "App Timeout" modbus.0 2025-03-13 18:13:14.198 info Connected to slave modbus.0 2025-03-13 18:12:14.182 info Disconnected from slave modbus.0 2025-03-13 18:12:14.130 warn [DevID_247] Poll error count: 6 code: "App Timeout" modbus.0 2025-03-13 18:11:58.878 warn [DevID_247] Poll error count: 5 code: "App Timeout" modbus.0 2025-03-13 18:11:43.625 warn [DevID_247] Poll error count: 4 code: "App Timeout" modbus.0 2025-03-13 18:11:28.372 warn [DevID_247] Poll error count: 3 code: "App Timeout" modbus.0 2025-03-13 18:11:13.120 warn [DevID_247] Poll error count: 2 code: "App Timeout" modbus.0 2025-03-13 18:10:57.867 warn [DevID_247] Poll error count: 1 code: "App Timeout" modbus.0 2025-03-13 18:10:52.664 info Connected to slave modbus.0 2025-03-13 18:10:52.196 info starting. Version 6.3.2 in /opt/iobroker/node_modules/iobroker.modbus, node: v20.18.2, js-controller: 7.0.6Hier meine aktuelle Konfiguration:



@sandmanyz hier meine Einstellung

Zu den Verbindungsparameter kann ich jetzt nichts sagen, weil ich nicht weis mit welchem Gerät du abfrägst.
-
Ich habe einen einphasigen GoodWe-Wechselrichter GW5000N-EH und wollte diesen mit Modbus in EVCC einbinden. Ich hoffe, es ist ok, wenn ich hier mein Ergebnis teile, auch wenn der der Fokus nicht IOBroker ist ;-)
Da über diesen relativ wenig bekannt ist und meistens über die "großen" Wechselrichter von GoodWe geschrieben wird, möchte ich kurz bestätigen, dass man auch diesen mit einem Modbus-Adapter wie dem Waveshare "RS485 TO POE ETH (B)" per Modbus TCP auslesen und z.B. damit in EVCC integrieren kann.
Da der ursprüngliche Beitragsersteller mir ermöglicht hat, darüber den Goodwe GW5000N-EH einzubinden und mir die entscheidenden Tipps bzw. "roten Faden" gegeben hat, möchte ich gerne das Know-How für diesen eher seltenen Wechselrichter teilen und damit etwas zurückgeben - es geht!
Der Vorteil: Gegenüber einer Einbindung rein über Homeassistant/IOBroker hinaus erhält die Modbus-Integration in EVCC das Attribut "steuerbar" - dadurch greift der Batterieentladeschutz von EVCC.
Meine Einstellungen dazu (Waveshare):
Device IP: Die IP Eures Waveshares im LAN
Work Mode: TCP-Server
Destination IP: IP des Wechselrichters im WLAN (findet Ihr z.B. über euren Router bzw. bei mir Ubiquit)
Device Port/Destination Port: 502
Baud Rate: 9600
Databits: 8
Parity None
Stopbits: 1
Flow Control: NoneProtocol (Wichtig!): Modbus TCP to RTU
EVCC:
GoodWe ET/EH/BH/BT Hybrid Inverter (OHNE Wifi)
Modbus Verbindung: Netzwerk
Modbus ID: 247 (Standardstellung gemäß SEMS+Portal)
IP-Adresse: Eure Device IP (nicht (!) die des Wechselrichters)
Port: 502
Modus-Protokoll: TCP (!)
Batteriespeichernummer: 1
Akkukapazität (so wie bei Euch)Die Einstellungen gelten in EVCC sowohl für "Hausbatterie" als auch für den "Wechselrichter"
Damit das funktioniert, muss im Wechselrichter natürlich Folgendes eingestellt sein:
Verbinden zum Wechselrichter-WLAN "Solar-Wifi...."
App Solar Go aufrufen
RS485
Modusbus TCP = aktiviert
COM-Adresse: 247
Baudrate: 9600Meine Verkabelung:
Standard-Patch-Kabel (S/FTP, TIAE 486B)
a) ein Ende an Waveshare- Orange in Port 485B (der zweite von links)
- Orange/weiß in Port 485A (der dritte von links)
(zuvor abschneiden und vorsichtig die Äderchen abmanteln, ich habe sie ohne Aderendülse verbunden)
b) anderes Ende mit RJ45 in Wechselrichter, Port Serial/485 (ggfs. die Abdeckplatte lösen)
waveshare com/wiki/ RS485_TO_POE_ETH_(B)
Test mit: mbpoll -a 247 -t 4 -r 37007 -c 2 -1 DEVICE_IP
--> 37007 ist der State of chargeWichtig: Danach funktioniert es reibungslos.
"Status prüfen" hat bei mir in EVCC ohne Ende gemeckert.
Verblüffender Weise geht es nach dem Neustart, wenn man einfach "Trotzdem speichern" klickt.Als Erklärung zu EVCC und Modbus war für mich das Youtube-Video hilfreich: Wallbox mit Waveshare über Ethernet in EVCC und Home Assistant integrieren
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden