NEWS
[Tutorial] SolarEdge -> Modbus -> ioBroker -> Grafana
-
Nö, ich meine nicht die Produktion pro Tag sondern was die Anlage gerade an Leistung hat.
In der App steht kW das soll eigentlich dem Modbus Wert 40083 entsprechen.und das passt bei mir überhaupt nicht.
-
Frage zur Berechnung.
ID 40083 ist doch die aktuelle Leitung der PVA.
ID 40084 ist der Scling FaktorDen Wert lasse ich dann über das Script umrechnen.
function convertValue(value, factor) { if (value === null) return; if (factor === null) factor = 0; setState('PV.Wechselrichter.SE-10KRWS-PVLeistungAktuell', value * Math.pow(10, factor), true); } createState('PV.Wechselrichter.SE-10KRWS-PVLeistungAktuell', { name: 'PV-WR-SE-10KRWS-PVLeistungAktuell', unit: 'W', min: 0, type: 'number', role: 'value.energy' }, function () { on('modbus.0.holdingRegisters.1.40083_I_AC_Power'/*AC-Leistungswert*/, function(obj) { var timeout = setTimeout(function () { clearTimeout(timeout); var factorState = getState('modbus.0.holdingRegisters.1.40084_I_AC_Power_SF'/*AC-Leistung Skalierungsfaktor*/); convertValue(obj.state.val, factorState ? factorState.val : 0); }, 100); }); var factorState = getState('modbus.0.holdingRegisters.1.40084_I_AC_Power_SF'/*AC-Leistung Skalierungsfaktor*/); var valueState = getState('modbus.0.holdingRegisters.1.40083_I_AC_Power'/*AC-Leistungswert*/); convertValue(valueState ? valueState.val : null, factorState ? factorState.val : 0); });Den Datenpunkt aus dem Script, zeichne ich mit dem Sourceanalytics Adapter auf.
Hier die Config:

Somit müsste ich doch am Ende des Tages die am Tag erzeugte Energie haben.
Der Wert passt aber leider überhaupt nicht (viel zu hoch).
Haben ich einen Denkfehler?
@hennerich müsste das so passen, kannst du das bei dir kontrollieren?
-
Frage zur Berechnung.
ID 40083 ist doch die aktuelle Leitung der PVA.
ID 40084 ist der Scling FaktorDen Wert lasse ich dann über das Script umrechnen.
function convertValue(value, factor) { if (value === null) return; if (factor === null) factor = 0; setState('PV.Wechselrichter.SE-10KRWS-PVLeistungAktuell', value * Math.pow(10, factor), true); } createState('PV.Wechselrichter.SE-10KRWS-PVLeistungAktuell', { name: 'PV-WR-SE-10KRWS-PVLeistungAktuell', unit: 'W', min: 0, type: 'number', role: 'value.energy' }, function () { on('modbus.0.holdingRegisters.1.40083_I_AC_Power'/*AC-Leistungswert*/, function(obj) { var timeout = setTimeout(function () { clearTimeout(timeout); var factorState = getState('modbus.0.holdingRegisters.1.40084_I_AC_Power_SF'/*AC-Leistung Skalierungsfaktor*/); convertValue(obj.state.val, factorState ? factorState.val : 0); }, 100); }); var factorState = getState('modbus.0.holdingRegisters.1.40084_I_AC_Power_SF'/*AC-Leistung Skalierungsfaktor*/); var valueState = getState('modbus.0.holdingRegisters.1.40083_I_AC_Power'/*AC-Leistungswert*/); convertValue(valueState ? valueState.val : null, factorState ? factorState.val : 0); });Den Datenpunkt aus dem Script, zeichne ich mit dem Sourceanalytics Adapter auf.
Hier die Config:

Somit müsste ich doch am Ende des Tages die am Tag erzeugte Energie haben.
Der Wert passt aber leider überhaupt nicht (viel zu hoch).
Haben ich einen Denkfehler?
@hennerich müsste das so passen, kannst du das bei dir kontrollieren?
-
Das kann ich bestätigen. Bei mir kommen aus dem Modbus Adapter auch ca. 500 Watt, aber nur bei dem Hybrid-WR. Ich glaube ich habe mal im PV Forum gelesen, dass der Hybrid WR nie "aus" geht wegen der Akku Minimal Ladung.
Aber er dürfte ja bei Produktion nichts anzeigen.Interessant ist auch das die Werte der SE-API nicht zu SE-App und auch nicht zur SE-Webportal Export CSV passen.
Gibt es auch minimale Abweichungen.Verstehe ich nicht was die Hersteller da für Mist machen.
Ich hatte bei SE schon 5 Tickets offen aber es heißt immer das alles passt.
-
Das kann ich bestätigen. Bei mir kommen aus dem Modbus Adapter auch ca. 500 Watt, aber nur bei dem Hybrid-WR. Ich glaube ich habe mal im PV Forum gelesen, dass der Hybrid WR nie "aus" geht wegen der Akku Minimal Ladung.
Aber er dürfte ja bei Produktion nichts anzeigen.Interessant ist auch das die Werte der SE-API nicht zu SE-App und auch nicht zur SE-Webportal Export CSV passen.
Gibt es auch minimale Abweichungen.Verstehe ich nicht was die Hersteller da für Mist machen.
Ich hatte bei SE schon 5 Tickets offen aber es heißt immer das alles passt.
@bitwicht
Ja, hatte ich ja auch schon mal geschrieben. Sehe das auf meinem Grafana ab und zu steigt Production und Verbrauch um 500 W an. Damit stimmt dann natürlich alles nicht mehr. Komischer Weise ist das ja beim Monitoring nicht so.Nutzt SolarEdge da andere Register? -
ich weiß es leider nicht da SE mir keine vernünftige Antwort gibt.
Komisch finde ich schon das die Daten SE-App vs SE-Web-CSV vs SE-API nicht übereinstimmen.
Vielleicht berechnet SE die Daten anhand des Smart-Meter und nicht anhand der Register.
-
@bitwicht Wenn hier sonst keiner antwortet...
Teste mal meine 100.000er, sind für einen BYD-Akku.```_address name description unit type len factor offset formula role room poll wp cw isScale 101697 CommitSettings Commit Power Control Settings uint16be 1 1 0 level true false false false 101701 ReactivePwrConfig ReactivePwrConfig uint32sw 2 1 0 level true false false false 101763 AdvancedPwrControlEn AdvancedPwrControlEn uint32sw 2 1 0 level true false false false 102787 Batt Rated Energy Batt Rated Energy Wh floatsw 2 1 0 level true false false false 102829 Batt1_Avg_T Batterie 1 Average Temperature °C °C floatsw 2 1 0 level true false false false 102837 Speicher_Ladung Speicher Ladeleistung W floatsw 2 1 0 level true false false false 102851 Speicher_SoH Batterie alterung % floatsw 2 1 0 level true false false false 102853 Speicher_SoC Battrieladung % floatsw 2 1 0 level true false false false 102855 Speicher_Betriebszustand 1 Aus 3: Laden 4: Entladen 6: Erhaltungsladen uint32sw 2 1 0 level true false false false 103237 Str Storage control mode uint16be 1 1 0 level true false false false 103238 Storage_AC_Charge_Policy_RW 0 – Disable, 1 – Always allowed , 2 – Fixed Energy Limit – uint16be 1 1 0 level true false false false 103241 Storage_Backup_Reserved_Setting_RW floatsw 2 1 0 level true false false false 103243 StChDisChMode Storage Charge/Discharge Mode uint16be 1 1 0 level true false false false 103244 Timeout Timout sec uint32sw 2 1 0 level true false false false 103247 Remote Control Charge Limit Remote Control Charge Limit W floatsw 2 1 0 level true false false false@lisalisa
Danke. Die gehen gut.
Aber: 102829 ist die "Durchschnittstemperatur" der Batterie. Weißt du, wovon der Durchschnitt genommen wird?, etwa- von mehreren Batteriemodulen (so dass es eine zeitlich punktuelle Temperaturmessung ist). Wenn so: Kann man die Temperaturen der einzelnen Module auslesen?
- über Zeit? Dann: von welchem Zeitraum? Auch hier: Gibt es Register, die den aktuellen Temperaturwert ausgeben (vorhanden sein müsste er dann ja).
Woher hast Du diese Registerangaben?
Kennst Du (oder jemand anders hier) eine Dokumentation, wo auch angegeben ist, was die schreibbaren Steuer-Register konkret bewirken, wo also die Logik der Steuerung angegeben ist?
Dank im Voraus
W -
@lisalisa
Danke. Die gehen gut.
Aber: 102829 ist die "Durchschnittstemperatur" der Batterie. Weißt du, wovon der Durchschnitt genommen wird?, etwa- von mehreren Batteriemodulen (so dass es eine zeitlich punktuelle Temperaturmessung ist). Wenn so: Kann man die Temperaturen der einzelnen Module auslesen?
- über Zeit? Dann: von welchem Zeitraum? Auch hier: Gibt es Register, die den aktuellen Temperaturwert ausgeben (vorhanden sein müsste er dann ja).
Woher hast Du diese Registerangaben?
Kennst Du (oder jemand anders hier) eine Dokumentation, wo auch angegeben ist, was die schreibbaren Steuer-Register konkret bewirken, wo also die Logik der Steuerung angegeben ist?
Dank im Voraus
W@wrod
Bitte schön, habe aber gerade keinen Plan welchen Beitrag du meinst.Irgendwelche Registerangaben und Infos habe ich hier aus dem Forum und aus PDFs.
Google mal nach "SunSpec-Protokoll in SolarEdge Wechselrichtern" oder "Open Protocol for SolarEdge Inverters"In dieser PDF z.B. stehen Register
https://www.photovoltaikforum.com/core/attachment/88445-power-control-open-protocol-for-solaredge-inverters-pdf/von dieser PDF:
......
E16C (F56C) 2 R Battery 1 Average Temperature Float32 °C
E16E (F56E) 2 R Battery 1 Max Temperature Float32 °C
.....Bei mir ist zu beachten meine Adressen sind immer plus 1:
holdingRegisters.102829 Batterie 1 Average Temperature °C
z.B. Adresse 102.829 - 40.000 = dezimal 62.829 = hexadezimal F56D (=Adresse plus 1) -
@wrod
Bitte schön, habe aber gerade keinen Plan welchen Beitrag du meinst.Irgendwelche Registerangaben und Infos habe ich hier aus dem Forum und aus PDFs.
Google mal nach "SunSpec-Protokoll in SolarEdge Wechselrichtern" oder "Open Protocol for SolarEdge Inverters"In dieser PDF z.B. stehen Register
https://www.photovoltaikforum.com/core/attachment/88445-power-control-open-protocol-for-solaredge-inverters-pdf/von dieser PDF:
......
E16C (F56C) 2 R Battery 1 Average Temperature Float32 °C
E16E (F56E) 2 R Battery 1 Max Temperature Float32 °C
.....Bei mir ist zu beachten meine Adressen sind immer plus 1:
holdingRegisters.102829 Batterie 1 Average Temperature °C
z.B. Adresse 102.829 - 40.000 = dezimal 62.829 = hexadezimal F56D (=Adresse plus 1)@lisalisa
Danke. Ich meine diesen hier: https://forum.iobroker.net/post/975915.In dem von Dir verlinkten Dokument und in Deiner letzten Mail sind Adressen in ganz anderem Format. in dem oben genannten Post hattest Du für BYD Register mit 100000er Adressen. Dafür bräuchte ich eine Dokumentation.
-
@lisalisa
Danke. Ich meine diesen hier: https://forum.iobroker.net/post/975915.In dem von Dir verlinkten Dokument und in Deiner letzten Mail sind Adressen in ganz anderem Format. in dem oben genannten Post hattest Du für BYD Register mit 100000er Adressen. Dafür bräuchte ich eine Dokumentation.
@wrod sagte in [Tutorial] SolarEdge -> Modbus -> ioBroker -> Grafana:
In dem von Dir verlinkten Dokument und in Deiner letzten Mail sind Adressen in ganz anderem Format. in dem oben genannten Post hattest Du für BYD Register mit 100000er Adressen. Dafür bräuchte ich eine Dokumentation.
Einfach die 100000er Adressen ausrechnen
z.B. Adresse 102.829 - 40.000 = dezimal 62.829 = hexadezimal F56D (=Adresse plus 1)
-
@wrod sagte in [Tutorial] SolarEdge -> Modbus -> ioBroker -> Grafana:
In dem von Dir verlinkten Dokument und in Deiner letzten Mail sind Adressen in ganz anderem Format. in dem oben genannten Post hattest Du für BYD Register mit 100000er Adressen. Dafür bräuchte ich eine Dokumentation.
Einfach die 100000er Adressen ausrechnen
z.B. Adresse 102.829 - 40.000 = dezimal 62.829 = hexadezimal F56D (=Adresse plus 1)
-
@lisalisa Danke! Das hilft weiter.
Ich kann sie einrichten, aber einige (10072x) geben leider noch keine Werte. Vielleicht doch nicht für genau mein Modell geeignet (obwohl andere (1028xx) funktionieren).@wrod die ersten Adresse in der PDF E16C (F56C) funktioniert übrigens auch, die 2. ist nur gespiegelt
Wenn was nicht funktioniert immer mal Adresse plus oder minus 1 ausprobieren.Mit "Radzio Modbus Master Simulator" kann man auch mal die Register zum Test auslesen (dazu dann aber IOBroker Modbus Zugriff deaktivieren)
https://en.radzio.dxp.pl/modbus-master-simulator/
-
Teil2 – Werte umrechnen und in Grafana anzeigen
Jetzt haben wir also die Werte im ioBroker. Wie gehts nun damit weiter?
Zuerst einmal muss jeder für sich selbst entscheiden, welche Werte für ihn von Interesse sind. Ich für meinen Teil verwende die folgenden Werte:
Wechselrichter- 40084: AC-Leistungswert in W (aktuelle PV Produktion)
- 40093: AC Gesamt-Energieproduktion in Wh (also alles, was eure Anlage bisher erzeugt hat)
- 40103: Kühlkörpertemperatur vom Wechselrichter in °C (man weiß ja nie)
Energiezähler
- 40206: Total Real Power (aktueller Netzbezug bzw. Einspeisung)
- 40226: Total Exported Real Energy (was ihr heute erzeugt habt)
- 40234: Total Imported Real Energy (was ihr heute aus dem Netz bezogen habt)
Aus den letzten beiden Werte kann man den Eigenverbrauch heute berechnen.
Dann müssen wir verstehen, dass SolarEdge für viele Werte noch Skalierungsfaktoren mitliefert. Auch das ist etwas, dass nur in der englischen Doku auftaucht. Dort steht nämlich:
Man muss die Werte die man möchte also erst noch umrechnen. Und sie müssen unmittelbar zusammen ausgelsesen werden, sonst passen sie nicht zusammen. Dazu geht mein Dank an inkoFa aus dem PV Forum, der mir mit seiner Lösung dazu sehr weitergeholfen hat.
Für den Wert 40084: AC-Leistungswert legt ihr folgendes JS Script an:
function convertValue(value, factor) { if (value === null) return; if (factor === null) factor = 0; setState('Solar.Wechselrichter.PVLeistungAktuell', value * Math.pow(10, factor), true); } createState('Solar.Wechselrichter.PVLeistungAktuell', { name: 'PVLeistungAktuell', unit: 'W', min: 0, type: 'number', role: 'value.energy' }, function () { on('modbus.1.holdingRegisters.40083_I_AC_Leistung'/*AC-Leistungswert*/, function(obj) { var timeout = setTimeout(function () { clearTimeout(timeout); var factorState = getState('modbus.1.holdingRegisters.40084_I_AC_Leistung_SF'/*AC-Leistung Skalierungsfaktor*/); convertValue(obj.state.val, factorState ? factorState.val : 0); }, 100); }); var factorState = getState('modbus.1.holdingRegisters.40084_I_AC_Leistung_SF'/*AC-Leistung Skalierungsfaktor*/); var valueState = getState('modbus.1.holdingRegisters.40083_I_AC_Leistung'/*AC-Leistungswert*/); convertValue(valueState ? valueState.val : null, factorState ? factorState.val : 0); });Für den Wert 40206: Total Real Power legt ihr folgendes JS Script an:
function convertValue(value, factor) { if (value === null) return; if (factor === null) factor = 0; setState('Solar.Wechselrichter.ACTotalRealPower', value * Math.pow(10, factor), true); } createState('Solar.Wechselrichter.ACTotalRealPower', { name: 'ACTotalRealPower', unit: 'W', min: -999999, type: 'number', role: 'value.energy' }, function () { on('modbus.1.holdingRegisters.40206_M_AC_Power'/*Total Real Power (sum of active phases)*/, function(obj) { var timeout = setTimeout(function () { clearTimeout(timeout); var factorState = getState('modbus.1.holdingRegisters.40210_M_AC_Power_SF'/*AC Real Power Scale Factor*/); convertValue(obj.state.val, factorState ? factorState.val : 0); }, 100); }); var factorState = getState('modbus.1.holdingRegisters.40210_M_AC_Power_SF'/*AC Real Power Scale Factor*/); var valueState = getState('modbus.1.holdingRegisters.40206_M_AC_Power'/*Total Real Power (sum of active phases)*/); convertValue(valueState ? valueState.val : null, factorState ? factorState.val : 0); });Und für den Wert 40103: Kühlkörpertemperatur legt ihr folgendes JS Script an:
function convertValue(value, factor) { if (value === null) return; if (factor === null) factor = 0; setState('Solar.Wechselrichter.TempWechselrichter', value * Math.pow(10, factor), true); } createState('Solar.Wechselrichter.TempWechselrichter', { name: 'TempWechselrichter', unit: '°C', min: -999999, type: 'number', role: 'value.energy' }, function () { on('modbus.1.holdingRegisters.40103_I_Temp_Kühler'/*Kühlkörpertemperatur*/, function(obj) { var timeout = setTimeout(function () { clearTimeout(timeout); var factorState = getState('modbus.1.holdingRegisters.40106_I_Temp_SF'/*Kühlkörpertemperatur Skalierungsfaktor*/); convertValue(obj.state.val, factorState ? factorState.val : 0); }, 100); }); var factorState = getState('modbus.1.holdingRegisters.40106_I_Temp_SF'/*Kühlkörpertemperatur Skalierungsfaktor*/); var valueState = getState('modbus.1.holdingRegisters.40103_I_Temp_Kühler'/*Kühlkörpertemperatur*/); convertValue(valueState ? valueState.val : null, factorState ? factorState.val : 0); });Jetzt könnt ihr mit den Umrechnungen die entsprechenden Objekte befüllen. Ich hab also ein Blockly Script Hausverbrauch angelegt:

Importiert gerne folgendes:
Und das schreibt ihr z.B. in die InfluxDB, um den Wert im Grafana anzuzeigen:

Ich versuche mal nach und nach noch Sachen hier zu ergänzen. Und eure Meinung dazu interessiert mich natürlich auch brennend. Habt ihr andere Dinge umgesetzt? Leitet ihr Infos aus anderen Werten ab, die ich noch gar nicht auf dem Schirm habe? Wie sehen eure (PV) Dashboards aus, die ihr umgesetzt habt?
@hennerich said in [Tutorial] SolarEdge -> Modbus -> ioBroker -> Grafana:
Man muss die Werte die man möchte also erst noch umrechnen. Und sie müssen unmittelbar zusammen ausgelsesen werden, sonst passen sie nicht zusammen. Dazu geht mein Dank an inkoFa aus dem PV Forum, der mir mit seiner Lösung dazu sehr weitergeholfen hat.
Hallo zusammen
Kann mir hier jemand helfen
Bei mir sind die ScaleFactoren riiiisig. Dh mit value * 10 ^ SF. ist das nicht lösbar
zB
modbus.0.holdingRegisters.40083_I_AC_Leistung ist 64535
modbus.0.holdingRegisters.40084_I_AC_Leistung_SF ist zwischen 0 und ca 8000auch ist mir aufgefallen, dass bei mir eigentlich nur die SF sich ändern...
-
@hennerich said in [Tutorial] SolarEdge -> Modbus -> ioBroker -> Grafana:
Man muss die Werte die man möchte also erst noch umrechnen. Und sie müssen unmittelbar zusammen ausgelsesen werden, sonst passen sie nicht zusammen. Dazu geht mein Dank an inkoFa aus dem PV Forum, der mir mit seiner Lösung dazu sehr weitergeholfen hat.
Hallo zusammen
Kann mir hier jemand helfen
Bei mir sind die ScaleFactoren riiiisig. Dh mit value * 10 ^ SF. ist das nicht lösbar
zB
modbus.0.holdingRegisters.40083_I_AC_Leistung ist 64535
modbus.0.holdingRegisters.40084_I_AC_Leistung_SF ist zwischen 0 und ca 8000auch ist mir aufgefallen, dass bei mir eigentlich nur die SF sich ändern...
@cainam sagte in [Tutorial] SolarEdge -> Modbus -> ioBroker -> Grafana:
modbus.0.holdingRegisters.40083_I_AC_Leistung ist 64535
modbus.0.holdingRegisters.40084_I_AC_Leistung_SF ist zwischen 0 und ca 8000einfach mal Adresse Plus 1 testen (wurde hier auch schon paarmal geschrieben...)
modbus.0.holdingRegisters.40084_I_AC_Leistung
modbus.0.holdingRegisters.40085_I_AC_Leistung_SF -
@cainam sagte in [Tutorial] SolarEdge -> Modbus -> ioBroker -> Grafana:
modbus.0.holdingRegisters.40083_I_AC_Leistung ist 64535
modbus.0.holdingRegisters.40084_I_AC_Leistung_SF ist zwischen 0 und ca 8000einfach mal Adresse Plus 1 testen (wurde hier auch schon paarmal geschrieben...)
modbus.0.holdingRegisters.40084_I_AC_Leistung
modbus.0.holdingRegisters.40085_I_AC_Leistung_SF -
Hallo zusammen
Zuerst einmal herzlichen Dank für euren Effort. Ich habe dank diesem Beitrag zumindest schon etwas zum Laufen gebracht. Leider aber noch nicht ganz das, was ich gerne möchte.

Der 40207 funktioniert bestens. Er zeigt an, wieviel Watt ich aktuell vom Stromanbieter beziehen (wenn es eine negative Zahl ist), oder aber ins Netz speise (wenn es eine positive Zahl ist).
Auch scheint die 40094 einigermassen zu passen und gibt die Gesamtproduktion seit Beginn an. Die Zahl ist zwar nicht ganz stimmig mit der aus dem App, aber so einigermassen passt's.
Ich kann es aber drehen und wenden wie ich will. Was ich nicht schaffe, ist da auch die Watt rauszukriegen, welche ich aktuell für das Haus beziehe oder aber auch die PV-Anlage produziert. Ich habe mit der 40207 nur immer die Summe aus beiden.
Dies ist die Spezifikation meines Wechselrichters und egal welche ich nebst der 40207 mit den gleichen Einstellungen auslese, ich kriege keine sinnvollen Resultate.
https://www.dropbox.com/s/j5ye5cj86kaxhcn/sunspec-implementation-technical-note.pdf?dl=0
Vermutlich suche ich da viel zu weit....herzlichen Dank für eure Hilfe!!!
-
@lisalisa
Danke.
Gibt es irgendwo eine Tabelle für die Register für den Wechselrichter SE8K?
In der Dokue steht etwas von 0xF142 als "AdvancedPwrControlEn". Den bekomme ich nicht hin. Ich habe aber aus Deiner Tabelle "103237_Storage_Control_Mode_RW". Ist das das gleiche oder ist letzterer für die BYD (habe eine LV 3x 3,5 kWh) und ersterer für den WR?Zudem habe ich seit zwei Tagen Probleme mit "102853_Batterieladestand". Der hat einige Tage lang vernünftige Werte ausgegeben. Nun gibt er zuweilen Stundenlang 0 bzw. Minuswerte aus. Hier der Verlauf aus der influx.db-Diagramm-Darstellung:

