Hallo,
ja, das geht per homematic Skript. Hier eine Kurzfassung:
CUxD sollte auf der Homematic installiert sein und dort das CUxD Gerät CUX2801001 eingerichtet sein (findet man im www).
Ein Programm anlegen welches über die Zeitsteuerung der homematic regelmäßig (ich lasse es alle 3 Minuten laufen) das nachfolgende Skrip ausführt.
Es gibt noch mehr Daten, die man auslesen kann - ich habe mich auf die mir wichtigen beschränkt.
Welche Daten von der openwb per HTTP Request zurückgegeben werden ist in diesem Forum unter "OpenWB API" zu finden.
Ich habe die Vorzeichen bei den Leistungswerten so eingerichtet, dass sämtliche Leistung, die dem "Haus" zufließen (sei es aus dem PV Generator, dem Hausanschluss oder aus dem Speicher) positiv zählen, alles was aus dem "Haus" abfließt (Hausverbrauch, Ladeleistung in den Speicher und in die Fahrzeuge, Abgabe Leistung über evu) negativ zählen
Viel Erfolg!
Skript:
! Daten von openwb holen - eigene openWB erforderlich
!zuerst folgende Systemvariablen anlegen
!Achtung: keine vergessen und exakte Schreibweise mit Copy & Paste
!OWB_Aktualisierung Zeichenkette Datum date
!OWB_PV_Leistung Zahl Watt pvw
!OWB_Hausanschluss Zahl Watt evuw
!OWB_Sp_Ladung Zahl % speichersoc
!OWB_Sp_Leistung Zahl Watt speicherleistung
!OWB_Lp1_Leistung Zahl Watt lllp1
!OWB_LP2_Leistung Zahl Watt lllp2
!OWB_Lp1_Lademenge Zahl Wh gelkwhlp1
!OWB_Lp2_Lademenge Zahl Wh gelkwhlp2
! openwb api: openwbIP = die IP Deiner openwb
var url ="
http://openwbIP/openWB/web/api.php?get=all";
! Abfrage der openwb mit CUxD und Antwort in string schreiben
dom.GetObject("CUxD.CUX2801001:10.CMD_SETS").State("wget --no-check-certificate -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:10.CMD_QUERY_RET").State(1);
string openwb_xml = dom.GetObject("CUxD.CUX2801001:10.CMD_RETS").State();
! Schlüsselwoerter im String finden und Daten in Systemvariablen schreiben
string word = "date";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 19);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("OWB_Aktualisierung").State(daten);
string word = "pvw";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 10);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = -1.0 * daten.ToFloat();
dom.GetObject("OWB_PV_Leistung").State(zahl);
string word = "evuw";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 10);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("OWB_Hausanschluss").State(zahl);
string word = "speichersoc";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 10);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("OWB_Sp_Ladung").State(zahl);
! Umrechnung des Speichersoc (wird in % geleifert) in kWh (mein Speicher hat 23,4 kWh voll geladen)
real zahl = 0.234 * dom.GetObject("OWB_Sp_Ladung").Value();
dom.GetObject("OWB_Sp_Ladung_kWh").State(zahl);
string word = "speicherleistung";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 10);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = -1.0 * daten.ToFloat();
dom.GetObject("OWB_Sp_Leistung").State(zahl);
string word = "lllp1";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 10);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = -1.0 * daten.ToFloat();
dom.GetObject("OWB_Lp1_Leistung").State(zahl);
string word = "lllp2";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 10);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = -1.0 * daten.ToFloat();
dom.GetObject("OWB_Lp2_Leistung").State(zahl);
string word = "gelkwhlp1";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 10);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("OWB_Lp1_Lademenge").State(zahl);
string word = "gelkwhlp2";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 10);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("OWB_Lp2_Lademenge").State(zahl);
! Hausverbrauch berechnen (wird von openwb im String nicht mit geliefert)
real zahl = -1 * (dom.GetObject("OWB_PV_Leistung").Value()
+ dom.GetObject("OWB_Hausanschluss").Value()
+ dom.GetObject("OWB_Sp_Leistung").Value()
+ dom.GetObject("OWB_Lp1_Leistung").Value()
+ dom.GetObject("OWB_Lp2_Leistung").Value());
dom.GetObject("OWB_Hausverbrauch").State(zahl);