NEWS
Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden
-
Ja blöd. Dachte auch er wäre so aufgebaut wie meiner. Aber du hast die SG Variante vom WR und ich hab die SH.
Hatte ich nicht auf dem Schirm, dass du den anderen hast. Sorry. Dann bleibt dir nur der Winet
SG = Normaler Wechselrichter
SH = Hybrid Wechselrichter -
@ljsven said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Und du bekommst alle Daten?
Ja. Ich füge mal die Liste bei, die ich mit eigenem Programm ziehe. Die hat denselben Inhalt wie die Liste aus ioBroker. Ist halt eher transportabel. Die Holding-Register habe ich im Program abgeklemmt, die interessieren mich nicht - zumindest noch nicht.
Sample_Modbus_Results.xmlWobei dieses Beispiel ein Problem offenlegt, uups. Das Programm fragt immer zusammenhängende Bereiche auf einmal. Die Register 4999 bis 5023 sind fortlaufend. Für die habe ich bei diesem Request keine Daten bekommen (eine Viertelstunde später sind sie da) - wahrscheinlich ist der Timeout doch zu knapp - ich werde ihn auf 10 Sekunden erhöhen. Da geht das (ich frage nur alle 15 MInuten) - bei IOBroker muss man da sicher aufpassen, dass sich die Requests nicht überholen.
Wenn aber ein Request 10 Sekunden dauert, dann passen die Antworten eines Requests nicht mehr wirklich zu den Antworten des zweiten Requests. Wenn man die Total DC Power (5016) mit der Load Power (13007) vergleicht kann das wohl merkwürdige Schlüsse hervorrufen.
Welche Settings hast du?
(Zuletzt geändert: 15.2.2023 um 14:00)
-
Wie gesagt musst du dafür an den Winet gehen und nicht direkt an den WR. Dann auf die Geräte ID 2, falls das bei dir auch die Batterie ist. Die ID findest du im Winet raus unter der Geräteliste.
Mittlerweile habe ich das Auslesen der Eingangsregister wieder abgeschaltet.
Der Winet ist zu instabil habe ich das Gefühl und verkraftet nicht die regelmäßgen Anfragen des Modbus Adapters -
@manny4566 said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Wie gesagt musst du dafür an den Winet gehen und nicht direkt an den WR. Dann auf die Geräte ID 2
Mit dem Gerät selber habe ich mich im Detail noch nicht auseinandergesetzt. Es wurde installiert und das LAN-Kabel vom Elektriker auf den WiNet-Adapter gesteckt und fertig. Der hat auch noch die iSolarCloud-Verbindung gemacht (finde ich im Nachhinenein etwas übergriffig).
Ich weiß, dass er das LAN-Kabel vorher an einer anderen Stelle eingesteckt hatte, da hatte er wohl Probleme. Ich vermute, dass die Anbindung an iSolarCloud von da nicht funktionierte, kann es aber nicht genau sagen.Das wars.
Mit den ModBus-Abfragen bekam ich, so interpretiere ich die Vorkommnisse, aus folgenden beiden Gründen:
-
Der Timeout war zu kurz. Das ist mir bei meinem eigenen Programm aufgefallen. Ich rufe da nicht ein Register nach dem anderen ab sondern alle auf einmal und drösel die Ergebnisse dann hinterher auf. (Das mache ich, weil ich die Registerstände zeitlich nicht zu weit auseinanderlaufen lassen will. Sonst gehen oft die Kalkulationen nicht auf. Wenn zwischen auslesen "Load Power" und "Export Power" eine gewisse Zeit liegt, passt es manchmal nicht zusammen. Ich weiß aber noch nicht, ob es jetzt besser ist, intern wir das wahrscheinlich auch sequentiell abgefragt). Da reicht mir aber eine Sekunde nicht mehr, ich musste auf 3 Sekunden (3000ms) gehen.
Das Problem mit den Timeouts hatte ich auch unter ioBroker verstärkt, als ich den Zugriff noch über WLAN machte. -
Wenn ich ständig Register abfragte die nicht abfragbar sind. So gibt es den Zugriff auf die Statistiken (Register 6xxx) bei meiner SH8 nicht. Vielleicht finden die sich ja an anderer Stelle? Aber, dass es die nicht gibt, habe ich erst nicht gewusst und ich habe mir einen Wolf gesucht.
Die Anlage reagiert meines Erachtens auf Fehler merkwürdig nachtragend. Irgendwie erholt sie sich dann nicht mehr und ich musste sie schon dreimal durchstarten - einmal sogar physisch. Ich könnte mir vorstellen, dass der ModBus-Slave die Connections, die der Master ja durch den Timeout nicht mehr abbauen kann, nicht mehr entfernt. Wenn es dann ein Maximum an unterstützten Connections gibt, dann ist irgendwann Ende und es gibt gar keine Antwort mehr. Und man muss den Slave restarten.
Sehr hilfreich sind die ModBus-Clients, die es als Freeware gibt. Ich habe mich für den "VagaModBus Analyzer" entschieden. Der ist sehr simpel zu bedienen, sehr übersichtlich und zeigt, wenn man mit der Maus auf das Ergebnis klickt, auch den Dezimalwert schön an.
(Zuletzt geändert: 15.2.2023 um 19:50)
-
-
Bei meinen Tests konnte ich auch feststellen, dass die iSloarCloud nur mit dem Winet funktioniert. Lese ich auch so raus, wenn man sich das Handbuch oder andere Infos zum Winet anguckt.
Der Lan port vom WR ist wohl nur eine "dumme" Modbus Schnittstelle.Als Tipp. Wenn du mal wieder ein nicht reagieren hast.
Zieh einfach den Winet raus und steck ihn 2-3 Sekunden später wieder rein, damit er neu startet.
Beim mir reicht das auch aus, wenn der Winet mal wieder Amok läuft. Daher empfinde ich ihn nicht für wirklich stabil, wenn er dauerhaft mit Modbus beschossen wird. Aufgefallen ist mir das verstärkt, wenn der Modbus Adapter Fehler schmeißt. Sowas wie Register außerhalb des Speicherbereichs oder wie die Meldung auch heißt. Also, wenn der Winet mit der Anfrage nichts anfangen kann. Das reißt ihn wohl ab und zu runter, wenn es zuviel wird. -
@manny4566 said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Beim mir reicht das auch aus, wenn der Winet mal wieder Amok läuft.
Danke, für den Hinweis. Mir fehlt im Augenblick die Vorstellung, wie die Registerdaten gebildet werden. Wenn es zwei LAN-Schnittstellen dafür gibt, kann das Sammeln der Daten ja eigentlich nicht im WiNet-Adapter gemacht werden - zumindest stelle ich mir vor, dass es wenig sinnvoll ist, das an zwei verschiedenen Stellen zu machen. Es müsste dann doch einen Service im Wechselrichter geben der nur Anfragen von verschiedenen Stellen bedient.
So stelle ich mir den Ablauf derzeit vor. Das habe ich jetzt "frei erfunden" - also nicht aus irgendeinem Dokument entnommen. Wenn es irgendwo einen hinterlegten Datenflussplan von Sungrow gäbe, wäre ich dankbar.
-
Wie es genau intern programmiert ist weiß ich nicht.
Aber wenn man sich die Geräteliste im Winet ansieht, dann sieht das so bei mir aus:Der Winet selbst stellt quasi die Schnittstelle über Modbus ID 1 und 2 zur Verfügung.
Intern spricht er die Geräte per 1 oder 200 an.Der WR selbst hört ja auch auf die ID 1 auf seinem LAN Port.
Der Winit wird nichts anderes sein, als eine Web-und Cloudschnittstelle für die Otto Normaluser und bietet gleichzeitig eine 2. Modbus Schnittstelle, indem er die Infos durchschleift. Dabei macht er das wohl nicht sauber mit allen Registern. -
@gombersiob said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Ich habe gerade festgestellt, dass Register 5003 "Total Output Energy" und der unter der iSolarCloud angezeigte Wert für den kompletten weit auseinderliegen:
Ich denke, ich habs jetzt gefunden. Das Register 5003 summiert nicht nur den Energieverbrauch sondern auch den exportierten Strom. Wenn ich den berücksichtige gehts auf:
-
Guck dir mal live die Register 13016, 13025, 13044 und 5002 an für täglich. Da kann man live die Veränderung sehen.
Die Gegenstücke dazu sind 13017, 13026, 13045 und 5003 für gesamt.Ich glaube 5002 bzw. 5003 sind die Summe der grünen Energie. Sprich die Summe von PV direkter Eigenverbrauch, Batterie Entladung und Verkauf. Die Zahlen gehen auf oder ?
-
@manny4566 said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Ich glaube 5002 bzw. 5003 sind die Summe der grünen Energie
Der Auffassung bin ich, wie gesagt, jetzt auch. Danke für den Hinweis, aber ich nutze schon alle Register, die die Leistung und verbrauchte Energie beschreiben, nur bei 5002/5003 hatte ich nicht im Blick, dass sie die Export-Daten beinhalten würden.
-
Der Wert 5003 wird mir angezeigt - wie bekomme ich Nachkommastellen?
-
@ljsven
Der Faktor ist 0.1. Wenn der angegeben wäre, würde der Adapter das entsprechend rechnen und in den Datenpunkt einstellen. -
@gombersiob Habe ich auch gedacht - daraus macht er aber 595.7 - richtig wäre aber 5956.6
-
@ljsven
Schau doch mal mit einem ModBus Client, was im Register steht (ich verwende, wie oben beschrieben den VagaModBus Analyzer unter Windows10). Sollte E8AE sein.
Das sieht für mich dann nach ein Adapter-Fehler aus.Kann ich nicht nachstellen, habe meine Anlage gerade mal zwei Monate - da sind die Zahlen noch kleiner.
-
@manny4566 said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Der WR selbst hört ja auch auf die ID 1 auf seinem LAN Port.
Habe das jetzt so angeschlossen. Beide Ethernet-Anschlüsse angeschlossen. Mein Programm fragt über den einen Ethernet-Adapter ab, ioBroker über den WiNet-S-Adapter. Vielleicht vermeidet das ja auch Kollisionen.
In meinem Programm fällt mir auf, dass die Abfrage aller Register insgesamt 8 Sekunden dauert - egal ob WiNet oder der normale Ethernet-Anschluss benutzt wird.
Das heißt aber auch, dass im ioBroker die Daten zeitlich weit auseinanderliegen können und deshalb die Summen, für die augenblicklichen (Leistungs)-Daten, vermutlich meist nicht wirklich aufgehen. -
Hallo,
inzwischen habe ich die Input-Register für meinen SGH10RT richtig gesetzt. Wobei ich diesen per WiNET ansteueere (falls dies einen Unterschied macht). ich habe folgende Werte: Sungrow ModBus InputRegister - SH10RT.tsv
Ein Problem habe ich mit der Batterie-Leistung. Diese wird mir nur ohne Vorzeichen ausgegeben. Ich kann also nicht zwischen Laden und Entladen unterscheiden. Gerade für eine grafische Darstellung wäre dies aber hilfreich.
Hat jemand einen Tipp für mich, wie ich erkennen kann ob die Batterie geladen der entladen wird?
Vielen Dank!
-
-
@d-franz said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:
Hat jemand einen Tipp für mich, wie ich erkennen kann ob die Batterie geladen der entladen wird?
Ich denke, man muss die Felder untersuchen und dann entscheiden. Ich habe mir das, wie ich denke, dass es funktionieren müsste, mal als Blockly zusammengetragen
(Korrigiert: Stand: 22.2.2023 - 19:30)Korrekturen:
- In der Function "isBatteryChargingFromGrid" war der Vergleich von loadPower und exportPower verkehrt.
- In der Function "isBatteryDischarging" fehlte der untere Logikteil "falls IsBatteryCharging == falsch".
Insgesamt habe ich jetzt diese Anzeige:
- Für importierten Strom wird die Zahl rot unterlegt.
- Entladen der Batterie wird, wie hier, mit einem roten "D", laden würde mit einem gelben "C" angezeigt. Ausserdem habe ich mir mit dieser letzten Korrektur noch die Möglichkeit geschaffen anzuzeigen, ob die Batterie aus dem Netz oder von PV geladen wird.
Damit man das Programm nicht eintippen muss, füge ich den XML-Export davon bei. Dann kann jeder, der Verbesserungspotential oder Notwendigkeit von Korrekturen sieht, das anfügen (und hoffentlich hier posten).
Einfach unter Blockly importieren.
BatteryChargingDischarging.xmlGegenüber gestern habe ich die Parameterübergabe korrigiert. Außerdem das Laden aus der PV getestet. Das Skript funktioniert zumindest dafür.
Das Laden der Batterie aus dem Netz konnte ich nicht testen. Und Entladen auch nicht. -
@manny4566
Hier noch mein Code aus Beitrag #337 wie von @manny4566 erwähnt.
Ergebnis ist ein der Datenpunkt 0_userdata.0.PV_Datenpunkte.Berechnung_Batterieentladung_negativ
unter userdata<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="(ocA``hXb:ASln87_[5i">PV Akku Be- oder Entladung</variable> </variables> <block type="on_ext" id="ehBZF8`0,PKLSMKg__PB" x="-2012" y="-487"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="0m^saRA]WjVCQ`9A%2n8"> <field name="oid">modbus.0.inputRegisters.13007_Load_power_</field> </shadow> </value> <statement name="STATEMENT"> <block type="variables_set" id="F`@4}oyq-b-2|/kYbR$U"> <field name="VAR" id="(ocA``hXb:ASln87_[5i">PV Akku Be- oder Entladung</field> <value name="VALUE"> <block type="math_arithmetic" id="1Zv4~dL0,_aGpt}7[_kP"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="d[QgpJU-{V|[)Y8g,,:@"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="5||kb1lHC-qwY!85c3KH"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="lWjzQ^1^A)~nyY4K}k/%"> <field name="NUM">1</field> </shadow> <block type="get_value" id="v|oqCDrxh=7lS_fPh~*["> <field name="ATTR">val</field> <field name="OID">modbus.0.inputRegisters.5016_Total_DC_Power</field> </block> </value> <value name="B"> <shadow type="math_number" id="hMTHE%-|Fip{Z1M$2d7y"> <field name="NUM">1</field> </shadow> <block type="get_value" id="pQL:D)uc#*C|yW94;;1U"> <field name="ATTR">val</field> <field name="OID">modbus.0.inputRegisters.13007_Load_power_</field> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="LWB:(CTORxv:`-#$RF=q"> <field name="NUM">1</field> </shadow> <block type="get_value" id="E}0?u4:S)mn)6}@G9fd]"> <field name="ATTR">val</field> <field name="OID">modbus.0.inputRegisters.13009_Export_power</field> </block> </value> </block> </value> <next> <block type="update" id="(TMX3NmoY?k,I8B2]p?C"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.PV_Datenpunkte.Berechnung_Batterieentladung_negativ</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="p$a.=$hGsH%AenyyxPI!"> <field name="VAR" id="(ocA``hXb:ASln87_[5i">PV Akku Be- oder Entladung</field> </block> </value> </block> </next> </block> </statement> </block> </xml>
Mir freundlichen Grüßen aus Bad Friedrichshall wo ich heute um 0,1 kW an 100%-Autarkie über Nacht vorbeigeschrammt bin ;-). Eine Minute früher Sonne und es hätte gereicht
-
Hallo zusammen,
ich habe mir erlaubt für Skripte ein neues (Folge) Thema aufzumachen.
Findet ihr hier.
https://forum.iobroker.net/topic/63226/sungrow-wr-sgh10rt-modbus-ioskripte
Hoffe das passt für euch und es wird angenommen. Hier gehen evtl. interessante Skripte unter, bei aktuell über 300 Einträgen