Daten der Solaranlage in Mediola anzeigen I

Haussteuerung mittels mediola

Moderator: Co-Administratoren

Antworten
tmaey
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

Beitrag von tmaey » 01.08.2023, 16:46

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.
Solar_1. Seite.PNG
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.
Monatswerte.PNG
Und natürlich interessiert der „monetäre“ Aspekt, also ein weiterer Tab.
Berechnung.PNG
Last but not least interessiert mich auch ein Blick auf die heutige Situation
Heute.PNG
Ich fürchte, ich werde noch mehr Daten auf Mediola anzeigen wollen. Macht süchtig :D

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...

tmaey
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

Beitrag von tmaey » 01.08.2023, 18:26

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 „

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.
Programm mtl..PNG
Alle Programme zur Datenabfrage der API laufen mit der Zeitsteuerung alle 15 Minuten.
Die Systemvariablen heißen dann für die Produktion:
Sysvar.PNG
Sysvar.PNG (13.55 KiB) 1102 mal betrachtet
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“.
Programm umrechnen.PNG
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);
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.
Programm gesamt.PNG
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);
... wird fortgesetzt

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...

Dennis-HM
Beiträge: 256
Registriert: 19.02.2023, 18:40
System: CCU
Hat sich bedankt: 16 Mal
Danksagung erhalten: 23 Mal

Re: Daten der Solaranlage in Mediola anzeigen I

Beitrag von Dennis-HM » 02.08.2023, 12:25

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. 👍

tmaey
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

Beitrag von tmaey » 02.08.2023, 16:01

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...

tmaey
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

Beitrag von tmaey » 02.08.2023, 16:43

Die Seite „Heute
Auch die Daten frage ich alle 15 Minuten ab.
Programm heute.PNG
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_";
Anschließend rechne ich die Daten noch in KWh um.
Programm Umrechnen heute.PNG
Das Script ist einfach

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);
Ein weiteres Programm errechnet dann die prozentuale Verteilung
Programm Umrechnen heute in %.PNG
Ich brauche die %-Werte „Einspeisung von Produktion“, „Eigenverbrauch von Produktion“, „Eigenverbrauch von Verbrauch“, „Netzbezug von Verbrauch“
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);
Für die grafische Darstellung in Mediola nutze ich den Slider mit dem Status der Systemvariablen "SOLAR_Einspeisung_heute_in_%".

...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...

tmaey
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

Beitrag von tmaey » 02.08.2023, 17:27

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.

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);
Dann interessieren natürlich noch die Werte Eigenverbrauchsquote und Autarkie. Die Programme für die Ermittlung laufen auch alle 15 Minuten.
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);
Autarkie:

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);
So, das war es. Ich hoffe, der ein oder andere kann etwas davon gebrauchen.
Gruß
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Daten der Solaranlage in Mediola anzeigen I

Beitrag von Tyfys » 02.08.2023, 17:39

noch ein Tipp.

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;
können ganz einfach durche diese Zeile ersetzt weden:

Code: Alles auswählen

var DATE =system.Date("%Y-%m-%d");
Gruß
Harry

tmaey
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

Beitrag von tmaey » 02.08.2023, 17:56

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.
Gruß
Thomas
--------------------------------------------------------------------------------------------------
CCU3, 116 Geräte, ioBroker, CCU-Historian, CloudMatic, AIO Neo Creator (Tablet an der Wand)
Anfänger...

JacktheRippchen
Beiträge: 3
Registriert: 20.04.2023, 08:50
System: CCU
Hat sich bedankt: 2 Mal

Re: Daten der Solaranlage in Mediola anzeigen I

Beitrag von JacktheRippchen » 03.09.2023, 12:46

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

Antworten

Zurück zu „mediola“