auch wenn der Thread schon etwas älter ist .... aber aktuell lese ich die Daten noch via API-Key alle 15 Minuten.
Das Script habe ich etwas angepasst, es geht um etwas andere SolarEdge Werte, aber schaut selbst rein.
Code: Alles auswählen
load tclrega.so
# Daten von SE holen
# ==================
set url "https://monitoringapi.solaredge.com/site/1946056/currentPowerFlow.xml?api_key=<<<DEIN_PERSOENLICHER_API_KEYYY"
exec /usr/bin/wget --no-check-certificate -q -O /usr/local/addons/solaredge/export_powerflow.xml $url
set f [open "/usr/local/addons/solaredge/export_powerflow.xml"]
set input [read $f]
close $f
# Werte aus XML Datei auslesen
# =============================
# --- Variable: SolarEdge-ChargeLevel
# chargeLevel stimmt immer, einfacher positiver Wert von 0% .... 100%
regexp "<chargeLevel>(.*?)</chargeLevel>" $input dummy currentv0 ;
# --- Variable: SolarEdge-PowerGrid -Einspeisung +Bezug
regexp "<GRID><status>.*?</status><currentPower>(.*?)</currentPower>" $input dummy currentv1;
# hier muss die Stromrichtung angepasst werden!!!! minus bei Einspeisung, sonst Bezug
# <connection><from>LOAD</from><to>Grid</to></connection> == Einspeisung
if {[regexp "<connection><from>LOAD</from><to>Grid</to></connection>" $input]} {
set currentv1 -${currentv1}
}
# puts $currentv1
# --- Variable: SolarEdge-PowerPV
# in jedem Fall Stromabgabe, also positiver Wert
regexp "<PV><status>.*?</status><currentPower>(.*?)</currentPower>" $input dummy currentv2;
# --- Variable: SolarEdge-PowerLoad
# in jedem Fall richtig, da immer Verbrauch, positiver Wert
regexp "<LOAD><status>.*?</status><currentPower>(.*?)</currentPower>" $input dummy currentv3;
# --- Variable: SolarEdge-PowerStorage +Ladung -Entladung
regexp "<STORAGE><status>.*?</status><currentPower>(.*?)</currentPower>" $input dummy currentv4;
# hier muss die Stromrichtung angepasst werden!!!, bei Discharging negativer Wert (Batterieentladung)
# <status>Discharging</status> setzt Minus-Zeichen
if {[regexp "<STORAGE><status>Discharging</status>" $input]} {
set currentv4 -${currentv4}
}
# puts $currentv4
# Werte in Variable schreiben
# =============================
set rega_cmd ""
append rega_cmd "var w0 = dom.GetObject('SolarEdge-ChargeLevel');"
append rega_cmd "w0.State('$currentv0');"
append rega_cmd "var w1 = dom.GetObject('SolarEdge-PowerGrid');"
append rega_cmd "w1.State('$currentv1');"
append rega_cmd "var w2 = dom.GetObject('SolarEdge-PowerPV');"
append rega_cmd "w2.State('$currentv2');"
append rega_cmd "var w3 = dom.GetObject('SolarEdge-PowerLoad');"
append rega_cmd "w3.State('$currentv3');"
append rega_cmd "var w4 = dom.GetObject('SolarEdge-PowerStorage');"
append rega_cmd "w4.State('$currentv4');"
# Daten an die CCU2 übergeben
# =============================
rega_script $rega_cmd
Besonderheit sind die zwei Vorzeichen, die zwei Variablen entsprechend dem Stromfluss vorangestellt werden.
Das sind der Strombezug/Stromeinspeisung und die Akkuladung/Akkuentladung.
Klappt bei mir gut. Die Richtung (+/-) ergab sich aus dem Vergleich mit dem Smartmeter Zähler, daher ist Minus Stromeinspeisung, plus Strombezug.
Viel Erfolg damit
ciao
Harvey