Falls das noch aktuell ist: Mich plagte das gleiche Problem
Das ISG "vergisst" um 23:59 den Tagesverbrauch. Also habe ich angefangen das in der CCU zu tracken.
Hierzu lese ich die ISG-Seite aus, suche nach Schlüsselwörtern und schreibe die Werte in Script-Variablen.
Meine Ausgabe erfolgt an mich per WhatsApp mit einem Bot-Service, aber du kannst die Script-Variablen dann gerne auhc in Systemvariablen wegspeichern.
Der Code ist ein Beispiel für die Seite Info:Wärmepumpe
Ich suche nach "Muster" im Quelltext. Denke daran, dass wenn du Anführungszeichen im .Find-Suchmuster suchen willst, diese mit \ als solche markieren musst.
Beispiel:
class="span-11" wird zu class="span-11"
Code: Alles auswählen
! Auslesen der Wäremenge und Energierverbrauch aus dem ISG der WP
string url = "http://192.168.xxx.yyy/?s=1,1"; ! IP-Adresse des ISG eintragen
integer i = 0;
integer tmpStart = 0; ! temp Variable in Abfrage Start
integer tmpEnd = 0; ! temp Varieble in Abfrage Ende
integer laenge = 0;
string rTxt = ""; ! URL respose Text
string Prozessdaten;
string Waermemenge;
string Leistungsaufnahme;
string LA_VD_WW_TAG = 0; ! Leistungsaufnahme:Verdichter:Warmwasser:Tag
string LA_VD_HZ_TAG = 0; ! Leistungsaufnahme:Verdichter:Heizung:Tag
string WM_VD_WW_TAG = 0; ! Wärmemenge:Verdichter:Warmwasser:Tag
string WM_VD_HZ_TAG = 0; ! Wärmemenge:Verdichter:Heizung:Tag
string PD_STROM; ! Prozessdaten "Strom"
string PD_SPANNUNG; ! Prozessdaten "Spannung"
string stdOut;
string stdErr;
system.Exec("wget --no-check-certificate --timeout=30 -q -O - '"#url#"'" , &stdOut, &stdErr); ! Abruf der Seite
string rTxt = stdOut; ! Ausgabe des Seitenindex in "Arbeitsvariable" rTxt
! ---- Abschnitt PROZESSDATEN extrahieren ----
tmpStart = rTxt.Find("<div class=\"span-11 append-1\" style=\"float:left\"><table class=\"info\"><tr><th colspan=\"2\" class=\"round-top\">PROZESSDATEN</th>");
tmpEnd = rTxt.Find("</table>");
laenge = tmpEnd - tmpStart;
Prozessdaten = rTxt.Substr(tmpStart, laenge);
laenge = rTxt.Length() - tmpEnd - 14;
rTxt = rTxt.Substr(tmpEnd + 14, laenge); ! - HTML kürzen -
tmpStart = Prozessdaten.Find("STROM INVERTER") + 42; ! Element suchen
PD_STROM = Prozessdaten.Substr(tmpStart, 4).Replace(",", ".").Replace("A", "");
tmpStart = Prozessdaten.Find("SPANNUNG INVERTER") + 45; ! Element suchen
PD_SPANNUNG = Prozessdaten.Substr(tmpStart, 5).Replace(",", ".").Replace("V", "");
WriteLine(PD_STROM # " " # PD_SPANNUNG);
! ---- Abschnitt WÄRMEMENGE extrahieren ----
tmpStart = rTxt.Find("<div class=");
tmpEnd = rTxt.Find("</div>");
laenge = tmpEnd - tmpStart;
Waermemenge = rTxt.Substr(tmpStart, laenge);
laenge = rTxt.Length() - tmpEnd - 6;
rTxt = rTxt.Substr(tmpEnd + 6, laenge); ! - HTML kürzen -
tmpStart = Waermemenge.Find("VD WARMWASSER TAG") + 45; ! Element suchen
WM_VD_WW_TAG = Waermemenge.Substr(tmpStart, 5).Replace(",", ".");
tmpStart = Waermemenge.Find("VD HEIZEN TAG") + 41; ! Element suchen
WM_VD_HZ_TAG = Waermemenge.Substr(tmpStart, 5).Replace(",", ".");
! ---- Abschnitt LEISTUNGSAUFNAHME extrahieren ----
tmpStart = rTxt.Find("<div class=");
tmpEnd = rTxt.Find("</div>");
laenge = tmpEnd - tmpStart;
Leistungsaufnahme = rTxt.Substr(tmpStart, laenge);
laenge = rTxt.Length() - tmpEnd - 6;
rTxt = rTxt.Substr(tmpEnd + 6, laenge); ! - HTML kürzen -
tmpStart = Leistungsaufnahme.Find("VD WARMWASSER TAG") + 45; ! Element suchen
LA_VD_WW_TAG = Leistungsaufnahme.Substr(tmpStart, 5).Replace(",", ".");
tmpStart = Leistungsaufnahme.Find("VD HEIZEN TAG") + 41; ! Element suchen
LA_VD_HZ_TAG = Leistungsaufnahme.Substr(tmpStart, 5).Replace(",", ".");
! ---- COP berechnen ----
var COP_HZ= WM_VD_HZ_TAG.ToFloat() / LA_VD_HZ_TAG.ToFloat(); ! Berechnung des COP:Heizung
var COP_WW= WM_VD_WW_TAG.ToFloat() / LA_VD_WW_TAG.ToFloat(); ! Berechnung des COP:Warmwasser
var U = PD_STROM.ToFloat() * PD_SPANNUNG.ToFloat() / 1000;
WriteLine(U.ToString(2) # " kW");
! ---- Ausgabe -----
WriteLine("WM_VD_WW_TAG: " # WM_VD_WW_TAG # " kWh");
WriteLine("WM_VD_HZ_TAG: " # WM_VD_HZ_TAG # " kWh");
WriteLine("LA_VD_WW_TAG: " # LA_VD_WW_TAG # " kWh");
WriteLine("LA_VD_HZ_TAG: " # LA_VD_HZ_TAG # " kWh");
WriteLine("COP_HZ: " # COP_HZ.ToString(2) );
WriteLine("COP_WW: " # COP_WW.ToString(2) );
! ---- Werte in System-Variablen speichern ----
! ...
Garantiert Optimierungspotential drin, aber für mich funktioniert es