Daten der Solaranlage in Mediola anzeigen I
Moderator: Co-Administratoren
-
- Beiträge: 138
- Registriert: 31.08.2022, 16:04
- System: CCU
- Hat sich bedankt: 41 Mal
- Danksagung erhalten: 14 Mal
Daten der Solaranlage in Mediola anzeigen I
Seit kurzem arbeitet eine Solar-Anlage von SolarEdge mit Batteriespeicher bei uns. Es gibt eine recht gute App, in der alle Daten angezeigt werden können.
Dennoch wollte ich auch die Daten der Solar-Anlage in Mediola anzeigen. SolarEdge hat eine gut dokumentierte API. Also hatte zunächst begonnen, die API-Daten mit dem Neo Creator mittels http-Request einzulesen. Das ging auch recht gut, erforderte aber viel Nacharbeit (z.B die Umrechnung Wh in KWh bzw. MWh). Beim Programmieren und Scripten bin ich in der CCU fitter als bei Mediola.
Daher habe ich zunächst hier im Forum gesucht, wie JSON aus einer API in die CCU eingelesen werden können und bin auf das Script von MichaelN gestoßen. Wirklich perfekt. Dankeschön dafür auch an dieser Stelle.Mit diesem Script lässt sich wirklich jeder Datenpunkt auslesen.
Zunächst wollte ich nur eine kurze Übersicht über die aktuelle Produktion und die Verteilung dieser erstellen. Aber gerade, wenn man eine Solar-Anlage neu hat, interessiert einen natürlich mehr. Also doch immer wieder zusätzlich in die App schauen, um mehr zu sehen. So war ich dann schnell dabei, mir auch die monatlichen Werte anzuzeigen. Und natürlich interessiert der „monetäre“ Aspekt, also ein weiterer Tab. Last but not least interessiert mich auch ein Blick auf die heutige Situation Ich fürchte, ich werde noch mehr Daten auf Mediola anzeigen wollen. Macht süchtig
Ich gehe in den nächsten Teilen noch auf die von mir verwendeten Programme und Scripte ein.
Dennoch wollte ich auch die Daten der Solar-Anlage in Mediola anzeigen. SolarEdge hat eine gut dokumentierte API. Also hatte zunächst begonnen, die API-Daten mit dem Neo Creator mittels http-Request einzulesen. Das ging auch recht gut, erforderte aber viel Nacharbeit (z.B die Umrechnung Wh in KWh bzw. MWh). Beim Programmieren und Scripten bin ich in der CCU fitter als bei Mediola.
Daher habe ich zunächst hier im Forum gesucht, wie JSON aus einer API in die CCU eingelesen werden können und bin auf das Script von MichaelN gestoßen. Wirklich perfekt. Dankeschön dafür auch an dieser Stelle.Mit diesem Script lässt sich wirklich jeder Datenpunkt auslesen.
Zunächst wollte ich nur eine kurze Übersicht über die aktuelle Produktion und die Verteilung dieser erstellen. Aber gerade, wenn man eine Solar-Anlage neu hat, interessiert einen natürlich mehr. Also doch immer wieder zusätzlich in die App schauen, um mehr zu sehen. So war ich dann schnell dabei, mir auch die monatlichen Werte anzuzeigen. Und natürlich interessiert der „monetäre“ Aspekt, also ein weiterer Tab. Last but not least interessiert mich auch ein Blick auf die heutige Situation Ich fürchte, ich werde noch mehr Daten auf Mediola anzeigen wollen. Macht süchtig
Ich gehe in den nächsten Teilen noch auf die von mir verwendeten Programme und Scripte ein.
Gruß
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
-
- Beiträge: 138
- Registriert: 31.08.2022, 16:04
- System: CCU
- Hat sich bedankt: 41 Mal
- Danksagung erhalten: 14 Mal
Re: Daten der Solaranlage in Mediola anzeigen II
Programme und Scripte
Kern ist natürlich in erster Linie das geniale Script von MichaelN (viewtopic.php?f=18&t=68762).
Eigentlich braucht man in dem Script nur die URL der API ergänzen, und das Ding läuft.
Bei SolarEdge bietet die API die Möglichkeit, mehrere Daten abzufragen, z.B. „Production, Consumption(Verbrauch), SelfConsumption (Eigenverbrauch), FeedIn (Einspeisung), Purchased (Netzbezug).
Erfolgt aber nun der Abruf mit einem einzigen Script, erhalten alle den gleichen Präfix „JSON_“.
Fragt man also z.B. die monatlichen Werte für das Jahr 2023 mit der URL „“
Produktion und Einspeisung ab, sind die Datenpunkte nach dem Präfix dann sehr ähnlich, also z.B. „JSON_energyDetails_meters_date6“ für Production und „JSON_energyDetails_1_values_value6“ für Feedin.
Das wird in den Systemvariablen schnell unübersichtlich und kaum handlebar. Daher rufe ich – zwar in einem Programm - jeden Punkt mit einem eigenen Script und eigenem Präfix ab. Alle Programme zur Datenabfrage der API laufen mit der Zeitsteuerung alle 15 Minuten.
Die Systemvariablen heißen dann für die Produktion: Wie man sieht, werden die Werte in Wh geliefert. Da ich in der Anzeige aber gerne KWh bzw. MWh haben möchte, muss ich noch umrechnen, was natürlich auch mit Programm und Script erfolgt.
Als Trigger habe ich hier nicht das Zeitmodul gewählt, sondern den ersten Monat, in dem die Solaranlage produziert hat und somit der Wertebereich größer 0.00 ist mit „bei Aktualisierung auslösen“. Umrechnen muss man immer nur den aktuellen Monat. Die vergangenen Monate bleiben ja in der Systemvariablen unverändert.
Das Script war dann – für mich – etwas tricky. Die Systemvariablen der ausgelesenen Daten beginnen mit „0“ am Ende. Also ist der Monat August bei der Systemvariablen „PROD_energyDetails_meters_value7“. Den umgerechneten Wert hätte ich aber gerne in der Systemvariablen „Solar_Produktion_08_in_kwh“. Zusätzlich schreibe ich den Wert in die Systemvariable "Solar_Produktion_aktueller_Monat_in_kwh", die auf der ersten Seite angezeigt wird.
Bei dem Wechsel von Juli auf August hat das schon gut geklappt. Ob es dann auch am 01.10.2023 fuktioniert, werde ich prüfen. (Daher in der Beschreibung „am 01.10. kontrollieren“)
In Mediola kann ich so bei den Monatswerten KWh anzeigen.
Die Zeile „Gesamt“ ermittele ich über ein Programm, welches auch alle 15 Minuten läuft. Das Script ist einfach nur eine Addition der Monatswerte.
Anschließend ermittele ich für mich noch die fiktiven Kosten für den Eigenverbrauch.
... wird fortgesetzt
PS.: bei den Scripten bitte ich um Nachsicht - ich übe noch. Sie funktionieren, aber Verbesserungen sind gerne willkommen
Kern ist natürlich in erster Linie das geniale Script von MichaelN (viewtopic.php?f=18&t=68762).
Eigentlich braucht man in dem Script nur die URL der API ergänzen, und das Ding läuft.
Bei SolarEdge bietet die API die Möglichkeit, mehrere Daten abzufragen, z.B. „Production, Consumption(Verbrauch), SelfConsumption (Eigenverbrauch), FeedIn (Einspeisung), Purchased (Netzbezug).
Erfolgt aber nun der Abruf mit einem einzigen Script, erhalten alle den gleichen Präfix „JSON_“.
Fragt man also z.B. die monatlichen Werte für das Jahr 2023 mit der URL „
Code: Alles auswählen
https://monitoringapi.solaredge.com/site/ID_der_Anlage/energyDetails.json?meters=FEEDIN,PRODUCTIO&timeUnit=MONTH&startTime=2023-01-01%2011:00:00&endTime=2023-12-31%2023:59:00&api_key=hier_key_der_API
Produktion und Einspeisung ab, sind die Datenpunkte nach dem Präfix dann sehr ähnlich, also z.B. „JSON_energyDetails_meters_date6“ für Production und „JSON_energyDetails_1_values_value6“ für Feedin.
Das wird in den Systemvariablen schnell unübersichtlich und kaum handlebar. Daher rufe ich – zwar in einem Programm - jeden Punkt mit einem eigenen Script und eigenem Präfix ab. Alle Programme zur Datenabfrage der API laufen mit der Zeitsteuerung alle 15 Minuten.
Die Systemvariablen heißen dann für die Produktion: Wie man sieht, werden die Werte in Wh geliefert. Da ich in der Anzeige aber gerne KWh bzw. MWh haben möchte, muss ich noch umrechnen, was natürlich auch mit Programm und Script erfolgt.
Als Trigger habe ich hier nicht das Zeitmodul gewählt, sondern den ersten Monat, in dem die Solaranlage produziert hat und somit der Wertebereich größer 0.00 ist mit „bei Aktualisierung auslösen“. Umrechnen muss man immer nur den aktuellen Monat. Die vergangenen Monate bleiben ja in der Systemvariablen unverändert.
Das Script war dann – für mich – etwas tricky. Die Systemvariablen der ausgelesenen Daten beginnen mit „0“ am Ende. Also ist der Monat August bei der Systemvariablen „PROD_energyDetails_meters_value7“. Den umgerechneten Wert hätte ich aber gerne in der Systemvariablen „Solar_Produktion_08_in_kwh“. Zusätzlich schreibe ich den Wert in die Systemvariable "Solar_Produktion_aktueller_Monat_in_kwh", die auf der ersten Seite angezeigt wird.
Code: Alles auswählen
!Produktion
!Aktuellen Monat ermitteln
var a = system.Date("%m").ToInteger();
if (a <10)
{var b = ("0"+a);}
elseif (a >10)
{var b = a;}
elseif (a ==10)
!aktuelle Sysvar für ‚Solar_Produktion_?_in_kwh‘
{var b = a;}
!aktuelle Sysvar ermitteln für ‚PROD_energyDetails_meters_value?‘
var y = a-1;
var c = "PROD_energyDetails_meters_value" # y # "";
var d = dom.GetObject(c).Value();
var e = 1000;
var f= d/e;
var x = "Solar_Produktion_" # b # "_in_kwh";
dom.GetObject(x).State(f);
dom.GetObject("Solar_Produktion_aktueller_Monat_in_kwh").State(f);
In Mediola kann ich so bei den Monatswerten KWh anzeigen.
Die Zeile „Gesamt“ ermittele ich über ein Programm, welches auch alle 15 Minuten läuft. Das Script ist einfach nur eine Addition der Monatswerte.
Anschließend ermittele ich für mich noch die fiktiven Kosten für den Eigenverbrauch.
Code: Alles auswählen
!Eigenverbrauch
var a = dom.GetObject("Solar_Eigenverbrauch_01_in_kwh").Value();
var b = dom.GetObject("Solar_Eigenverbrauch_02_in_kwh").Value();
var c = dom.GetObject("Solar_Eigenverbrauch_03_in_kwh").Value();
var d = dom.GetObject("Solar_Eigenverbrauch_04_in_kwh").Value();
var e = dom.GetObject("Solar_Eigenverbrauch_05_in_kwh").Value();
var f = dom.GetObject("Solar_Eigenverbrauch_06_in_kwh").Value();
var g = dom.GetObject("Solar_Eigenverbrauch_07_in_kwh").Value();
var h = dom.GetObject("Solar_Eigenverbrauch_08_in_kwh").Value();
var i = dom.GetObject("Solar_Eigenverbrauch_09_in_kwh").Value();
var j = dom.GetObject("Solar_Eigenverbrauch_10_in_kwh").Value();
var k = dom.GetObject("Solar_Eigenverbrauch_11_in_kwh").Value();
var l = dom.GetObject("Solar_Eigenverbrauch_12_in_kwh").Value();
var m = a+b+c+d+e+f+g+h+i+j+k+l;
dom.GetObject("Solar_Eigenverbrauch_Gesamt_in_kwh").State(m);
var n = dom.GetObject("Solar_Eigenverbrauch_Gesamt_in_kwh").Value();
var o = n*0.49575;
dom.GetObject("Solar_Eigenverbrauch_Gesamt_in_EUR").State(o);
WriteLine(o);
PS.: bei den Scripten bitte ich um Nachsicht - ich übe noch. Sie funktionieren, aber Verbesserungen sind gerne willkommen
Gruß
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
-
- Beiträge: 261
- Registriert: 19.02.2023, 18:40
- System: CCU
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 23 Mal
Re: Daten der Solaranlage in Mediola anzeigen I
Einen kleinen Tipp habe ich: benenne die Variablen nicht a, b, c , ... gib ihnen Namen, die sprechender sind, wie z. B. aktMonat oder so.
Macht auf Dauer die Programme lesbarer.
Was du dir da im Mediola gebaut hast, sieht gut aus.
Macht auf Dauer die Programme lesbarer.
Was du dir da im Mediola gebaut hast, sieht gut aus.
-
- Beiträge: 138
- Registriert: 31.08.2022, 16:04
- System: CCU
- Hat sich bedankt: 41 Mal
- Danksagung erhalten: 14 Mal
Re: Daten der Solaranlage in Mediola anzeigen I
Danke für den Tip mit den Variaben. Du hast Rech, werde ich künftig beherzigen. Wenn ich Zeit finde, werde ich wohl auch die vorhandenen Scripte einmal umschreiben..
Gruß
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
-
- Beiträge: 138
- Registriert: 31.08.2022, 16:04
- System: CCU
- Hat sich bedankt: 41 Mal
- Danksagung erhalten: 14 Mal
Re: Daten der Solaranlage in Mediola anzeigen III
Die Seite „Heute“
Auch die Daten frage ich alle 15 Minuten ab. In die URL für die Abfrage der heutigen Werte muss das Tagesdatum eingetragen werden. Daher habe ich vor das Script von MichaelN die Ermittlung des heutigen Datums und den Aufbau der URL gesetzt.
Anschließend rechne ich die Daten noch in KWh um.
Das Script ist einfach
Ein weiteres Programm errechnet dann die prozentuale Verteilung
Ich brauche die %-Werte „Einspeisung von Produktion“, „Eigenverbrauch von Produktion“, „Eigenverbrauch von Verbrauch“, „Netzbezug von Verbrauch“
Beispielhaft das Script für „Einspeisung von Produktion“
Für die grafische Darstellung in Mediola nutze ich den Slider mit dem Status der Systemvariablen "SOLAR_Einspeisung_heute_in_%".
...wird fortgesetzt
Auch die Daten frage ich alle 15 Minuten ab. In die URL für die Abfrage der heutigen Werte muss das Tagesdatum eingetragen werden. Daher habe ich vor das Script von MichaelN die Ermittlung des heutigen Datums und den Aufbau der URL gesetzt.
Code: Alles auswählen
!NETZBEZUG_heute
!JSON Netzbezug auslesen
!V1.11 MichaelN https://homematic-forum.de/forum/viewtopic.php?f=18&t=68762
!GPL-3.0-or-later
!URL zusammensetzen
var DATE =system.Date("%Y-%m-%d");
var URL = "https://monitoringapi.solaredge.com/site/ID_der_Anlage/energyDetails.json?meters=PURCHASED&timeUnit=DAY&startTime=" # DATE # "%2011:00:00&endTime=" # DATE # "%2023:59:00&api_key=der_API_key";
string url = URL;
url = "wget --no-check-certificate --timeout=2 -O - '"#url#"'";
string prefix = "NETZBEZUG_heute_";
Code: Alles auswählen
!Produktion
var a = dom.GetObject("PRODUKTION_heute_energyDetails_meters_values_value0").Value();
var b = 1000;
var c= a/b;
dom.GetObject("SOLAR_Produktion_heute_in_kwH").State(c);
Beispielhaft das Script für „Einspeisung von Produktion“
Code: Alles auswählen
!Einspeisung
var a = dom.GetObject("PRODUKTION_heute_energyDetails_meters_values_value0").Value();
var b = dom.GetObject("EINSPEISUNG_heute_energyDetails_meters_values_value0").Value();
var c = (b/a)*100;
dom.GetObject("SOLAR_Einspeisung_heute_in_%").State(c);
...wird fortgesetzt
Zuletzt geändert von tmaey am 02.08.2023, 18:15, insgesamt 1-mal geändert.
Gruß
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
-
- Beiträge: 138
- Registriert: 31.08.2022, 16:04
- System: CCU
- Hat sich bedankt: 41 Mal
- Danksagung erhalten: 14 Mal
Re: Daten der Solaranlage in Mediola anzeigen IV
Die Seite „Berechnung“
Hier nutze ich die Systemvariablen mit den schon ermittelten und umgerechneten Jahreswerten. Den „Preis“ berechne ich in dem Programm „DatenAPI gesamt direkt mit. Damit habe ich bereits alle erforderlichen Daten in der CCU.
Somit brauche ich nur noch die „Gesamtersparnis“ rechnen.
Dann interessieren natürlich noch die Werte Eigenverbrauchsquote und Autarkie. Die Programme für die Ermittlung laufen auch alle 15 Minuten.
Eigenverbrauchsquote:
Autarkie:
So, das war es. Ich hoffe, der ein oder andere kann etwas davon gebrauchen.
Hier nutze ich die Systemvariablen mit den schon ermittelten und umgerechneten Jahreswerten. Den „Preis“ berechne ich in dem Programm „DatenAPI gesamt direkt mit. Damit habe ich bereits alle erforderlichen Daten in der CCU.
Somit brauche ich nur noch die „Gesamtersparnis“ rechnen.
Code: Alles auswählen
!Berechnung Ersparnis
var a = dom.GetObject("Solar_Vergütung_Gesamt_in_EUR").Value();
var b = dom.GetObject("Solar_Eigenverbrauch_Gesamt_in_EUR").Value();
var c = dom.GetObject("Solar_Stromkosten_Gesamt_in_Eur").Value();
var d = a+b-c;
dom.GetObject("Solar_Ersparnis_in_EUR").State(d);
Eigenverbrauchsquote:
Code: Alles auswählen
var prod= dom.GetObject("Solar_Produktion_Gesamt_in_Mwh").Value();
var einsp= dom.GetObject("Solar_Einspeisung_Gesamt_in_mwh").Value();
var a = ((prod-einsp)/prod)*100;
dom.GetObject("Solar_Eigenverbrauchsquote_Gesamt").State(a);
Code: Alles auswählen
var netzbezug = dom.GetObject("Solar_Netzbezug_Gesamt_in_kwh").Value();
var eigen= dom.GetObject("Solar_Eigenverbrauch_Gesamt_in_kwh").Value();
var verbrauch= dom.GetObject("Solar_Verbrauch_Gesamt_in_kwh").Value();
var a = eigen/verbrauch/100;
dom.GetObject("Solar_Autarkie_Gesamt").State(a);
Gruß
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
-
- Beiträge: 567
- Registriert: 17.04.2021, 17:12
- System: CCU
- Hat sich bedankt: 28 Mal
- Danksagung erhalten: 130 Mal
Re: Daten der Solaranlage in Mediola anzeigen I
noch ein Tipp.
diese Zeilen
können ganz einfach durche diese Zeile ersetzt weden:
diese Zeilen
Code: Alles auswählen
var Y = system.Date("%Y").ToInteger();
var M = system.Date("%m").ToInteger();
if (M <10)
{var M1 = ("0"+M);}
elseif (M >10)
{var M1 = M;}
elseif (M ==10)
{var M1 = M;}
var D = system.Date("%d").ToInteger();
WriteLine(D);
if (D <10)
{var D1 = ("0"+D);}
elseif (D >10)
{var D1 = D;}
elseif (D ==10)
{var D1 = D;}
var DATE = Y # "-" # M1 # "-" # D1;
Code: Alles auswählen
var DATE =system.Date("%Y-%m-%d");
Gruß
Harry
Harry
-
- Beiträge: 138
- Registriert: 31.08.2022, 16:04
- System: CCU
- Hat sich bedankt: 41 Mal
- Danksagung erhalten: 14 Mal
Re: Daten der Solaranlage in Mediola anzeigen I
Super, danke.
Da war ich wohl gedanklich zu sehr in der Problemlösung "Aktuellen Monat an Systemvariable hängen" verhaftet.
Habe ich jetzt hier im Tread und in meinem Script geändert.
Da war ich wohl gedanklich zu sehr in der Problemlösung "Aktuellen Monat an Systemvariable hängen" verhaftet.
Habe ich jetzt hier im Tread und in meinem Script geändert.
Gruß
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...
-
- Beiträge: 3
- Registriert: 20.04.2023, 08:50
- System: CCU
- Hat sich bedankt: 2 Mal
Re: Daten der Solaranlage in Mediola anzeigen I
sehr schönes und vorallem interessantes Projekt.
Aktuell versteh ich davon leider gefüllt nur die hälfte, da ich script überhaupt nicht beherrsche.
Mal schauen ob ich es demnächst soweit versteh, das ich es auch übernehmen kann.
Gruß DasRippchen
Aktuell versteh ich davon leider gefüllt nur die hälfte, da ich script überhaupt nicht beherrsche.
Mal schauen ob ich es demnächst soweit versteh, das ich es auch übernehmen kann.
Gruß DasRippchen