NEWS
Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden
-
@atlantis sagte in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Eingangsregister_STAND2021_02_02.txt neuster Stand
Zunächst herzlichen Dank für diese hervorragende Anleitung, die Tipps und alles was hier geliefert wurde!!
Selten so easy nen Adapter integriert.Folgendes musste ich noch anpassen. Einiges haben Daniel und andere schon erwähnt
Vielleicht kann man das nach Verifizierung einiger Mitglieder noch in Post 1 anpassen.1. Geräte ID des Wechselrichters gibt es nicht mehr in meinem Sungrow Account.
Mit der 1 hat´s funktioniert.2. Aktuelle ioBroker und Modbus Adapterversionen - Spalte 1 Geräte ID weg, Spalte Formula dazu.
@Daniel hat die Liste hier gefunden
https://gist.githubusercontent.com/dnoegel/543c72ef722365a3934bbad0bb43e222/raw/17c23638b60035d7ee9201286c95576692a29b8b/sungrow_modbus_register.tsv3. Einige Eingangsregisterwerte scheinen auch hier noch nicht ganz korrekt zu sein.
13002
müsste meines Erachtens auch Faktor 0.1 haben, so wie 13001.
An Tag 1 leicht zu erkennen, der Gesamtertrag liegt sonst um das 10fache zu hoch.13011 - müsste 0.1 sein wie bei 13012
Holdingregister
13055
13056
glaub nicht dass die Werte stimmen. 6553V und 65535 Ah, vermutlich auch Faktor 0.1 notwendig...Gruß
Matthias -
@mraiobroker said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
- Einige Eingangsregisterwerte scheinen auch hier noch nicht ganz korrekt zu sein.
Sie haben recht (mit den Eingangsregistern, Holding-Register nutze ich (noch) nicht, darüber kann ich nichts sagen). So habe ich das bei mir auch eingestellt.
Nur die Adresswerte sollten Sie in Ihrem Post noch anpassen (13002 statt 1302, z.B.)Auch die Adresse für 5003 muss man ändern. Die komplette Energie für den Eigenverbrauch ("Total Power Yields") muss, nach den Werten die ich sehe, mit dem Faktor 0.1 gewichtet werden.
Korrektur am 27.2.2023:
Falls die Register per WiNet-S Anbindung ausgelesen werden
müssen die Faktoren für 5035 (Grid Frequency) und für 13038 (Batteriekapazität) auf 0.01 sitzen ansonsten wie in der Dokumentation beschrieben, auf 0.1. -
Hallo,
erstmal vielen Dank für die Anleitung hier im Forum.
Gestern wurde mein SH10RT Hybridwechselrichter installiert. Leider will die Verbindung zum Iobroker nicht so recht klappen.Er holt sich genau einmal die Daten und auch nur eine Handvoll. Das keine Batteriedaten geliefert sind ist klar, da ich keine habe. Aber der komplette Netzbezug fehlt zum Beispiel.
Der Adapter geht auch immer nur ganz kurz auf grün um im Anschluss wieder auf gelb zu gehen.
Anbei ein Screenshot aus dem Protokoll:
Was mache ich falsch?
Vielen Dank und viele Grüße Henning
-
@gmt94 said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Was mache ich falsch?
Ob da ein grundsätzlicher Fehler vorliegt kann ich nicht sagen. Aber diese Art Abbrüche hatte ich auch schon. Der Modbus Slave scheint recht sensibel zu sein und kommt nach einem "Fehler" von selbst nicht mehr in den Tritt. Welcher Art der Fehler sein kann weiß ich nicht sicher - aber ich hatte den Eindruck, dass er auftrat, wenn ich bei den Timeouts vom Vorschlag abwich.
Geholfen hat am Ende nur das Ausschalten und Wiedereinschalten.
Das geht natürlich physisch sowieso, aber auch theoretisch über die iSolarCloud (hat bei mir irgendwie nie funktioniert, die Funktion ist aber da) und über den Direktzugang WiNet-S. -
So habe die Beiträge alle durchgeackert und verschiedene Konfiguration getestet. Nun läuft es. Habe jetzt auch die passenden IDs für meinen wechselrichter gefunden. Und es werden alle notwendigen Infos übertragen.
Vg Henning
-
Hallo,
ich habe alles nach der Anleitung istalliert und die neue Liste wie @MRaioBroker verwendet. Damit bekomme ich schon werte aus meinem Sungrow WR.
Leider erhallte ich ca. alle 5 sekunden einen Fehler im Protokoll angezeigt. Folgende Fehler werden ausgegeben:
modbus.0 2023-01-25 17:01:31.937 warn Poll error count: 6 code: {"err":"timeout","timeout":5000} modbus.0 2023-01-25 17:01:31.936 error Client in error state. modbus.0 2023-01-25 17:01:31.936 error Request timed out. modbus.0 2023-01-25 17:01:31.935 warn Error: undefined
und
modbus.0 2023-01-25 17:01:07.909 warn Poll error count: 3 code: {"err":"timeout","timeout":5000} modbus.0 2023-01-25 17:01:07.908 error Client in error state. modbus.0 2023-01-25 17:01:07.907 error Request timed out. modbus.0 2023-01-25 17:01:07.905 warn Error: undefined modbus.0 2023-01-25 17:01:01.851 warn Poll error count: 2 code: "App Timeout" modbus.0 2023-01-25 17:00:56.663 warn Error in handler for 4: RangeError [ERR_BUFFER_OUT_OF_BOUNDS]: Attempt to access memory outside buffer bounds modbus.0 2023-01-25 17:00:55.597 warn Poll error count: 1 code: "ReadInputRegisters: Invalid FC 132"
Danach verbindet sich der Adapter jedes Mal neu.
Hat jemand eine Idee wie ich diesen Fehler beheben kann?
Vielen Dank!
-
@d-franz Ich würde behaupten du hast einen Fehler bei den Adressen vom Eingangsregister gemacht..
"warn Poll error count: 1 code: "ReadInputRegisters: Invalid FC 132" überprüf mal ob alle Adressen im gültigen Bereich liegen.
MFG
-
Ich hab bis her noch keine Code für die Aufschlüsselung des Registers 12999 - System_State gefunden.
Daher möchte ich gerne meinen Code zu Verfügung stellen (wie immer gilt das Ein- und Ausgänge & Pfade entsprechend angepasst werden müssen). Bei Verbesserungsvorschlägen immer raus mit der Spracheconst idVar = 'modbus.0.inputRegisters.12999_System_State'; var bez = 'javascript.0.scriptEnabled.Eigene_Skripte.Solar.G01_-_SH10RT.SystemState.SystemState'; var text = "" createState(bez,"", {name: 'SystemState', read: true, write: true, desc: "Automatisch erzeugt",type: "string", role: "state"}); function dec2text(dp) { switch (dp) { case 2: text = "Stop" break; case 8: text = "Standby" break; case 16: text = "Initial Standby" break; case 32: text = "Startup" break; case 64: text = "Running" break; case 256: text = "Fault" break; case 1024: text = "Running in maintain mode" break; case 2048: text = "Running in forced mode" break; case 4096: text = "Running in off-grid mode" break; case 9473: text = "Restarting" break; case 16384: text = "Running in External EMS mode" break; default: text = "Code = " + dp + " not defined!" break; } setState(bez, text, true); } dec2text(getState(idVar).val); //Frage Zustand bei Skriptstart ab on(idVar, function(dp) { // Triggern bei Wertänderung in idVar dec2text(dp.state.val); })
Als Grundlage beziehe ich mich auf die Sungrow "Communication Protocol of Residential Hybrid Inverter"
Ihr werdet parallelen zum Script von @ostseeskipper für den Running_State feststellen, dieses hab ich hierfür umgeschrieben.
-
@gombersiob said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Zum Beispiel zeigt mir die iSolarCloud sogar Entladungen aus der Batterie in Richtung Netz aus.
Ich habe es als Problem an meine Installationsfirma gemeldet, dass:
- Strom exportiert wird, obwohl die Batterie noch nicht voll ist
- Die Batterie Strom exportiert (zumindest nach Aussage von iSolarCloud). Wie ich das mit den ModBus-Daten zeigen kann ist mir nicht klar. Woher weiß die iSolarCloud das also?
- Die Batterie importiert Strom aus dem Netz. Sie füllt sich, obwohl noch kein Strom überhaupt erzeugt wurde.
Gestern kam die Nachricht, dass dieses Verhalten bekannt sei und es inzwischen per Firmware-Upgrade behoben wurde.
Ich habe mir mit Blockly eine Überwachung geschrieben. Die hatte heute schon Alarm egschlagen. Es zeigt sich, dass heute 800 Wh exportiert, aber die Batterie nicht aufgeladen wurde. Der Installateur meint, diese Messtoleranz müsse einkalkuliert werden und solche Einspeisewerte seien unumgänglich. -
Hi, kann mir mal jemand sagen, welche Holdingregister ich beschreiben muss, um die Batterie zu einer bestimmten Zeit aus dem Netz zu laden oder um eine Zwangsladung sofort zu starten und zu beenden?
-
@blacksheep587
Kann ich zwar nicht sagen, es würde mich aber interessieren, warum man das tun wollte. Haben Sie irgendeinen Tarif in dem die Preise wechseln? -
@gombersiob
Meine Idee ist, zu Tibber zu wechseln. Der Tarif ist Börsenabhängig und wechselt stündlich den Preis.
Das bedeutet, ich könnte im Winter, wenn der Ertrag schlecht ist, meinen Speicher Nachts, wenn der Strom vielleicht nur 20Cent kostet, voll machen, und dann tagsüber, wenn der Preis 40Cent beträgt, meinen Speicher leer machen.
Meine Idealvorstellung ist dann, das ganze mit einer Ertragsprognose für den Folgetag noch "smart" zu machen, um bei einem kommenden Sonnentag nicht schon den Speicher voll zu haben.Gleiches funktioniert dann auch mit unserem E-Auto. Unsere Wallbox unterstützt Tibber hier schon ab Werk.
-
Hallo.
Danke @Atlantis für deine super Anleitung.
Ich hätte eine Frage an dich und euch.Besteht die Möglichkeit sich den DTS666 zu sparen und die Info über den aktuellen Stand des Netzes per Holding Register an den WR zu senden?
Ich habe die Information über den aktuellen Bezug/Einspeisung bereits im IObroker drin über das Auslesen des Zählers.
Somit wäre der DTS666 quasi doppelt, da er ja auch nur den aktuellen Stand ausliest.
Die Information, die mir ja bereits vorliegt, muss ich ja somit nur noch an den WR bekommen.
Ich habe es mit dem Holding Register 13085 bereits probiert, aber ohne Erfolg.
Oder seht ihr keine Möglichkeit außer tatsächlich den DTS666 einzubauen und darüber die Kommunikation zum WR aufzubauen?Danke
-
@atlantis said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Wenn man z.B. mit 500 W Laden/ Entladen möchte muss man folgende Holdings beschreiben:
EMS Mode = 2 (Quasi Handsteuerung)
13084 Einmalig mit einem Startwert versehen
EMS Charge/Discharge Comand13050 wie folgt setzen:
170 (Dezimal) = AA (Hexadezimal) <=> Charge/ Laden;
187 (Dezimal) = BB: <=> Discharge / Entladen;
204 (Dezimal) 0xCC <=> Stop (Anhalten/ Default );Ich habe es mal so versucht:
13049 EMS Mode 2
13083 statt 13084 2000W
13050 170 (Dezimal) = AA (Hexadezimal) <=> Charge/ Laden;Es tut sich aber leider nix. Müssen die Werte "bestätigt" sein?
-
@gombersiob sagte in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Nur die Adresswerte sollten Sie in Ihrem Post noch anpassen (13002 statt 1302, z.B.)
Vielen Dank für den Hinweis, korrigiert
-
@gombersiob sagte in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Strom exportiert wird, obwohl die Batterie noch nicht voll ist
Ebenfalls erlebt und an Solarteur gemeldet (Nachdem ich netzunabhängigen Modus mit 25% SOC (state of charge) und Zwangsladung SOC 25% einstellte). Akku ging nicht mehr über 25% und Energie ins Netz.
Firmwareupdate hatte ich vorher schon gemacht (Anleitung im Netz zu finden).
Irgendwann gings dann wieder einfach so...
Mittlerweile SOC Sollwerte wieder auf 0 gesetzt, weil wohl auch im Januar an einem sonnigen Tag der Akku sonst "überläuft". -
@ostseeskipper sagte in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Kurze Frage: Woran macht ihr es fest das der WR die Battarie lädt oder nicht?
In #13021 wird ja leider kein Vorzeichen mitgeliefert woran man erkennt ob geladen oder entladen wird.
Lt Kommunikationsprotokoll versteckt sich der Status "Laden" oder "Entladen" in #130000 Running State. Das ist zwar U16 aber die Interpretation muss auf Bit Ebene im Bit 1 und 2 stattfinden.
Gibts dafür schon ne Lösung nur das Bit 1 und 2 als Status auszulesen ?Wurde das Problem hier schon aufgelöst? Ich kann in EVCC sonst nicht über den IO-Broker arbeiten...
Ggf hat hier jemand schon was über ein Blockly gebastelt?
Wenn ja gerne mal hier auflösen.
#13000 Running State-> gibt es da schon eine Liste was die Angaben da bedeuten? -
Hallo
und erstmal vielen Dank für Eure Arbeit .
Ich bin erst neu hier, habe aber von Euch schon sehr profitiert.
Deshalb möchte ich eine Kleinigkeit zurück geben.
In der Registertabelle steht als Einheit "Kwh" müsste aber korrekterweise "kWh" heißen.
Kann das jemand in der Tabelle ändern?
Vielen Dank....
-
@mr1burns said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
#13000 Running State-> gibt es da schon eine Liste was die Angaben da bedeuten?
In der Sungrow Dkou steht:
-
@stealthangel said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
In der Registertabelle steht als Einheit "Kwh" müsste aber korrekterweise "kWh" heißen.
Kann das jemand in der Tabelle ändern?Das Problem ist mittlerweile festzustellen, in welcher der Tabellen hier im Thread sollte das geändert werden? Ich kenne mindestens 4 Beiträge in denen die Tabelle eingtragen ist.
Für mich habe ich die Unit auch gleich auf "kWh" geändert - und so manches andere. Die Codierung des Vorzeichens ist, wenn ich recht erinnere, nicht überall richtig. Außerdem gefällt mir nicht, dass die Groß und Kleinschreibung bei den Datenpunkten ziemlich zufällig ist. Aber das sind Sachen die jeder für sich im Abgleich mit der Sungrow-Angabe selber herausfinden kann. Wenn ich jetzt was hier rein stelle verbessert das nichts, weil jeder für sich doch klären muss, welche hier nun zu findenden Tabellen denn jetzt die Richtige ist.Wir müssten irgendwo eine Stelle finden, wo wir diese Tabellen tatsächlich pflegen. Vielleicht einen Thread der nicht so lang wird wie dieser hier. Nichtsdestotrotz stelle ich meine Version mal ein.
20230227-Eingangsregister_Stand_V1.1.37.txt
Beachte: In dem zweiten File (Differences.pdf) habe ich die Änderungen zu der ursprünglichen Liste die von Atlantis hier vorgestellt wurde, aufgezählt. Es sind nur die Änderungen zu sehen! Bei Gleichheit ist das entsprechende Feld leer. Unbeachtet sind die 6xxx-Adressen, die ich gar nicht pflege, da diese Adressen in meinem Wechselrichter nicht angeboten werden.
Beachte: Man kann meine Tabelle nicht ohne Weiteres anstelle einer Tabelle, die bisher verwendet wurde, benutzen. Da ich die Namen der Datenpunkte verändert habe, werden sie von Scripten (Blockly, JS oder TS) nicht mehr gefunden. Die Namen müssen also in den Scripten auch angepasst werden.