NEWS
Sungrow WR SGH10RT MODBUS ioSkripte
-
@gombersiob
Zum Darstellen der Erträge mache ich mir Auswertungen "pro Tag", "pro Monat" und "pro Jahr". Hier will ich mal die Auswertung "pro Tag" darstellen, die anderen kann man ja davon ableiten
Idee: Über VIS will ich sehen, wie sich der tägliche Verbrauch gestaltet. Ich stelle dabei den heutigen Tag, dem gestrigen "gegenüber". "Gegenüber" in Anführungszeichen, weil ich sie untereinander darstelle. Denn ich will dasselbe Bild auf Computer, IPad und Handy darstellen. Nebeneinander müsste ich auf dem Handy hin und her scrollen.
So sieht derzeit das Gesamtbild aus:
Die Datenpunkte sehen so aus:
Es sind Datenpunkte dabei, die ich anderswo oder auch nicht mehr verwende. Da muss ich mal aufräumen!Setup der Datenpunkte mache ich wieder mit einem TypeScript-Programm. Das ist recht nützlich. Ich habe schon ein paarmal alles platt gemacht und neu angefangen. Jeden Datenpunkt einzeln zu definieren ist nervig.
Dann habe ich noch ein Blockly für den Tageswechsel (läuft täglich, wie man sehen kann, um 23:59 Uhr):
Hier das XML-Unload des Blockly: DaySwitch.blockly
Und natürlich ein Script, dass unter Tage die Sicht auf den laufenden Tag aktuell hält. Auch das ist wieder ein TypeScript. Ich finde dafür Blockly doch zu unhandlich.
Dieses Script ruft eine Function auf ("ioGlbl_roundToDecimals") mit der die errechnete Zahl auf die gewünschte Anzahl Nachkommastellen gerundet wird. Ich habe die bei mir als "Globale Funktion" definiert (d.h. in den Ordner "global"). Man kann Sie aber auch einfach direkt an das EarningsPerDay-Script oben anhängen.
Die Kalkulationen habe ich jetzt auch in eine "Function" ausgelagert. Damit kann ich sie bei den EarningsPerMonth und EarningsPerYear einfach wiederverwenden - getreu dem Motto DRY (Don't repeat yourself).
Bei mir läuft das Script minütlich. Das muss eigentlich nicht sein. Alle halbe Stunde würde auch reichen. Aber derzeit ist mein RaspBerry noch ganz entspannt - ich habe da keinen Druck.
-
An anderer Stelle habe ich es schon erwähnt. Ich lese die ModBus-Daten (ohne IOBroker!) mit einem eigenen Java-Programm regelmäßig (alle 15 Minuten) und schreibe sie als XML-File weg. Dazu habe ich mir auf meinem RaspBerry eine JAVA-Runtime installiert und lasse es via crontab, wie gesagt viertelstündlich, laufen.
Wenn Interesse an sowas besteht würde ich das Programm anpassen, damit es über Parameter personalisierbar wird. Derzeit mache ich alle Einstellungen direkt im Code.
Ich füge hier mal die XML von heute ein, damit man sich ein Bild darüber machen kann.
Der lese ich nur die Input-Register aus. Die Vorbereitung für die Holding-Register ist da, aber da sie mich nicht interessieren sammele ich sie auch (noch) nicht. -
Ich bin noch Anfänger und versuche gerade meine vielen Daten sinnvoll zu nutzen.
Die Running States des SH10RT lese ich erfolgreich aus und einzelne Verbraucher (Heizstab Warmwasser, Kliaanlage zum heizen und kühlen, Wärmepumpe Pool, Fahrzeug Laden) schalten geht auch, wenn meist händisch. Das irgendwie zu automatisieren wäre mein Ziel.Hat hier Jemand die Daten ähnlich der ISolarCloud abgebildet und kann mir helfen das nachzubauen.
-
das ist ne recht offene Frage. Wenn Du auf der Suche nach Skripts zur Automatisierung bist kann Dir hier evtl. geholfen werden.
Zur Automatisierung: Ich selbst nutze ein paar Skripts z.B. um meine Wärmepumpe in den Smart Grid Modus zu schalten,
teilen bringt aber nicht viel, weil recht spezifisch. Ich schalte z.B. einen Datenpunkt wenn ich Überschuss hab und mit dem schalte ich
dann andere Dinge wie z.B. einen Shelly der meine Brauchwasser-Wärmepumpe aktiviert...
(aber das auch. nur wenn ich am Vortag Strom zugekauft hab, wenn der Speicher noch voll ist bringts nicht ne Wärmepumpe mit PV Strom direkt zu steuern)Wichtiger als die Schaltung selbst ist die Intelligenz dahinter, damit man PV Strom auch wirklich sinnvoll nutzt.
Bei Balkonkraftwerk recht einfach, da musst Du nur den Strom sinnvoll investieren
Bei PV Anlage mit Speicher schon schwieriger, da musst Du verhindern, dass Du einspeist und nachkaufst.Vielleicht hilft das
App:
Die Daten der App nachzustellen wäre evtl. ein anderes Thema hier im Forum z.B. https://forum.iobroker.net/post/972129
Die App ist extrem umfangreich.Ich habe nur Teile die mich interessieren nachgebildet, die Visualisierung der App in IoBroker VIS mit dem Energieflussadapter andere Dinge in einer VIS
die mich interessieren z.B. so
-
@mraiobroker Danke, ich stehe noch sehr am Anfang und habe nun erstmal alle Systeme eingebunden so dass sie Daten liefern.
Den Energieflussadapter habe ich auch installiert, er läuft aber noch nicht mit den richtigen Daten und meine bisherigen Versuche zur Visualisierung und Steuerung sind noch sehr "rudimentär"!
Welche Datenpunkte setzt Du im Energieflussadapter ein? -
@kklaus
Du musst berechnen, ob die Batterie be oder entladen wird, dass kann Modbus so nichtDatenpunkt berechnen Skript
<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>
-
@mraiobroker Danke, ich glaube so funktioniert es jetzt schonmal.
Ich dachte das müsste ich über die "Running States" berechnen.
Wie hast Du die Dachseiten in die Anzeige miteingebunden?
-
@kklaus für´s Dach hab ich mit nem HTML Widget gemacht.
Zwei Bildchen eingefügt und jeweils die Dachseiten berechnet.Das stimmt nicht zu 100% mit der Summe des Energieflussadapters überein, aber gut genug
HTML Code
Süd {Voltsuedmppt1:modbus.0.inputRegisters.5010_MPPT_1_Voltage;Amperesuedmppt1:modbus.0.inputRegisters.5011_MPPT_1_Current;(Voltsuedmppt1*Amperesuedmppt1).toFixed(0)} WattNord {Voltnordmppt2:modbus.0.inputRegisters.5012_MPPT_2_Voltage;Amperenordmppt2:modbus.0.inputRegisters.5013_MPPT_2_Current;(Voltnordmppt2*Amperenordmppt2).toFixed(0)} Watt
-
@mraiobroker said in Sungrow WR SGH10RT MODBUS ioSkripte:
Süd {Voltsuedmppt1:modbus.0.inputRegisters.5010_MPPT_1_Voltage;Amperesuedmppt1:modbus.0.inputRegisters.5011_MPPT_1_Current;(Voltsuedmppt1*Amperesuedmppt1).toFixed(0)} Watt
Danke,
@edit
Hat geklappt,, die Werte habe ich schon mal. War doch einfacher als ich dachte. -
@kklaus das ist eine Variable innerhalb des HTML Widgets, damit man die beiden Datenpunkt multiplizieren kann.
Einfach in eine View in ein HTML Widget einfügen und gut ist -
@mraiobroker sagte in Sungrow WR SGH10RT MODBUS ioSkripte:
sehr cool, danke für den Beitrag.
Mein Solarteur hat mir einen 10kW WR und eine 16er Anlage verbaut, erst heute weiß ich was das bedeutet und wie das Verhältnis sein sollte...
Hab dann ECharts genutzt und es grafisch gelöst. Werde wohl den halben Sommer über den 10kW des WR liegen
Mir war es eh wichtiger im Winter viel Strom zu haben, daher das ganze Dach voll gemacht, im Sommer nicht alles nutzen zu können.... ist dann halt so - gibt ja eh kaum Geld dafür.
Trotzdem wichtig das zu überwachen, finde ich.
Hier könntest du ein Programm schreiben, was anhand der Wetterdaten ermittelt, ob du heute die 10000W vermutlich knacken wirst.
Den Akku dann mit dem Überschuss über 10000W laden. Denn das geht, der WR kann zwar "nur" 10000W, aber er kann den Rest direkt an den Akku abgeben, weil dieser Gleichstrom bekommt!
So könntest du das Ganze zumindest noch ein wenig optimieren! -
Hier könntest du ein Programm schreiben
Das Programm gibt es schon - bzw. den entsprechenden Adapter.
Derzeit wird er zum Zeichnen eines Graphen verwendet, die Zahlen lassen sich aber bestimmt auch auswerten. -
@gombersiob
Den Adapter kenne ich. Liegt bei mir leider immer daneben.Ich wollte aber nicht den Adapter programmieren sondern man muss dann ein Programm schreiben was dafür sorgt, das alles was über 10k Erzeugung liegt in den Akku geht.
Was insofern schwierig ist da man nicht weiss was vom Dach kommen könnte, da der WR ja begrenzt..
Evtl kann man es aber anhand von MPP Spannung × MPP Strom errechnen. Ich weiss nicht ob dort die echt anliegenden Werte stehen. Kann ich auch kickt testen da mein WR nicht unterdimensioniert ist -
Hallo Zusammen,
bin seit kurzem glücklicher Besitzer einer PV Anlage (12.7 kWp) mit zwei Sungrow WR (SH8 und SG5) und einem SBR128
Gibt es die Möglichkeit, den SBR script-/ und zeitgesteuert mit einer Zwangsladung zu befüllen?
Hintergedanken der Frage ist die Kombination mit einem dynamischen Stromtarif (aWattar, Tibber,...) und der Möglichkeit, speziell in der dunklen Jahreszeit den Strombezug/Strompreis zu optimieren.
Hat hier jemand eine Idee oder einen Ansatz dafür?
VG
Alex -
@xpectives hi. Ich habe einen sungrow sh8.0rt mit sbr096. Damit ist es über die Holding register möglich eine Zwangsladung zu starten. Man kann sogar die Ladeleistung einstellen.
Holding 13050 und zwei weitere muss man dafür ändern.
Habe die Daten gerade nicht im Kopf. Aber es ist möglich!
Wie genau steht auch hier im forum. Kann leider gerade nicht nachgucken da ich unterwegs bin...
-
@carsten-sauermann
Danke für dein Feedback
Gut zu hören, dass es eine Möglichkeit gibtZugegeben... ist für mich noch alles ein wenig Neuland... aber man wächst mit den Herausforderungen
Bisher habe ich als Registerbeschreibung nur folgende Infos gefunden
https://gist.github.com/dnoegel/543c72ef722365a3934bbad0bb43e222Allerdings fehlt hier die 13050
Edit/Gefunden
Communication.Protocol.of.Residential.Hybrid.InverterV1.0.22_20201117.pdfHast Du noch eine andere Quelle?
Grüße
Alex -
@xpectives in der pdf stehen auch die Holding register mit drin. Ich kann die meine Liste als Import für iobroker geben.
_address name description unit type len factor offset formula role room poll wp cw isScale 4999 System Clock Year Systemzeit Jahr uint16be 1 1 0 value true false false false 5000 System Clock Month Systemzeit Monat uint16be 1 1 0 value true false false false 5001 System Clock Day Systemzeit Tag uint16be 1 1 0 value true false false false 5002 System Clock Hour Systemzeit Stunde uint16be 1 1 0 value true false false false 5003 System Clock Minute Systemzeit Minute uint16be 1 1 0 value true false false false 12999 Start/Stop Start/Stop Start(CF) Stop (CF) uint16be 1 1 0 value true false false false 13001 Load Adjustment mode Energie Management Modus ON/OFF(1) / Energieoptimiert(2) uint16be 1 1 0 value true false false false 13002 Load 1 timing period 1: Start hour h uint16be 1 1 0 value true false false false 13003 Load 1 timing period 1: Start minute min uint16be 1 1 0 value true false false false 13004 Load 1 timing period 1: End hour min uint16be 1 1 0 value true false false false 13005 Load 1 timing period 1: End minute h uint16be 1 1 0 value true false false false 13006 Load 1 timing period 2: Start hour h uint16be 1 1 0 value true false false false 13007 Load 1 timing period 2: Start minute min uint16be 1 1 0 value true false false false 13008 Load 1 timing period 2: End hour h uint16be 1 1 0 value true false false false 13009 Load 1 timing period 2: End minute min uint16be 1 1 0 value true false false false 13010 Load 1 ON/OFF mode Load 1 ON/OFF mode ON(170/AA)/ OFF (85/55) uint16be 1 1 0 value true false false false 13011 Load 1 power optimized mode: Start hour h uint16be 1 1 0 value true false false false 13012 Load 1 power optimized mode: Start minute min uint16be 1 1 0 value true false false false 13013 Load 1 power optimized mode: End hour h uint16be 1 1 0 value true false false false 13014 Load 1 power optimized mode: End Minute min uint16be 1 1 0 value true false false false 13015 Optimized power of load 1 Optimized power of load 1 W uint16be 1 1 0 value true false false false 13049 EMS mode selection EMS Modus uint16be 1 1 0 value true false false false 13050 Charge/discharge command Ext. Sollvorgabe Laden170(AA)/ Stop187(BB)/ Entladen204(CC) uint16be 1 1 0 value true false false false 13051 Charge/discharge power Ext. Sollvorgabe Lade/Entladeleistung uint16be 1 1 0 value true false false false 13057 Max. SOC Max SOC % uint16be 1 0.1 0 value true false false false 13058 Min. SOC Min SOC % uint16be 1 0.1 0 value true false false false 13065 Max. discharge current Max. Entlade Strom A int16be 1 0.001 0 value true false false false 13066 Max. charge current Max. Lade Strom A int16be 1 0.001 0 value true false false false 13074 Export Power Backup Backup-Ausgang AN(170/AA) AUS(85/55h) uint16be 1 1 0 value true false false false 13079 External EMS heartbeat uint16be 1 1 0 value true false false false 13083 Start Charging Power u.U. Leistung, mit welcher ein Ladevorgang begonnen wird. Klärung erwünscht W uint16be 1 1 0 value true false false false 13084 Start Discharging Power u.U. Leistung, mit welcher ein Entladevorgang begonnen wird. Klärung erwünscht W uint16be 1 1 0 value true false false false 13085 Meter Comm. Kommunikation mit Energie Meter des WR uint16be 1 1 0 value true false false false 13086 Export Power Limitation Einspeise Limitierung AN(170/AA) AUS(85/55h) uint16be 1 1 0 value true false false false 13099 SOC Reserve SOC Reserve % uint16be 1 1 0 value true false false false
-
@carsten-sauermann
Danke Dir
Jetzt heisst es erstmal studieren -
Hallo, ich habe gesehen, dass du (genauso wie ich) zwei Dächer seperat mit PV bestückt hast. Ich addiere einfach die Werte 5016 der beiden Wechselrichter und habe dann den aktuellen Gesamtertrag.
Allerdings finde ich nicht heraus, wie ich den aktuellen Verbrauch auslesen kann. Der unter 13033 ausgelesene Werte ist konstant ca. 200W geringer als die (verzögerte) anzeige in der App.
Hast du oder alle anderen einen Tipp für mich, wie an den korrekten Wert komme?
Liebe Grüße und Danke für eure Hilfe
Ralph
-
Hi Ralf,
Ich arbeite nur mit 13007 als Verbrauch des Hauses und separat mit der Ladeleistung der Batterie.
Mein Tipp ist es, die App einfach nicht zu benutzen. wenn doch dann nicht miteinander vergleichen. Die Modus Daten sind wesentlich genauer.
Ich habe auch aufgegeben Werte die in Modbus bereits summiert werden (Gesamtverbräuche) durch die Aufaddierung der Einzelwerte nachzuvollziehen, weil das hat nie gestimmt. Es ist alles nicht 100-prozent genau.