NEWS
Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden
-
@cah
Dankeschön, das habe ich schon lange gesucht.
Habe mir selbst blocklys gebaut gehabt um diese Funktion nachzubauen.So ist es viel einfacher.
Super Arbeit, danke fürs teilen.
-
@cah said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
@atlantis , Forum, Danke für die viele Vorarbeit - jetzt gebe ich was zurück.
Da der Wechsel zum Stromanbieter mit dynamischen Tarifen ansteht, habe ich mich mit der Zwangsladung der Batterie durch den WR (SH8.0RT) beschäftigt. Und siehe da, per Web lässt sich das konfigurieren. Mithilfe von SunGather hab ich die entsprechenden Holding-Register gefunden.
Bisher habe ich die Register nur gelesen, nicht per ioBroker geschrieben; dazu fehlt mir noch zuviel vom ioBroker-drumherum. Aber vielleicht hilft das hier ja schon mal anderen.
Gerne reviewen und wenn für gut befunden in die von Atlantis bereitgestellten Configs integrieren. Das Format des folgenden Snippets orientiert sich an der SunGather-Config.Danke für kurzen Hinweis, falls meine Erkenntnis nicht so neu sein sollte wie von mir empfunden
Alaaf! CaH
- name: "forced_batt_charge" level: 2 address: 13140 datatype: "U16" models: ["SH8.0RT"] datarange: - response: 0xAA value: "Enable" - response: 0x55 value: "Disable" - name: "forced_batt_charge_day" level: 2 address: 13141 datatype: "U16" models: ["SH8.0RT"] datarange: - response: 1 value: "AllDaysOfWeek" - response: 0 value: "WorkingDaysOnly" - name: "forced_batt_charge_1_start_hour" level: 0 address: 13142 datatype: "U16" models: ["SH8.0RT"] unit: "HH" - name: "forced_batt_charge_1_start_minute" level: 0 address: 13143 datatype: "U16" models: ["SH8.0RT"] unit: "MM" - name: "forced_batt_charge_1_end_hour" level: 0 address: 13144 datatype: "U16" models: ["SH8.0RT"] unit: "HH" - name: "forced_batt_charge_1_end_minute" level: 0 address: 13145 datatype: "U16" models: ["SH8.0RT"] unit: "MM" - name: "forced_batt_charge_1_SOC_perc" level: 2 address: 13146 datatype: "U16" models: ["SH8.0RT"] accuracy: 1 unit: "%" - name: "forced_batt_charge_2_start_hour" level: 0 address: 13147 datatype: "U16" models: ["SH8.0RT"] unit: "HH" - name: "forced_batt_charge_2_start_minute" level: 0 address: 13148 datatype: "U16" models: ["SH8.0RT"] unit: "MM" - name: "forced_batt_charge_2_end_hour" level: 0 address: 13149 datatype: "U16" models: ["SH8.0RT"] unit: "HH" - name: "forced_batt_charge_2_end_minute" level: 0 address: 13150 datatype: "U16" models: ["SH8.0RT"] unit: "MM" - name: "forced_batt_charge_2_SOC_perc" level: 2 address: 13151 datatype: "U16" models: ["SH8.0RT"] accuracy: 1 unit: "%"
Hei nochmal, eben bin ich auf der Suche nach weiteren bestätigenden Quellen auf diesen Link im Photovoltaikforum gestoßen. Hier sind andere Register angegeben - aber es ist die offizielle Spec.
Also bitte meine Angaben kritisch checken.
Zu Schade, dass die SunGrow-Modbus-Spec so verteilt im Netz vorliegt und nicht einfach zu finden ist. -
Moin Zusammen,
da mich inzwischen einige per PM angefragt haben hier ein Script das den SH10RT dazu bringt heute Nacht zwangsweise zu laden.
Ab um 02 Uhr nimmt der nix mehr aus dem Speicher
ab 03 Uhr lädt er mit 4,99kW bis 04:29
ab 06:59 nimmt er dann wieder aus dem Speicher// Automode beenden = Entladen beenden schedule('{"time":{"exactTime":true,"start":"02:00"},"period":{"once":"17.11.2023"}}', async () => { setState('modbus.0.holdingRegisters.1.13049_EMS_mode_selection' /* EMS mode selection */, 2); }); // PV Speicher Laden Starten schedule('{"time":{"exactTime":true,"start":"03:01"},"period":{"once":"17.11.2023"}}', async () => { // 170 = AA (Laden) setState('modbus.0.holdingRegisters.1.13050_Charge/discharge_command' /* Charge/discharge command */, 170); }); // PV Speicher Laden beenden schedule('{"time":{"exactTime":true,"start":"04:29"},"period":{"once":"17.11.2023"}}', async () => { // 204 = CC (Stop) setState('modbus.0.holdingRegisters.1.13050_Charge/discharge_command' /* Charge/discharge command */, 204); }); // zurück in AutoMode schedule('{"time":{"exactTime":true,"start":"06:59"},"period":{"once":"17.11.2023"}}', async () => { setState('modbus.0.holdingRegisters.1.13049_EMS_mode_selection' /* EMS mode selection */, 0); });
Blockly dann so
die Objekte sind diese
Mit 13051 wird die Ladestärke gesteuert. ACHTUNG geht nicht über 5000 !
Viel Spaß beim ausprobieren.
Natürlich macht das jeder auf eigenes Risiko -
@ostseeskipper nach meiner Erfahrung kann man auch 7000 einstellen aber der macht einfach nicht mehr als 5000. Will damit nur sagen es ist nicht schlimm wenn man einen größeren Wert eingibt.
-
@carsten-sauermann said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
@ostseeskipper nach meiner Erfahrung kann man auch 7000 einstellen aber der macht einfach nicht mehr als 5000. Will damit nur sagen es ist nicht schlimm wenn man einen größeren Wert eingibt.
Das sagst du nur weil dir deshalb noch keiner kaputt(mit alter Firmware) gegangen ist.
Wie gesagt auf eigene Gefahr und in der Sungrow Modbus Spec steht halt max 5000 drin. -
@ostseeskipper stimmt noch ist er ganz aber ich stelle den auch nur auf 5000 hatte aber mal beim eingeben eine 0 zu viel eingetragen. Hat trotzdem nur mit 5000 geladen...
-
@ostseeskipper
Danke für das Skript. Noch eine Frage: Warum beendest du die Entnahme 1h vorher? Gibts da eine Vorgabe von Sungrow? -
@blacksheep587 said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
@ostseeskipper
Danke für das Skript. Noch eine Frage: Warum beendest du die Entnahme 1h vorher? Gibts da eine Vorgabe von Sungrow?Nein keine Vorgabe von Sungrow.
Wenn der Strombezug aus dem Netz günstiger ist, als hochgerechnet später (wenn wieder teuer) aus dem Speicher nimmst ist das reine Mathematik. Daher lass ich noch was im Speicher was du sonst nachladen müsstet für teurere Zeiten. Denk dran der Speicher hat ungefähr 92% Wirkungsgrad (Verhältnis zw "total charge" und "total discharge")
heisst bei 30ct in den Speicher ist wie ungefähr 33 ct in echt. -
Wenn ich den Speicher lade und meine Verbindung zum System irgendwie abreißt, schützt das BMS das System auch wenn ich falsche Signale/Vorgaben an den Akku sende? Habe es so eingestellt das bei 90% das laden beendet wird, aber wenn Modbus ausfallen sollte kann ich das Signal ja nicht senden.
-
Hallo,
herzlichen Dank für all die tollen Postings hier, ich habe soweit alle gelesen. Leider hat es mich nicht dazu in die Lage versetzt, die modbus Abfrage hinzubekommen.Hardware
Raspi 4 mit iobrokerSH10RT WR, Winter: SH10RT(COM1-001)
Sungrow Akku: WiNet: SBR160(COM1-200)
WLAN aktiv für Cloud. 192.168.188.107
LAN am WiNet zu Router: 192.168.188.108, 100 Mbit
LAN am WG: 192.168.188.113, 100 MbitSettings
Die Einstellungen habe ich von @Atlantis übernommen, vielen Dank dafür. Ich habe auch mit den unterschiedlichen Zeiten mal gespielt, welche oben diskutiert wurden.
Register & Co
Übernommen von GithubResultat
- Anschluss am LAN Winet: Verbindung kommt nicht zustande.
ja: Verbunden mit Host
ja: Lebenszeichen
nein: Verbunden mit Gerät oder Dienst
Log:
2023-12-06 18:48:20.476 debug Closing client on purpose. modbus.0 2023-12-06 18:48:19.475 debug Cleaning up request fifo. modbus.0 2023-12-06 18:48:19.474 debug Socket closed with error modbus.0 2023-12-06 18:48:19.468 info Disconnected from slave 192.168.188.108 modbus.0 2023-12-06 18:48:19.467 debug Closing client on purpose. modbus.0 2023-12-06 18:48:19.465 info Connected to slave 192.168.188.108 modbus.0 2023-12-06 18:48:19.080 info starting. Version 5.0.11 in /opt/iobroker/node_modules/iobroker.modbus, node: v18.19.0, js-controller: 5.0.16 modbus.0 2023-12-06 18:48:18.638 debug Plugin sentry Initialize Plugin (enabled=true) modbus.0 2023-12-06 18:48:18.599 debug States connected to redis: 127.0.0.1:9000 modbus.0 2023-12-06 18:48:18.539 debug States create User PubSub Client modbus.0 2023-12-06 18:48:18.538 debug States create System PubSub Client modbus.0 2023-12-06 18:48:18.525 debug Redis States: Use Redis connection: 127.0.0.1:9000 modbus.0 2023-12-06 18:48:18.485 debug Objects connected to redis: 127.0.0.1:9001 modbus.0 2023-12-06 18:48:18.477 debug Objects client initialize lua scripts modbus.0 2023-12-06 18:48:18.436 debug Objects create User PubSub Client modbus.0 2023-12-06 18:48:18.435 debug Objects create System PubSub Client modbus.0 2023-12-06 18:48:18.432 debug Objects client ready ... initialize now modbus.0 2023-12-06 18:48:18.395 debug Redis Objects: Use Redis connection: 127.0.0.1:9001
- Anschluss am WLAN Winet: Verbindung kommt nicht zustande.
ja: Verbunden mit Host
ja: Lebenszeichen
nein: Verbunden mit Gerät oder Dienst
Log:
2023-12-06 18:50:47.766 debug Closing client on purpose. modbus.0 2023-12-06 18:50:46.764 debug Cleaning up request fifo. modbus.0 2023-12-06 18:50:46.763 debug Socket closed with error modbus.0 2023-12-06 18:50:46.755 info Disconnected from slave 192.168.188.107 modbus.0 2023-12-06 18:50:46.753 debug Closing client on purpose. modbus.0 2023-12-06 18:50:46.752 info Connected to slave 192.168.188.107
- LAN Anschluss
Resultat das gleiche, wie bei 1 und 2. Erhalte den bereits im Form gemosteten Socket Error.
Winet
Unter Betriebs - > weiterleiten von Daten -> MODBUS-TCP IP1 erschien früher mal die iobroker IP. Mittlerweile auch nicht mehr.Verzweiflungstaten
- Neustart Router
- Neustart ioBroker
- Neustart WR nach jedem Wechsel
- Tischkante gebissen
- mehr Posts gelesen
- Tischkante gebissen
- wiederholtes Löschen und neu installieren des Adapters in iobroker
Ich wäre für Hilfe sehr dankbar.
LG & einen schönen Nikolaus-Abend. - Anschluss am LAN Winet: Verbindung kommt nicht zustande.
-
@ahnungsloshoffnungsvoll
Die Einstellungen im Adapter wären ja noch recht interessant gewesen, sei es drum.Verbindung: TCP
Partner IP: IP des Wechselrichters LAN oder WINet
Port: 502 (im Wechselrichter kontrollieren)-
IP des WR aufrufen
-
mit admin und pw8888 anmelden
-
System/Weitergabekonfiguration/Modbus
-
Port 502 Aktivieren
Geräte ID: 1 (im Wechselrichter kontrollieren)
-
Gerät/Geräteliste
-
Geräteadresse sollte auf "1" stehen
Dann sollte die Verbindung stehen, notfalls kann ein Update des WR helfen.
Mit dem ModbusMaster kann man dann mal versuchen einzelen Register zu lesen.
Dann kann man die Input und Holdings im IOB anpassen. -
-
@ahnungsloshoffnungsvoll du musst an den hintern LAN Port nicht an dem vom Dongel
-
@carsten-sauermann sagte in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
@ahnungsloshoffnungsvoll du musst an den hintern LAN Port nicht an dem vom Dongel
Stimmt so nicht ganz, mein SH8.0 läuft bei mir mit dem WiNet ohne Probleme seit 1,5 Jahren.
Es kann nur sein, das nicht alle Register Abfragbar sind. -
@mcbeath Vielen Dank. Das Passwort kannte ich noch nicht.
Ich habe festgestellt, dass der Port 502 auch eingeschaltet ist, per Terminal konnte ich den auch vorher anpingen, habe ich nicht erwähnt. Die Geräteadresse lautet 1, für den Akku 200, wie oben in den Posts auch schon bei anderen so beschrieben.
Der WR wurde bei Installation vor 2 Wochen auf das neuste Update gebracht, wobei ich keine Versionsnummer kenne oder finde.@carsten-sauermann Leider funktioniert das gar nicht bei mir, es kann eine Verbindung zum LAN Port nicht aufgebaut werden.
-
Mit der Liste von Atlantis habe ich auch begonnen. Bei mir hat sie nach einer Weile auch zu Abbrüchen geführt. Der Sungrow Wechselrichter verzeiht fehlerhafte Abfragen nicht (vielleicht ist es auch ein Problem des Protokolls, ich bin nicht sicher). Sicher bin ich nicht, aber ich glaube Atlantis fragt mehr Register ab als abfragbar sind. Da laufen dann Fehler auf bis die Verbindung abbricht.
Die späteren Registerlisten sind besser.
-
@ahnungsloshoffnungsvoll
Dann würde ich jetzt mal mit dem ModbusMaster anfangen eine Verbindung zum WR aufzubauen.Hatte anfangs auch Probleme mit der Verbindung.
-
@mcbeath ich habe leider kein Windows, nutze mal ein anderes Tool. Leider kann ich das inhaltlich nicht so deuten. Es scheint eine Verbindung herzustellen.
-
@ahnungsloshoffnungsvoll
Das sieht eigentlich doch vielversprechend aus.
Kenne das Tool nicht aber ich Werte es auch mal als verbunden.Auf was läuft denn der IOB? Raspi, Docker etc?
Eventuell liegt es daran, daß du dem System den Port 502 öffnen musst. -
@mcbeath
@mcbeath Ich nutze einen Raspberry 4, RapsiOS Lite und iobroker.
Der Port 502 ist offen.
Ein Teilerfolg ist getan.
Nachdem ich einen Glühwein getrunken habe, stand plötzlich die Verbindung.
Jedoch werden die Daten nicht in die Register geladen.
Log:
modbus.0 2023-12-07 20:22:02.806 debug [DevID_1] Poll start ---------------------
Leider hat ein weiterer Glühwein das Problem nicht behoben.
-
@ahnungsloshoffnungsvoll
komisch, so ähnlich war es bei mir auch, als ob der WR erst mal vom Test-Tool ins Leben gerufen werden müssteDu solltest mit den Registern langsam anfangen, wenn da Sachen drin stehen die der WR nicht mag
läuft teilweise gar nichts mehr (Nach meine Erfahrung)Auch besteht das Problem beim Importieren der Register das das Einlesen nicht sauber funktioniert.
Hat mit dem trennen der einzelnen Werte zu tun._address name description unit type len factor offset formula role room cw isScale 4999 Device type code Geräte Typ-Code int8be 1 1 0 value false false 5000 Nominal Output Power Installierte Leistung Kw uint16be 1 0.1 0 value false false 5001 Output Type uint16be 1 1.0 0 value false false 5002 Daily Output Energy Eigene Energienutzung heute (PV & Akku) Kwh uint16be 1 0.1 0 value false false 5003 Total Output Energy Eigene Energienutzung gesamt (PV & Akku) Kwh uint32sw 2 0.1 0 value false false 5005 Total Runing Time Laufzeit der Anlage h uint32sw 2 1.0 0 value false false 5007 Inside Temperature Temperatur im Wechselrichter °C int16be 1 0.1 0 value false false 5010 MPPT 1 Voltage MPPT1 Spannung V uint16be 1 0.1 0 value false false 5011 MPPT 1 Current MPPT1 Strom A uint16be 1 0.1 0 value false false 5012 MPPT 2 Voltage MPPT2 Spannung V uint16be 1 0.1 0 value false false 5013 MPPT 2 Current MPPT2 Strom A uint16be 1 0.1 0 value false false 5016 Total DC Power Aktuell PV-Leistung DC W uint32sw 2 1 0 value false false 5018 Spannung Ph A Spannung Phase L1 V uint16be 1 0.1 0 value false false 5019 Spannung Ph B Spannung Phase L2 V uint16be 1 0.1 0 value false false 5020 Spannung Ph C Spannung Phase L3 V uint16be 1 0.1 0 value false false 5030 Total Active Power Wirkleistung W int32sw 2 1.0 0 value false false 5032 Reactive Power Blindleistung VA® int32sw 2 0 value false false 5034 Power Factor Leistungsfaktor int16be 1 0.001 0 value false false 5035 Grid Frequency Netzfrequenz Hz uint16be 1 0.01 0 value false false 12999 System State Systemstatus uint16be 1 1 0 value false false 13000 Running State Betriebsstatus uint16be 1 1 0 value false false 13001 Daily PV Generation PV-Stromerzeugung heute Kwh uint16be 1 0.1 0 value false false 13002 Total PV Generation PV-Stromerzeugung gesamt Kwh uint32sw 2 0.1 0 value false false 13004 Daily export energy from PV PV-Einspeise Energie heute Kwh uint16be 1 0.1 0 value false false 13005 Total export energy from PV PV-Einspeise Energie gesamt Kwh uint32sw 2 0.1 0 value false false 13007 Load power Aktuelle Last W uint32sw 2 1 0 value false false 13009 Export power Aktuelle Leistung am Übergabepunkt W int32sw 2 1 0 value false false 13011 Daily battery charge energy from PV Energie in Speicher aus PV heute Kwh uint16be 1 0.1 0 value false false 13012 Total battery charge energy from PV Energie in Speicher aus PV gesamt Kwh uint32sw 2 0.1 0 value false false 13014 C02 Reduction C02 Einsparung kg uint32sw 2 0.1 0 value false false 13016 Daily direct Energy Consumption Direkter Eigenverbrauch aus PV heute Kwh uint16be 1 0.1 0 value false false 13017 Total direct Energy Consumption Direkter Eigenverbrauch aus PV gesamt Kwh uint32sw 2 0.1 0 value false false 13019 Battery voltage Batteriespannung V uint16be 1 0.1 0 value false false 13020 Battery current Batteriestrom A uint16be 1 0.1 0 value false false 13021 Battery power Batterieent-Ladeleistung W uint16be 1 1 0 value false false 13022 Battery level Batteriekapazität % uint16be 1 0.1 0 value false false 13023 Battery state of health Gesundheit der Batterie % uint16be 1 0.1 0 value false false 13024 Battery Temperature Batterietemperatur °C int16be 1 0.1 0 value false false 13025 Daily battery discharge Energy Tägliche Entladungsenergie der Batterie Kwh uint16be 1 0.1 0 value false false 13026 Total battery discharge Energy Gesamte Entladungsenergie der Batterie Kwh uint32sw 2 0.1 1 value false false 13028 Self-consumption of today Heutiger Anteil des Eigenverbrauches % uint16be 1 0.1 0 value false false 13029 Grid state Netzstatus uint16be 1 0.1 0 value false false 13030 Phase A current Strom Phase L1 aktuell A uint16be 1 0.1 0 value false false 13031 Phase B current Strom Phase L2 aktuell A uint16be 1 0.1 0 value false false 13032 Phase C current Strom Phase L3 aktuell A uint16be 1 0.1 0 value false false 13033 Total active power Aktuell PV-Leistung AC W int32sw 2 1 0 value false false 13035 Daily Import Energy Energie Bezug heute Kwh uint16be 1 0.1 0 value false false 13036 Total Import Energy Energie Bezug gesamt Kwh uint16be 1 0.1 0 value false false 13038 Battery Capacity Batterie-Kapazität Kwh uint16be 1 0.1 0 value false false 13039 Daily Charge Energy Batterie-Ladeenergie heute Kwh uint16be 1 0.1 0 value false false 13040 Total Charge Energy Batterie-Ladeenergie gesamt Kwh uint32sw 2 0.1 0 value false false 13044 Daily export energy Energie Netzeinspeisung heute Kwh uint16be 1 0.1 0 value false false 13045 Total export energy Energie Netzeinspeisung gesamt Kwh uint32sw 2 0.1 0 value false false 13049 Inverter alarm Inverter alarm uint32sw 2 1 0 value false false 13051 Grid-side fault Netzfehler uint32sw 2 1 0 value false false 13053 System fault 1 System Fehler 1 uint32sw 2 1 0 value false false 13055 System fault 2 System Fehler 2 uint32sw 2 1 0 value false false 13057 DC-side fault Fehler DC-Seitig uint32sw 2 1 0 value false false 13059 Permanent fault Permanenter Fehler uint32sw 2 1 0 value false false 13061 BDC-side fault BDC-side fault uint32sw 2 1 0 value false false 13063 BDC-side permanent fault BDC-side permanent fault uint32sw 2 1 0 value false false 13065 Battery fault Batterie Fehler uint32sw 2 1 0 value false false 13067 Battery alarm Battery Alarm uint32sw 2 1 0 value false false 13069 BMS alarm BMS Alarm uint32sw 2 1 0 value false false 13071 BMS protection BMS Sicherung uint32sw 2 1 0 value false false 13073 BMS fault 1 BMS Fehler 1 uint32sw 2 1 0 value false false 13075 BMS fault 2 BMS Fehler 2 uint32sw 2 1 0 value false false 13077 BMS alarm 2 BMS Alarm 2 uint32sw 2 1 0 value false false
Das ist mein Inputregister versuche Erstmal nur ein zwei Werte abzufragen.
Wenn das läuft kannst du die Liste erweitern.
Ich würde mal mit der 13009 Leistung am Übergabepunkt anfangen.