Integration Photovoltaik-Anlage mit SolarEdge

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

csfor0101
Beiträge: 8
Registriert: 02.05.2016, 17:15

Re: Integration Photovoltaik-Anlage mit SolarEdge

Beitrag von csfor0101 » 11.05.2016, 06:19

Guten Morgen,

hat denn niemand eine Idee, warum bei mir die Daten aus der export.xml Datei nicht in die Systemvariablen geschrieben werden?

mfG
csfor0101

alchy
Beiträge: 8394
Registriert: 24.02.2011, 01:34

Re: Integration Photovoltaik-Anlage mit SolarEdge

Beitrag von alchy » 11.05.2016, 20:38

Das Script und die Anleitung funktionieren.
Wenn Du Hilfe erwartest, musst du auch ein bisschen was bringen.
Als erstes mal Minimum:
  • verwendetes Script per C&P in Codetags
  • Bildschirmcopys von den angelegten Variablen
  • xml Datei als Anhang
  • ...
Wenn du dich per SSH mit der CCU verbindest und das Script dort direkt aufrufst,
kommt da eine Meldung?

Alchy

.................... Full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

csfor0101
Beiträge: 8
Registriert: 02.05.2016, 17:15

Re: Integration Photovoltaik-Anlage mit SolarEdge

Beitrag von csfor0101 » 12.05.2016, 07:36

Guten Morgen alchy,

Danke für Deine Antwort.

Das Script funktioniert nicht bzw. nicht so wie im Beispiel!

Ich habe gestern Abend endlich Erfolg erzielt. Ich musste das Script NEU anpassen.
D.h. die Reihenfolge der werte ist zwar egal, aber die korrekte Schreibweise stimmte nicht mit dem Beispielscript und den empfangenen Daten von SolarEdge überein.
Das Script blieb dadurch hängen und wurde nicht bis zum Schluss abgearbeitet.

Im Beispiel ist der Code in der ersten Zeile schon falsch:
# Werte aus XML Datei auslesen
# =============================
regexp "<power>(.*?)</power>" $input dummy currentv0 ;

genau hier blieb das Script schon hängen und stoppte, und die Werte wurden dadurch nicht in die Systemvariablen geschrieben.

Diese Zeile sieht jetzt genauso aus wie in der Export.xml Datei von SolarEdge gesendet:
regexp "<currentPower><power>(.*?)</power></currentPower><measuredBy>INVERTER</measuredBy>" $input dummy currentv5 ;

Damit läuft es nun. Leider ist mir das erst durch Wochenlanges probieren aufgefallen.

Es funktioniert halt nicht wenn nur "power" wie im Beispiel steht und es "currentPower" heißen muss.

Gut Möglich, das SolarEdge zwischenzeitlich auch etwas umgestellt und angepasst hat.

Es ging ja weniger um SolarEdge in meinem Hilferuf, sondern um das Auslesen von Werten aus einer Datei um diese dann in Systemvariablen zu schreiben.

Trotzdem vielen Dank

mfG
csfor0101

Zeitfraktur
Beiträge: 47
Registriert: 23.03.2013, 14:47
Wohnort: Pinneberg
Kontaktdaten:

Re: Integration Photovoltaik-Anlage mit SolarEdge

Beitrag von Zeitfraktur » 12.05.2016, 08:01

Arbeite mich auch gerade ins Scripting und diverse Technologien für meine HomeKrake ein.
Hab keinen SMA, aber hier mal meine Vermutungen:
Im Beispiel ist der Code in der ersten Zeile schon falsch: regexp "<power>(.*?)</power>" $input dummy currentv0 ;
Dann scheint es wohl mehrere <power> Tags zu geben und er hatte keinen eindeutigen?
Schick doch mal eins deiner 'export.xml'
Diese Zeile sieht jetzt genauso aus wie in der Export.xml Datei von SolarEdge gesendet:
regexp "<currentPower><power>(.*?)</power></currentPower><measuredBy>INVERTER</measuredBy>" $input dummy currentv5
anscheinend brauchst du den <currentPower> <power> Wert, und somit sieht es gut aus.
(der Teil danach, also <measuredBy> ... kann vermutlich weg?

Und Tippfehler, oder hast du absichtlich currentv5 statt v0 genommen? Der ist doch für <lifeTimeData> vorgesehen?

Gruss
Sascha

alchy
Beiträge: 8394
Registriert: 24.02.2011, 01:34

Re: Integration Photovoltaik-Anlage mit SolarEdge

Beitrag von alchy » 12.05.2016, 09:03

csfor0101 hat geschrieben: Das Script funktioniert nicht bzw. nicht so wie im Beispiel!
Doch macht es. Zumindest, wenn die XML so aussieht, wie von dir gepostet.
csfor0101 hat geschrieben: Ich habe gestern Abend endlich Erfolg erzielt. Ich musste das Script NEU anpassen.
D.h. die Reihenfolge der werte ist zwar egal, aber die korrekte Schreibweise stimmte nicht mit dem Beispielscript und den empfangenen Daten von SolarEdge überein.
Das Script blieb dadurch hängen und wurde nicht bis zum Schluss abgearbeitet.
Nö, macht es nicht.
csfor0101 hat geschrieben: Im Beispiel ist der Code in der ersten Zeile schon falsch:
# Werte aus XML Datei auslesen
# =============================
regexp "<power>(.*?)</power>" $input dummy currentv0 ;

genau hier blieb das Script schon hängen und stoppte, und die Werte wurden dadurch nicht in die Systemvariablen geschrieben.
Lt. deiner geposteten xml Datei wird durch die Zeile der Wert 2518.0 ausgelesen, bzw. sollte ausgelesen werden. Und später wird dieser Wert in die Systemvariable mit Namen SolarEdge-CurrentPower eingetragen lt. Beispielscript.
csfor0101 hat geschrieben: Diese Zeile sieht jetzt genauso aus wie in der Export.xml Datei von SolarEdge gesendet:
regexp "<currentPower><power>(.*?)</power></currentPower><measuredBy>INVERTER</measuredBy>" $input dummy currentv5 ;
lt. deiner xml ist das unnötig, außerdem zeigt es, das du das Script unnötig geändert hast.
csfor0101 hat geschrieben: Damit läuft es nun. Leider ist mir das erst durch Wochenlanges probieren aufgefallen.
Es funktioniert halt nicht wenn nur "power" wie im Beispiel steht und es "currentPower" heißen muss.
Gut Möglich, das SolarEdge zwischenzeitlich auch etwas umgestellt und angepasst hat.
s.o.
csfor0101 hat geschrieben: Es ging ja weniger um SolarEdge in meinem Hilferuf, sondern um das Auslesen von Werten aus einer Datei um diese dann in Systemvariablen zu schreiben.
Trotzdem
Ich habe diese Solaranlage ebenso wenig, kann das also nur theoretisch nachvollziehen.
Mit Scripten komme ich aber halbwegs klar.
Umso mehr bin ich leider auf die Mithilfe der Fragenden angewiesen.
Wenn jemand Hilfe erwartet dann möge er auch die Infos posten wie ich oben schrieb.
Ansonsten nicht wundern, wenn keine Hilfe kommt.

Alchy

.................... Full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

csfor0101
Beiträge: 8
Registriert: 02.05.2016, 17:15

Re: Integration Photovoltaik-Anlage mit SolarEdge

Beitrag von csfor0101 » 12.05.2016, 15:00

Hallo,

es freut mich sehr, das ihr mir behilflich seit. Für mich ist das alles noch ziemliches Neuland.

Nochmal kurze Erläuterung.

Ich hatte dieses Beispielscript und alle anderen Angaben 1 zu 1 übernommen. Gefühlte 1000 mal nach einem Fehler von mir gesucht, weil ich zwar die Werte von SE in der Export.xml Datei empfange, aber diese nicht in die Systemvariablen geschrieben wurden. Danach habe ich mir den genauen Wortlaut von SE und die Reihenfolge aus der XML Datei mit dem Beispielscript verglichen. Im Beispiel steht an erster Stelle nur " regexp "<power>(.*?)</power>" $input dummy currentv0 ; " und in der Export.xml Datei seht halt : <currentPower><power>3547.0</power></currentPower>
Also habe ich das <currentPower> am Anfang und am Ende der Zeile in das Script zusätzlich eingefügt. Plötzlich wurde der Wert in die Systemvariable eingetragen und die darunter stehenden restlichen Werte ebenfalls. Ich hätte auch eine # vor die power Zeile setzen können, dann wird die Zeile übersprungen und das Script wird abgearbeitet, solang es keine Schreibfehler gibt.

Hier nun mein Beispiel, was zwar Funktioniert ab nicht perfekt ist:

Meine empfangenen Daten der Export.xml Datei:

Code: Alles auswählen

<overview><lastUpdateTime>2016-05-12 14:25:45</lastUpdateTime><lifeTimeData><energy>3252128.0</energy><revenue>455.29794</revenue></lifeTimeData>
<lastYearData><energy>1479199.4</energy></lastYearData><lastMonthData><energy>317374.8</energy></lastMonthData>
<lastDayData><energy>15046.599</energy></lastDayData><currentPower><power>3547.0</power></currentPower><measuredBy>INVERTER</measuredBy></overview>

Das geänderte Script:

Code: Alles auswählen

load tclrega.so

    # Daten von SE holen
    # ==================

    set url "https://monitoringapi.solaredge.com/site/[b][b]XXXXX[/b][/b]/overview.xml?api_key=XXXXXXXXXXXXXXXXXXXXXXXX"
    exec /usr/bin/wget --no-check-certificate -q -O /usr/local/addons/solaredge/export.xml $url

    set f [open "/usr/local/addons/solaredge/export.xml"]
    set input [read $f]
    close $f

    # Werte aus XML Datei auslesen
    # =============================

    regexp "<lastUpdateTime>(.*?)</lastUpdateTime>" $input dummy currentv0  ;
    regexp "<lifeTimeData><energy>(.*?)</energy>" $input dummy currentv1  ;
    regexp "<lastYearData><energy>(.*?)</energy></lastYearData>" $input dummy currentv2  ;
    regexp "<lastMonthData><energy>(.*?)</energy></lastMonthData>" $input dummy currentv3  ;
    regexp "<lastDayData><energy>(.*?)</energy></lastDayData>" $input dummy currentv4  ;
    regexp "<currentPower><power>(.*?)</power></currentPower><measuredBy>INVERTER</measuredBy>" $input dummy currentv5  ;

    # Werte in Variable schreiben
    # =============================

    set rega_cmd ""


    append rega_cmd "var w1 = dom.GetObject('SolarEdge-LastUpdateTime');"
    append rega_cmd "w1.State('$currentv0');"
	
    append rega_cmd "var w5 = dom.GetObject('SolarEdge-Gesamtlaufzeit');"
    append rega_cmd "w5.State('$currentv1');"
	
    append rega_cmd "var w4 = dom.GetObject('SolarEdge-DiesesJahr');"
    append rega_cmd "w4.State('$currentv2');"
	
    append rega_cmd "var w3 = dom.GetObject('SolarEdge-DieserMonat');"
    append rega_cmd "w3.State('$currentv3');"

    append rega_cmd "var w2 = dom.GetObject('SolarEdge-TagHeute');"
    append rega_cmd "w2.State('$currentv4');"

    append rega_cmd "var w0 = dom.GetObject('SolarEdge-LivePower');"
    append rega_cmd "w0.State('$currentv5');"
    

    # Daten an die CCU2 übergeben
    # =============================

    rega_script $rega_cmd
Die Namen der angelegten Systemvariablen habe ich demendstpechend bei mir angepasst.
Ich habe sicherlich noch Fehler im Script, zumal ich den gestrigen Tageswert nicht finde. Der Wert bei lastDayData in der XML Datei ist nicht der Wert von gestern sondern der aktuelle Wert von heute. Entweder verdreht SolarEdge etwas oder ich raffe es nicht. Wichtig war für mich diese Werte in die Systemvariablen zu bekommen, um endlich damit arbeiten zu können, sprich Funktionen zuzuweisen. Nun hat es ja halbwegs doch noch funktioniert.

Vielen lieben Dank an Euch für die Hilfestellungen.

mfG
csfor0101
Zuletzt geändert von alchy am 12.05.2016, 15:11, insgesamt 1-mal geändert.
Grund: Code bitte in Codetags posten - ist nicht schwer - einfach Code markieren und oben den Button Code drücken

alchy
Beiträge: 8394
Registriert: 24.02.2011, 01:34

Re: Integration Photovoltaik-Anlage mit SolarEdge

Beitrag von alchy » 12.05.2016, 15:18

Ist das die gesamte XML Datei? Besser bitte die XML komplett anhängen (siehe auch Tipps und Tricks für Anfänger

Das Script auf der Kommandozeile aufrufen, wenn etwas nicht funktioniert, kann viel Sucherei ersparen.
Erspart auf alle Fälle die Glaskugelputzerei bei: "es geht nicht"
Da es ja nun bei dir funktioniert, brauchst du ja auch keine Hilfe mehr.

viel Spass noch
Alchy

.................... Full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

csfor0101
Beiträge: 8
Registriert: 02.05.2016, 17:15

Re: Integration Photovoltaik-Anlage mit SolarEdge

Beitrag von csfor0101 » 12.05.2016, 15:57

Hallo Alchy,

ja das ist die gesamte XML Datei. Hier nochmals angehängt:

Code: Alles auswählen

[/[code]<overview><lastUpdateTime>2016-05-12 15:49:29</lastUpdateTime><lifeTimeData><energy>3255967.0</energy><revenue>455.8354</revenue></lifeTimeData><lastYearData><energy>1482835.5</energy></lastYearData><lastMonthData><energy>321010.88</energy></lastMonthData><lastDayData><energy>18682.639</energy></lastDayData><currentPower><power>871.0</power></currentPower><measuredBy>INVERTER</measuredBy></overview>
code]

nochmals vielen Dank an euch für die Tipps und die Hilfestellung: "Alchy und Sascha" !

bis bald und freundliche Grüße
csfor0101

alchy
Beiträge: 8394
Registriert: 24.02.2011, 01:34

Re: Integration Photovoltaik-Anlage mit SolarEdge

Beitrag von alchy » 12.05.2016, 16:03

Ich meinte doch nicht noch mal posten sondern anhängen, >> so wie ein Bild<< . :lol:
Daher der Verweis auf die Tipps und Tricks.

Alchy

.................... Full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Zeitfraktur
Beiträge: 47
Registriert: 23.03.2013, 14:47
Wohnort: Pinneberg
Kontaktdaten:

Re: Integration Photovoltaik-Anlage mit SolarEdge

Beitrag von Zeitfraktur » 12.05.2016, 21:53

csfor0101 hat geschrieben:nochmals vielen Dank an euch für die Tipps und die Hilfestellung
Nabend! Hat mir dann doch weiter keine Ruhe gelassen.
Hab es einfach mal versucht nachzuvollziehen, d.h. ich habe die Ordner und Files angelegt
(allerdings den Web-Aufruf weg gelassen und statt dessen statisch deinen xml Text genommen).
Bei mir funktioniert es einwandfrei mit dem Originalscript, d.h. dem regexp auf <power>(.*?)</power>

(Ich war zuerst etwas verwirrt von dem TCL kram, aber hab dann nachgelesen und erfahren, dass deren regexp die Substrings (also die Teilpatterns in Klammern) einzeln rausführt. Daher auch die dummy Variable (darin landet das komplette Pattern, inkl Power, aber im Substring, also in der Variablen v0 der Wert. Cool, denn normalerweise hätte ich es über eine regex assertion a la (?<=<power>)(.*?)(?=</power>) gelöst)

So oder so, es funktioniert hier wie vom Threadersteller im ersten Posting beschrieben.

Sascha

Antworten

Zurück zu „Projektvorstellungen“