ETA Heizung auslesen

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

cRemE-fReSh
Beiträge: 40
Registriert: 30.12.2012, 12:43
Danksagung erhalten: 7 Mal

Re: ETA Heizung auslesen

Beitrag von cRemE-fReSh » 07.01.2023, 19:19

MichaelN hat geschrieben:
07.01.2023, 16:25
Xythras hat geschrieben:
06.01.2023, 19:37
Kann mir vielleicht jemand ein Beispiel programmieren mit z.B. Vorlauftemperatur?
Ich sehe dort keine VL-temp in den Daten. Du?
Das ist dort auch nicht zu finden. Das scheint die Ausgabe der Abfrage /user/menu zu sein.
Die Vorlauftemperatur ist aber unter /user/var (im Detail unter /user/var/120/10101/0/0/12241) zu finden.

Abfrage von Hand: http://<IP-Adresse>:8080/user/var/120/10101/0/0/12241

Viele Grüße

Xythras
Beiträge: 28
Registriert: 05.01.2023, 19:27
System: CCU

Re: ETA Heizung auslesen

Beitrag von Xythras » 08.01.2023, 11:43

Ich habe Software 1.35.15



MichaelN hat geschrieben:
07.01.2023, 16:25
Xythras hat geschrieben:
06.01.2023, 19:37
Kann mir vielleicht jemand ein Beispiel programmieren mit z.B. Vorlauftemperatur?
Ich sehe dort keine VL-temp in den Daten. Du?

MichaelN
Beiträge: 9677
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 698 Mal
Danksagung erhalten: 1625 Mal

Re: ETA Heizung auslesen

Beitrag von MichaelN » 08.01.2023, 12:38

Das wird schwierig.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Xythras
Beiträge: 28
Registriert: 05.01.2023, 19:27
System: CCU

Re: ETA Heizung auslesen

Beitrag von Xythras » 08.01.2023, 15:43

Warum?

MichaelN hat geschrieben:
08.01.2023, 12:38
Das wird schwierig.

MichaelN
Beiträge: 9677
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 698 Mal
Danksagung erhalten: 1625 Mal

Re: ETA Heizung auslesen

Beitrag von MichaelN » 08.01.2023, 15:54

Weil antworten und fragen nicht zueinander passen.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Xythras
Beiträge: 28
Registriert: 05.01.2023, 19:27
System: CCU

Re: ETA Heizung auslesen

Beitrag von Xythras » 08.01.2023, 21:39

Ich habe die Liste auch nur gepostet, dass man sieht was für Parameter meine PU11 ausgibt. Bei mir fängt ja schon mal alles mit 112 an.

Dann wurde ich nach der Software Version gefragt. Die habe ich gepostet.

Weisst du überhaupt wie es geht, bzw. Benutzt du Homematic mit ETA?

Von dem was du so schreibst, bin ich nur nicht so sicher.

Und um deine Frage zu beantworten der Paramrter ist doch der, oder?

<object uri="/112/10101/0/0/12241" name="Vorlauf"/>

MichaelN hat geschrieben:
08.01.2023, 15:54
Weil antworten und fragen nicht zueinander passen.

MichaelN
Beiträge: 9677
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 698 Mal
Danksagung erhalten: 1625 Mal

Re: ETA Heizung auslesen

Beitrag von MichaelN » 08.01.2023, 22:41

Xythras hat geschrieben:
08.01.2023, 21:39
Weisst du überhaupt wie es geht, bzw. Benutzt du Homematic mit ETA?
Nö, aber dafür kann ich skripte programmieren.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Tyfys
Beiträge: 549
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: ETA Heizung auslesen

Beitrag von Tyfys » 11.01.2023, 15:00

Hier im Thema sind ja schon verschiedene Skript-Beispiele gezeigt worden.

Weil als Rückgabe Daten im XML-Format ausgegeben werden,habe ich nun mal auf Basis der hier gezeigten Menue-Liste
ein weiteres Skript erstellt und dabei die Möglichkeiten der HM-Skript-XML-Verarbeitung genutzt.
Nach den ETA-Schnittstellenbeschreibungen scheinen alle Rückgabedaten nach dem gleichen Muster erstellt zu werden.

Durch die XML-Befehle haben auch Veränderungen in der Reihenfolge der Attribute keine Auswirkungen mehr.

Code: Alles auswählen

!Achtung das Script läuft nur mit XML - Daten
string WerteListe = "";
WerteListe = WerteListe # 'Kessel_Vorlauf,/112/10021/0/0/12241;';
WerteListe = WerteListe # 'HK1_Vorlauf,/112/10101/0/0/12241;';
WerteListe = WerteListe.RTrim(";");

boolean cuxd = false;
boolean test = true;
string Hinweis;
string variable;
string key;
string url;
string etaXml;
string AtrbName = "scaleFactor";

!CUxD Verweis
string cuxdAdress = "CUxD.CUX2801001:4.";
!Adresse ETA
string serverAdress = "http://<IP-Adresse>:8080//user/var";

string ListPos;
foreach(ListPos, WerteListe.Split(";")) {
    variable = ListPos.StrValueByIndex(",", 0);
    !Auswertung nur wenn die Systemvariable auch angelegt ist.
    object SVrObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(variable);
    if (!SVrObj) {
        Hinweis = Hinweis # "Variablenname " # variable # " ist falsch oder nicht angelegt\n";
        if (test == false) {
            continue;
        }
    }
    key = ListPos.StrValueByIndex(",", 1);
    etaXml = "";
    url = serverAdress # key;
    if (cuxd) {
        !hier ist die Abfrage mit CUxD
        dom.GetObject(cuxdAdress # "CMD_SETS").State("wget -q -O - '" # url # "'");
        dom.GetObject(cuxdAdress # "CMD_QUERY_RET").State(1);
        string etaXml = dom.GetObject(cuxdAdress # "CMD_RETS").State();
    } else {
        string stdout;
        string stderr;
        system.Exec("wget -q -O - '"#  url # "'" , &stdout, &stderr);
        string etaXml = stdout;
    }
    if (etaXml == "") {
        Hinweis = Hinweis # "Datenabfrage für " # url # " fehlgeschlagen\n";
        continue;
    }
    xml xmlData;
    xml xNode = xmlData.Parse(etaXml);
    integer index = 0;
    xml Elem1 = xNode.GetChildNode("value");
    if (Elem1.GetAttribute(AtrbName) <> 1) {
        real wert = Elem1.GetText().ToFloat() / Elem1.GetAttribute(AtrbName).ToFloat();
    } else {
        AtrbName = "strValue";
        string wert = Elem1.GetAttribute(AtrbName);
        AtrbName = "scaleFactor";
    }
    if (test) {
        WriteLine("Wert für " # variable # " bei " # key # " ist " # wert);
    }
    !an Systemvareable
    if (SVrObj) {
        SVrObj.State(wert);
    }
}

if ((test) && (Hinweis > "")) {
    WriteLine(Hinweis);
}
Die WerteListe sollte leicht zu ergänzen / anzupassen sein.

Evtl. müsste noch eine kleine Anpassung für Werte gemacht werden, die in Systemvariablen vom Typ Logikwert ausgegeben werden sollen.


PS: habe weder CuxD noch ein ETA-Gerät.
just for fun...


EDIT: Musste die Zeile mit system.Exec noch verbessern.
Dank an Henke
Gruß
Harry

Xythras
Beiträge: 28
Registriert: 05.01.2023, 19:27
System: CCU

Re: ETA Heizung auslesen

Beitrag von Xythras » 11.01.2023, 21:13

Ich hab jetzt mal zum Test folgendes eingegeben:

Vorrat Zahl kg
var url = "http://192.168.0.xxxxxxxxxxx:8080//user ... /12011.xml";

!hier ist die Abfrage mit CUxD
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string eta_xml = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

!Daten mit Suchworten aus XML-File ausfiltern:


string word = "strValue";
integer word_laenge = word.Length();
integer word_position = eta_xml.Find(word);
string daten = eta_xml.Substr((word_position + word_laenge +2), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
!WriteLine(zahl);
dom.GetObject("SV_ETA_Vorrat").State(zahl);
!WriteLine(daten);
!WriteLine(zahl);
!WriteLine("Läuft bis Vorrat!");

Wenn ich den link im Browser eingebe erhalte ich, dass der Vorrat 27kg ist. Das stimmt auch. Es wird aber nicht an die Systemvariable übertragen.

<eta xmlns="http://www.eta.co.at/rest/v1" version="1.0">
<value uri="//user/var/112/10021/0/0/12011.xml" strValue="27" unit="kg" decPlaces="0" scaleFactor="10" advTextOffset="0">270</value>
</eta>

An was könnte es liegen, dass es bei den Systemvariablen nicht angezeigt wird?

Xythras
Beiträge: 28
Registriert: 05.01.2023, 19:27
System: CCU

Re: ETA Heizung auslesen

Beitrag von Xythras » 11.01.2023, 21:20

Oh Super, Danke! Da zeigt es sogar Fehlermeldungen an.

Das habe ich jetzt gerade probiert. Dort kommt bei Skript testen:

Datenabfrage für http://<192.168.0.xxxxxxx>:8080//user/var/112/10021/0/0/12241 fehlgeschlagen
Datenabfrage für http://<192.168.0.xxxxxxx>:8080//user/var/112/10101/0/0/12241 fehlgeschlagen







Tyfys hat geschrieben:
11.01.2023, 15:00
Hier im Thema sind ja schon verschiedene Skript-Beispiele gezeigt worden.

Weil als Rückgabe Daten im XML-Format ausgegeben werden,habe ich nun mal auf Basis der hier gezeigten Menue-Liste
ein weiteres Skript erstellt und dabei die Möglichkeiten der HM-Skript-XML-Verarbeitung genutzt.
Nach den ETA-Schnittstellenbeschreibungen scheinen alle Rückgabedaten nach dem gleichen Muster erstellt zu werden.

Durch die XML-Befehle haben auch Veränderungen in der Reihenfolge der Attribute keine Auswirkungen mehr.

Code: Alles auswählen

!Achtung das Script läuft nur mit XML - Daten
string WerteListe = "";
WerteListe = WerteListe # 'Kessel_Vorlauf,/112/10021/0/0/12241;';
WerteListe = WerteListe # 'HK1_Vorlauf,/112/10101/0/0/12241;';
WerteListe = WerteListe.RTrim(";");

boolean cuxd = false;
boolean test = true;
string Hinweis;
string variable;
string key;
string url;
string etaXml;
string AtrbName = "scaleFactor";

!CUxD Verweis
string cuxdAdress = "CUxD.CUX2801001:4.";
!Adresse ETA
string serverAdress = "http://<IP-Adresse>:8080//user/var";

string ListPos;
foreach(ListPos, WerteListe.Split(";")) {
    variable = ListPos.StrValueByIndex(",", 0);
    !Auswertung nur wenn die Systemvariable auch angelegt ist.
    object SVrObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(variable);
    if (!SVrObj) {
        Hinweis = Hinweis # "Variablenname " # variable # " ist falsch oder nicht angelegt\n";
        if (test == false) {
            continue;
        }
    }
    key = ListPos.StrValueByIndex(",", 1);
    etaXml = "";
    url = serverAdress # key;
    if (cuxd) {
        !hier ist die Abfrage mit CUxD
        dom.GetObject(cuxdAdress # "CMD_SETS").State("wget -q -O - '" # url # "'");
        dom.GetObject(cuxdAdress # "CMD_QUERY_RET").State(1);
        string etaXml = dom.GetObject(cuxdAdress # "CMD_RETS").State();
    } else {
        string stdout;
        string stderr;
        system.Exec("wget -q -O - '"#  url # "'" , &stdout, &stderr);
        string etaXml = stdout;
    }
    if (etaXml == "") {
        Hinweis = Hinweis # "Datenabfrage für " # url # " fehlgeschlagen\n";
        continue;
    }
    xml xmlData;
    xml xNode = xmlData.Parse(etaXml);
    integer index = 0;
    xml Elem1 = xNode.GetChildNode("value");
    if (Elem1.GetAttribute(AtrbName) <> 1) {
        real wert = Elem1.GetText().ToFloat() / Elem1.GetAttribute(AtrbName).ToFloat();
    } else {
        AtrbName = "strValue";
        string wert = Elem1.GetAttribute(AtrbName);
        AtrbName = "scaleFactor";
    }
    if (test) {
        WriteLine("Wert für " # variable # " bei " # key # " ist " # wert);
    }
    !an Systemvareable
    if (SVrObj) {
        SVrObj.State(wert);
    }
}

if ((test) && (Hinweis > "")) {
    WriteLine(Hinweis);
}
Die WerteListe sollte leicht zu ergänzen / anzupassen sein.

Evtl. müsste noch eine kleine Anpassung für Werte gemacht werden, die in Systemvariablen vom Typ Logikwert ausgegeben werden sollen.


PS: habe weder CuxD noch ein ETA-Gerät.
just for fun...


EDIT: Musste die Zeile mit system.Exec noch verbessern.
Dank an Henke

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“