da ich selbst relativ viel gesucht habe und mir hier im Forum und auf zig anderen Webseiten diverse Codeschnipsel zusammengesammelt habe, möchte ich das Ergebnis gern zur Verfügung stellen.
Was macht das hier?
Es importiert die Leistungsdaten einer Photovoltaikanlage mit einem SolarEdge Wechselrichter in die Homematic CCU2. Die Daten werden in Systemvariablen geschrieben und können daher auch als Trigger für Aktionen, Programme etc. herangezogen werden (frei nach dem Motto "Wenn genug Strom vom Dach kommt, schalte Verbraucher XY ein"). Mit ein bisschen Programmieraufwand lässt sich dadurch eine Eigenverbrauchserhöhung realisieren.
Was brauche ich dafür?
- Eine CCU2 incl. CUXD und SSH Zugriff (wie man das bekommt und damit umgeht wird als bekannt vorausgesetzt)
- Eine Photovoltaikanlage mit SolarEdge Wechselrichter incl. API-Zugriff
Vorbemerkung:
Euer Solarteur muss den Wechselrichter für das automatische Übertragen der Messwerte an die SolarEdge Rechner freigeschaltet und Euch den API Key sowie Eure SolarEdge Anlagennummer übergeben haben. Wenn Ihr diese Daten nicht habt, wendet Euch dann bitte an Euren Solarteur oder den SolarEdge Support.
Weiterhin ist der Aktualisierungsintervall bei SolarEdge fix auf etwa 15 Minuten festgelegt, was sich ohne Zusatzhardware auch nicht ändern läßt. Entsprechend lasse ich die Daten auch nur im 15-min-Takt einlesen und in die Variablen schreiben. Damit man weiß, wie aktuell die Daten sind, gibt es die Variable "SolarEdge-LastUpdateTime", die man zB in ccu.io oder ioBroker importieren kann, wenn man die Leistung visualisieren möchte.
Zur Umsetzung:
Als erstes erzeugt Ihr auf der CCU2 folgende Systemvariablen:
(Protokollierung etc. kann natürlich jeder machen wie er will, habe es so eingestellt wie es für mich Sinn macht).
Wenn diese Variablen erzeugt sind, geht es mit Putty via SSH auf die CCU2. Legt Euch dort dieses Verzeichnis an:
Code: Alles auswählen
/usr/local/addons/solaredge/
Code: Alles auswählen
touch /usr/local/addons/solaredge/solaredge.tcl
Code: Alles auswählen
echo 12345 > /usr/local/addons/solaredge/solaredge.tcl
Öffnet die Datei mit Notepad++ (NICHT normales Notepad.exe / Editor o.ä. verwenden, der zersägt Euch die Unix-Dateikodierung!) die eben auf Euren Rechner kopierte Datei. Dort findet ihr die Zeichen die ihr eben eingegeben habt. Löscht die und fügt folgendes Script ein:
Code: Alles auswählen
load tclrega.so
# Daten von SE holen
# ==================
set url "https://monitoringapi.solaredge.com/site/HiergehörtDeineAnlagennummerHinein/overview.xml?api_key=HierGehörtDeinAPI-KeyHinein"
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 "<power>(.*?)</power>" $input dummy currentv0 ;
regexp "<lastUpdateTime>(.*?)</lastUpdateTime>" $input dummy currentv1;
regexp "<lastDayData><energy>(.*?)</energy></lastDayData>" $input dummy currentv2 ;
regexp "<lastMonthData><energy>(.*?)</energy></lastMonthData>" $input dummy currentv3 ;
regexp "<lastYearData><energy>(.*?)</energy></lastYearData>" $input dummy currentv4 ;
regexp "<lifeTimeData><energy>(.*?)</energy></lifeTimeData>" $input dummy currentv5 ;
# Werte in Variable schreiben
# =============================
set rega_cmd ""
append rega_cmd "var w0 = dom.GetObject('SolarEdge-CurrentPower');"
append rega_cmd "w0.State('$currentv0');"
append rega_cmd "var w1 = dom.GetObject('SolarEdge-LastUpdateTime');"
append rega_cmd "w1.State('$currentv1');"
append rega_cmd "var w2 = dom.GetObject('SolarEdge-ThisDayData');"
append rega_cmd "w2.State('$currentv2');"
append rega_cmd "var w3 = dom.GetObject('SolarEdge-ThisMonthData');"
append rega_cmd "w3.State('$currentv3');"
append rega_cmd "var w4 = dom.GetObject('SolarEdge-ThisYearData');"
append rega_cmd "w4.State('$currentv4');"
append rega_cmd "var w5 = dom.GetObject('SolarEdge-LifeTimeData');"
append rega_cmd "w5.State('$currentv5');"
# Daten an die CCU2 übergeben
# =============================
rega_script $rega_cmd
Speichert die Datei ab und übertragt sie mittels FileZilla wieder zurück auf die CCU2. Passt die Berechtigungen auf 755 / -rwxr-xr-x an, entweder in FileZilla oder in der Shell:
Code: Alles auswählen
chmod 755 solaredge.tcl
Code: Alles auswählen
touch /usr/local/addons/solaredge/export.xml
Falls nciht schon vorhanden, erstellt Euch ein CUXD Gerät, das ihr für System.Execs benutzen könnt. Eine Fernbedienung zum Beispiel. Sucht Euch dort eine Taste aus, der ihr folgenden Befehl für CMD_SHORT eintragt:
Code: Alles auswählen
tclsh /usr/local/addons/solaredge/solaredge.tcl
Viele Grüße
Christian