Heizungsdaten aus Webseite auslesen via CCU3 ?

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Fonzo
Beiträge: 6722
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 479 Mal

Re: Heizungsdaten aus Webseite auslesen via CCU3 ?

Beitrag von Fonzo » 02.01.2022, 20:07

Xel66 hat geschrieben:
02.01.2022, 19:58
Nicht jede Problem muss man dadurch lösen, indem man einen erheblichen Batzen Geld drauf wirft.
Er besitzt ja offensichtlich eine ISG, sonst könnte er die Werte gar nicht über das Serviceportal einsehen. Wenn man also schon Geld für so etwas ausgibt, dann würde ich das auch dazu nutzen, wozu man es angeschafft hat, wenn man schon Geld extra investiert hat.

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Heizungsdaten aus Webseite auslesen via CCU3 ?

Beitrag von Xel66 » 02.01.2022, 20:36

Fonzo hat geschrieben:
02.01.2022, 20:07
Er besitzt ja offensichtlich eine ISG, sonst könnte er die Werte gar nicht über das Serviceportal einsehen.
Wenn Du das sagst... Kann ich nicht beurteilen.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Exempla
Beiträge: 53
Registriert: 11.07.2020, 15:26
System: in Planung
Hat sich bedankt: 7 Mal

Re: Heizungsdaten aus Webseite auslesen via CCU3 ?

Beitrag von Exempla » 04.01.2022, 14:03

Fonzo hat geschrieben:
02.01.2022, 19:46
Xel66 hat geschrieben:
02.01.2022, 19:27
Exempla hat geschrieben:
01.01.2022, 14:03
Ich möchte die Werte einfach als Diagramm haben und mir aktuelle Außentemperaturen / Vorlauf etc. anschauen, um zukünftig meine Heizung etwas zu optimieren.
Also das. was ich vermutet hatte.
Also für mich persönlich erschließt sich das nicht warum man dazu sich überhaupt die Mühe machen sollte selber etwas zu schreiben bzw. die Werte in eine CCU3 auszulesen. Schließlich ist genau dafür ja das ISG von tecalor da, um solche Werte einzusehen und auch Grafiken anzuzeigen.
Dort kann ich leider keine Historiendaten einsehen. Ich sehe nur tagesaktuell die Werte. Lediglich die Außentemperatur lässt sich in der (begrenzten) Historie darstellen.

Boophus
Beiträge: 3
Registriert: 19.05.2023, 12:19
System: CCU

Re: Heizungsdaten aus Webseite auslesen via CCU3 ?

Beitrag von Boophus » 20.03.2024, 17:36

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:

Code: Alles auswählen

 rTxt.Find("<div class=\"span-11\"");
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 :D

Antworten

Zurück zu „HomeMatic allgemein“