ETA Heizung auslesen

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

Moderator: Co-Administratoren

tcfigge
Beiträge: 60
Registriert: 18.10.2015, 14:18
Hat sich bedankt: 1 Mal

ETA Heizung auslesen

Beitrag von tcfigge » 26.05.2016, 15:16

Hallo zusammen!

Ich habe für mich einen Weg gefunden die einzelnen Zustände meines ETA Kessels auszulesen.

Ich wollte meinen Ansatz teilen der auf meinem Wissen aus dem Wunderground Script basiert.

Danke an Funkleuchtturm!!!

Als erstes habe ich diverse Systemvariablen angelegt:
Sys_var.PNG
Dann ein Programm erstellt:
Programm1.PNG
Dieses Programm läuft periodisch alle 7 Minuten und führt folgendes Script aus:

Code: Alles auswählen

          !Kessel Zustand
            var url = "http://192.168.178.**:8080//user/var/40/10021/0/0/12000";

            !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), 1);
            integer word_position = daten.Find(word);
            daten = daten.Substr(0, (word_position -2));
            word_laenge =daten.Length();
            string anfangsbuchstabe = daten.Substr(0,1);
           
            if (anfangsbuchstabe == "H")
                     { if (daten == "H") {daten = "Heizen" ;} }

            if (anfangsbuchstabe == "Z")
                     { if (daten == "Z") {daten = "Zünden" ;} }
        
            if (anfangsbuchstabe == "F")
                     { if (daten == "F") {daten = "Füllen" ;} }

            if (anfangsbuchstabe == "A")
                     { if (daten == "A") {daten = "Ausgeschaltet" ;} }
            
            if (anfangsbuchstabe == "G")
                     { if (daten == "G") {daten = "Glutabbrand" ;} }

            if (anfangsbuchstabe == "B")
                     { if (daten == "B") {daten = "Bereit" ;} }

            dom.GetObject("ETA_Kessel").State(daten);
            !WriteLine(daten);
Folgendes Script lasse ich je nach Kessel_Zustand in einem zweiten Programm mit unterschiedlichen Zeitabständen laufen:

Code: Alles auswählen

!Vorlauftemperatur
            var url = "http://192.168.178.**:8080//user/var/120/10101/0/0/12241";

            !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 = "advTextOffset";
            integer word_laenge = word.Length();
            integer word_position = eta_xml.Find(word);
            string daten = eta_xml.Substr((word_position + word_laenge +5), 100);
            integer word_position = daten.Find(word);
            daten = daten.Substr(0, (word_position -2));
            real zahl = daten.ToFloat()/10;
            dom.GetObject("ETA_Vorlauftemperatur").State(zahl);




!Temperatur
            var url = "http://192.168.178.**:8080//user/var/40/10241/0/0/12197";

            !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 = "advTextOffset";
            integer word_laenge = word.Length();
            integer word_position = eta_xml.Find(word);
            string daten = eta_xml.Substr((word_position + word_laenge +5), 100);
            integer word_position = daten.Find(word);
            daten = daten.Substr(0, (word_position -2));
            real zahl = daten.ToFloat()/10;
            dom.GetObject("ETA_Aussentemperatur").State(zahl);
            !WriteLine(daten);
            !WriteLine("Läuft bis Atemp!");


!Puffer oben
            var url = "http://192.168.178.**:8080//user/var/120/10251/0/0/12242.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 = "advTextOffset";
            integer word_laenge = word.Length();
            integer word_position = eta_xml.Find(word);
            string daten = eta_xml.Substr((word_position + word_laenge +5), 100);
            integer word_position = daten.Find(word);
            daten = daten.Substr(0, (word_position -2));
            real zahl = daten.ToFloat()/10;
            dom.GetObject("ETA_Puffer_oben").State(zahl);

            !WriteLine("Läuft bis Pufferoben!");

!Puffer mitte
            var url = "http://192.168.178.**:8080//user/var/120/10251/0/0/12522.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 = "advTextOffset";
            integer word_laenge = word.Length();
            integer word_position = eta_xml.Find(word);
            string daten = eta_xml.Substr((word_position + word_laenge +5), 100);
            integer word_position = daten.Find(word);
            daten = daten.Substr(0, (word_position -2));
            real zahl = daten.ToFloat()/10;
            dom.GetObject("ETA_Puffer_mitte").State(zahl);

            !WriteLine("Läuft bis Puffermitte!");

!Puffer unten
            var url = "http://192.168.178.**:8080//user/var/120/10251/0/0/12244.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 = "advTextOffset";
            integer word_laenge = word.Length();
            integer word_position = eta_xml.Find(word);
            string daten = eta_xml.Substr((word_position + word_laenge +5), 100);
            integer word_position = daten.Find(word);
            daten = daten.Substr(0, (word_position -2));
            real zahl = daten.ToFloat()/10;
            dom.GetObject("ETA_Puffer_unten").State(zahl);

            !WriteLine("Läuft bis Pufferunten!");

!Puffer Ladezustand
            var url = "http://192.168.178.**:8080//user/var/120/10251/0/0/12528.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 = "advTextOffset";
            integer word_laenge = word.Length();
            integer word_position = eta_xml.Find(word);
            string daten = eta_xml.Substr((word_position + word_laenge +5), 100);
            integer word_position = daten.Find(word);
            daten = daten.Substr(0, (word_position -2));
            real zahl = daten.ToFloat()/10;
            dom.GetObject("ETA_Puffer_Ladezustand").State(zahl);

            !WriteLine("Läuft bis PufferLadezustand!");
Dann noch einmal täglich im dritten Programm:

Code: Alles auswählen

!Vorrat
            var url = "http://192.168.178.**:8080//user/var/40/10201/0/0/12015.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();
            dom.GetObject("ETA_Vorrat").State(zahl);


!Gesamtverbrauch
            var url = "http://192.168.178.**:8080//user/var/40/10021/0/0/12016.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();
            dom.GetObject("ETA_Gesamtverbrauch").State(zahl);

            !WriteLine("Läuft bis Gesamtverbrauch!");
Weiterhin bekomme ich eine PushNachricht wenn der ETA beginnt zu arbeiten...

Ich wollte dies nur teilen, falls jemand daran Interesse hat.

Es lief bei mir den ganzen Winter ohne Problem durch...

Ich bin mir sicher das dies nicht der Königsweg ist, aber da ich eine Script Null bin, war mehr nicht möglich. ;-)

Jetzt suche ich noch nach einem Weg, Variablen im ETA zu setzen. z.B: Wenn SysVar Heizperiode NEIN Dann Kessel AUS.

Da bin ich aber noch nicht weiter.

Bis dahin...

Thorsten
Viele Grüße
tcfigge
--------------------------------------------
223 Kanäle in 70 Geräten und 82 CUxD-Kanäle in 7 CUxD-Geräten:
3x HM-PB-6-WM55, 7x HM-ES-PMSw1-Pl, 3x HM-Sen-MDIR-O-2, 2x HM-Sec-TiS, 7x CUX28, 1x HM-RC-Key4-2, 4x HM-LC-Dim1T-FM, 6x HM-Sec-SC-2, 1x HM-Sec-Key, 3x HM-LC-Sw1-FM, 4x HM-Sec-SCo, 2x HMIP-WTH, 9x HM-LC-Bl1-FM, 2x HM-LC-Sw2-FM, 3x HM-LC-Sw1PBU-FM, 1x HM-LC-Sw4-WM, 1x HM-OU-CFM-Pl, 3x HM-Sec-RHS, 1x HM-Sen-RD-O, 1x HM-PB-4Dis-WM, 1x HM-PBI-4-FM, 1x HMIP-PSM, 11x HM-CC-RT-DN
--------------------------------------------

Benutzeravatar
Roland M.
Beiträge: 9738
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 251 Mal
Danksagung erhalten: 1357 Mal

Re: ETA Heizung auslesen

Beitrag von Roland M. » 26.05.2016, 22:18

Hallo Thorsten!
tcfigge hat geschrieben:Ich wollte dies nur teilen, falls jemand daran Interesse hat.
...und aus diesem Grund wäre es schade, wenn der Beitrag im allgemeinen Geräuschpegel untergehen würde. Ich habe ihn daher zu den "Tipps und Tricks" verschoben.

Danke für deine Beschreibung!


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

hofi
Beiträge: 1
Registriert: 18.01.2015, 18:19

Re: ETA Heizung auslesen

Beitrag von hofi » 29.05.2016, 18:52

Hallo zusammen,

letzte Woche wurde bei mir einen ETA SH 30 eingebaut.
Habe schon viel gelesen komme aber momentan nicht weiter.
besitze schon seit längern überall Heizungsthermostate HM-105155 und CCU2. Bisher hat mit Wenn und Dann soweit alles funktioniert.
Jetzt würde ich gerne den Ofen auslesen um alles zu verbinden.
z.B wenn der Heizkreis einschaltet die Thermostate auf automatisch gehen und wenn der Heizkreis ausschaltet die Thermostate zu machen.
Die CUxD ist runtergeladen und installiert. Der ETA ist zum Abrufen eingestellt, wie bekomme ich die Daten per IP Adresse auf die CCU2? bzw was muss bei CUxD eingestellt werden?

Danke für eure Hilfe!
Gruß

Hofi

tcfigge
Beiträge: 60
Registriert: 18.10.2015, 14:18
Hat sich bedankt: 1 Mal

Re: ETA Heizung auslesen

Beitrag von tcfigge » 31.07.2016, 19:13

Hallo.
Habe deine Frage gerade erst gesehen?
Bist du schon weiter mit einer Lösung?
Gruß Thorsten

Gesendet von meinem SM-N910F mit Tapatalk
Viele Grüße
tcfigge
--------------------------------------------
223 Kanäle in 70 Geräten und 82 CUxD-Kanäle in 7 CUxD-Geräten:
3x HM-PB-6-WM55, 7x HM-ES-PMSw1-Pl, 3x HM-Sen-MDIR-O-2, 2x HM-Sec-TiS, 7x CUX28, 1x HM-RC-Key4-2, 4x HM-LC-Dim1T-FM, 6x HM-Sec-SC-2, 1x HM-Sec-Key, 3x HM-LC-Sw1-FM, 4x HM-Sec-SCo, 2x HMIP-WTH, 9x HM-LC-Bl1-FM, 2x HM-LC-Sw2-FM, 3x HM-LC-Sw1PBU-FM, 1x HM-LC-Sw4-WM, 1x HM-OU-CFM-Pl, 3x HM-Sec-RHS, 1x HM-Sen-RD-O, 1x HM-PB-4Dis-WM, 1x HM-PBI-4-FM, 1x HMIP-PSM, 11x HM-CC-RT-DN
--------------------------------------------

helm4711
Beiträge: 4
Registriert: 14.03.2015, 01:21

Re: ETA Heizung auslesen

Beitrag von helm4711 » 09.09.2017, 07:15

Servus tcfigge,
ich habe diesen Thread erst jetzt richtig beachtet.
Das ist genau, was ich gesucht habe! :D

Ich habe nach Deiner Anleitung
- die Systemvariablen erstellt
- ein Programm erstellt, dass alle 10 min ein Skript ausführt
- in dem Skript die von Dir geposteten Befehle rein kopiert.
- die IP-Adresse an die meines ETA SH angepasst
- teilweise die Nummern der Variablen angepasst:
z.B. bei

Code: Alles auswählen

!Temperatur
            var url = "http://192.168.178.**:8080//user/var/40/10241/0/0/12197";
muss bei mir anstatt der /40/ eine /48/ stehen.

Welche Nummern das bei einem selbst sind, kann man aus dem xml-File sehen, das einem der ETA auf diese Anfrage hin schickt:

Code: Alles auswählen

http://192.168.178.30:8080/user/menu/
Jetzt landen die Daten aus der ETA Steuerung auch schön in den dafür vorgesehenen Systemvariablen! Dankeschön!

P.S. Ich hatte CuxD vorher schon installiert (wie in der Beschreibung zu CuxD beschrieben). Ich musste für das ETA Skript nix mehr im CuxD umstellen.

reinahome
Beiträge: 20
Registriert: 14.11.2015, 08:44
System: CCU
Hat sich bedankt: 5 Mal

Re: ETA Heizung auslesen

Beitrag von reinahome » 21.01.2018, 19:55

Danke für die Anleitung. Habe noch etwas an den Scripten gearbeitet.
Für Werte:

Code: Alles auswählen

!VERWENDET für Werte 
!String art und url muß in jeden Script oben eingefügt werden
!ab Zeile "!ab hier keine Aenderung alle gleich" - sind alle Scripte gleich.

string art = "ETA_Aussentemperatur";
string url = "/40/10241/0/0/12197";

string art = "ETA_Aschenbox_leeren";
string url = "/40/10021/0/0/12013";
!Verbrauch seit Aschebox leeren

string art = "ETA_Kesseldruck";
string url = "/40/10021/0/0/12180";

string art = "ETA_Kesseltemperatur";
string url = "/40/10021/0/0/12161";

string art = "ETA_Vorlauftemperatur";
string url = "/120/10101/0/0/12241";

string art = "ETA_Aussentemperatur";
string url = "/40/10241/0/0/12197";

string art = "ETA_Pelletsbehälter_Fuellstand";
string url = "/40/10021/0/0/12011";

!ab hier keine Aenderung alle gleich
!CUxD Verweis
 string cux = "CUxD.CUX2801001:1."; 

 !Adresse ETA 
 string adr = "http://xxx.xxx.x.x:8080//user/var";

 !Gesamte URL
  string urlges = adr # url;
 
 WriteLine(urlges);
	    
!hier ist die Abfrage mit CUxD
 dom.GetObject(cux # "CMD_SETS").State("wget -q -O - '"#urlges#"'");
 dom.GetObject(cux # "CMD_QUERY_RET").State(1);
 string eta_xml = dom.GetObject(cux # "CMD_RETS").State();

!Daten mit Suchworten aus XML-File ausfiltern:
 string word = "advTextOffset";
 integer word_laenge = word.Length();
 integer word_position = eta_xml.Find(word);
 string daten = eta_xml.Substr((word_position + word_laenge +5), 100);
 integer word_position = daten.Find(word);
 daten = daten.Substr(0, (word_position -2));

!ScalFactor auslesen Komma

!Wert auslesen zwischen "scaleFactor" und "advTextOffset"
 string word= "scaleFactor";
 integer word_laenge = word.Length();
 integer word_scalV_position = eta_xml.Find(word)+ word_laenge+2;
 !WriteLine(word_scalV_position);
 !string scaleFactor= eta_xml.Substr((word_scalV_position));
 !WriteLine("advTextOffset= " # scaleFactor);

 string word= "advTextOffset";
 integer word_advT_position = eta_xml.Find(word);
 !WriteLine(word_advT_position);
  integer value_laenge = ( word_advT_position - word_scalV_position)-2;
 !WriteLine(value_laenge);

 !string scaleFactor= eta_xml.Substr((word_scalV_position),value_laenge);
 real Factor= eta_xml.Substr((word_scalV_position),value_laenge).ToFloat();
 !WriteLine("Factor= " # Factor);
 
 real zahl = daten.ToFloat()/Factor;

 WriteLine(daten);
 WriteLine(zahl);

!an Systemvareable
 dom.GetObject(art).State(zahl); 
Für Zustände:

Code: Alles auswählen

!VERWENDET für Zustände
!String art und url muß in jeden Script oben eingefügt werden
!ab Zeile "!ab hier keine Aenderung alle gleich" - sind alle Scripte gleich.

string art = "ETA_Kesselzustand";
string url = "/40/10021/0/0/12000";

!ab hier keine Aenderung alle gleich
!CUxD Verweis
 string cux = "CUxD.CUX2801001:1."; 

 !Adresse ETA 
 string adr = "http://xxx.xxx.x.x:8080//user/var";

 !Gesamte URL
  string urlges = adr # url;

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

!Daten mit Suchworten aus XML-File ausfiltern:
!Wert auslesen zwischen "StrValue" und "unit"
 string word= "strValue";
 integer word_laenge = word.Length();
 integer word_strV_position = eta_xml.Find(word)+ word_laenge+2;
 !WriteLine(word_strV_position);
 string daten = eta_xml.Substr((word_strV_position));
 !WriteLine(daten);

 string word= "unit";
 integer word_unit_position = eta_xml.Find(word);
 !WriteLine(word_unit_position);
  integer value_laenge = ( word_unit_position - word_strV_position)-2;
 !WriteLine(value_laenge);
 string Wert = eta_xml.Substr((word_strV_position),value_laenge);
 ! WriteLine(Wert);
  
!Gesamtausgabe
 WriteLine(Wert);

!an Systemvareable
 dom.GetObject(art).State(Wert);
Danke nochmal und liebe Grüße an alle im Forum.

hmtomz01
Beiträge: 5
Registriert: 28.06.2018, 16:45

Re: ETA Heizung auslesen

Beitrag von hmtomz01 » 28.06.2018, 17:01

Hallo zusammen!

Vorab herzlichen Dank für eure Codes und Infos die Ihr hier schon zur Verfügung gestellt habt, die sind echt enorm hilfreich!!

Ich bräuchte aber bitte Hilfe von euch bezüglich des Scripts von reinahome.

Mit dem Ursprünglichen Script von tcfigge läuft soweit bereits alles, ich würde aber das Script von reinahome vorziehen da es etwas Übersichtlicher ist.
Mein Problem ist aber das das Script immer nur für die Abfrage einer SystemVariable funktioniert, und zwar immer die letztgereihte im Script.


Beispiel:
Verwende ich das Werte-Script, so bekomme ich nur die Systemvariable "ETA_Pelletsbehälter_Fuellstand" zurückgeliefert bzw. Aktualisiert.

Die IP-Adresse und die URLs sind korrekt, alle Systemvariablen sind angelegt.

Kann mir diesbezüglich jemand behilflich sein?


Danke euch vorab recht herzlich, und schöne Grüße an alle im Forum.

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

Re: ETA Heizung auslesen

Beitrag von cRemE-fReSh » 16.07.2018, 23:52

Hallo zusammen,

ich habe zwar nicht viel geändert, teile es aber dennoch mit euch.
Mich hat es gestört, für jede Variable ein eigenes Skript anlegen zu müssen. (@hmtomz01: Ich vermute mal, dass genau auch das dein Problem ist. Du hast vermutlich nicht für jede Variable ein Skript angelegt, sondern eins für alle. Das geht mit dem bisher geposteten Skript nicht.)
Deshalb habe ich die Skripte von reinahome etwas überarbeitet, sodass sich alle Werte, bzw. Stati in jeweils einem einzigen Skript abarbeiten lassen. Sicherlich nicht der schönste Code, aber bevor ich eh nicht dazu komme und es dann doch nicht mehr poste, lieber gleich.

Skript für Werte:

Code: Alles auswählen

string parameterList = "ETA_Aussentemperatur,/40/10241/0/0/12197
\tETA_Aschebox_leeren,/40/10021/0/0/12013
\tETA_Kesseldruck,/40/10021/0/0/12180
\tETA_Kesseltemperatur,/40/10021/0/0/12161
\tETA_Vorlauftemperatur,/120/10101/0/0/12241
\tETA_Pelletsbehaelter_Fuellstand,/40/10021/0/0/12011
\tETA_Pelletsbehaelter_Fuellstand_Vorrat,/40/10201/0/0/12015
\tETA_Pufferspeicher_Temp_Oben,/120/10601/0/0/13191
\tETA_Pufferspeicher_Temp_Unten,/120/10601/0/0/13192
\tETA_Pufferspeicher_Capacity,/120/10601/0/0/12528
";

string parameter;
string variable;
string url;
string urlComplete;
string etaXml;

!CUxD Verweis
string cuxdAdress = "CUxD.CUX2801002:4.";

!Adresse ETA 
string serverAdress = "http://xxx.xxx.xxx.xxx:8080//user/var";


foreach (parameter, parameterList)
{
	variable = parameter.StrValueByIndex(",",0);
	url = parameter.StrValueByIndex(",",1);
	etaXml = "";
	urlComplete = serverAdress # url;
	WriteLine(urlComplete);

	!hier ist die Abfrage mit CUxD
	dom.GetObject(cuxdAdress # "CMD_SETS").State("wget -q -O - '"#urlComplete#"'");
	dom.GetObject(cuxdAdress # "CMD_QUERY_RET").State(1);
	string etaXml = dom.GetObject(cuxdAdress # "CMD_RETS").State();

	!Daten mit Suchworten aus XML-File ausfiltern:
	string word = "advTextOffset";
	integer word_laenge = word.Length();
	integer word_position = etaXml.Find(word);
	string daten = etaXml.Substr((word_position + word_laenge +5), 100);
	integer word_position = daten.Find(word);
	daten = daten.Substr(0, (word_position -2));
	!ScalFactor auslesen Komma

	!Wert auslesen zwischen "scaleFactor" und "advTextOffset"
	string word= "scaleFactor";
	integer word_laenge = word.Length();
	integer word_scalV_position = etaXml.Find(word)+ word_laenge+2;
	!WriteLine(word_scalV_position);
	!string scaleFactor= etaXml.Substr((word_scalV_position));
	!WriteLine("advTextOffset= " # scaleFactor);

	string word= "advTextOffset";
	integer word_advT_position = etaXml.Find(word);
	!WriteLine(word_advT_position);
	integer value_laenge = ( word_advT_position - word_scalV_position)-2;
	!WriteLine(value_laenge);

	!string scaleFactor= etaXml.Substr((word_scalV_position),value_laenge);
	real Factor= etaXml.Substr((word_scalV_position),value_laenge).ToFloat();
	!WriteLine("Factor= " # Factor);
	
	real zahl = daten.ToFloat()/Factor;

	WriteLine(daten);
	WriteLine(zahl);

	!an Systemvareable
	dom.GetObject(variable).State(zahl); 
}
Skript für Stati:

Code: Alles auswählen

string parameterList = "ETA_Kesselzustand,/40/10021/0/0/12000
\tETA_Heizung,/120/10101/0/0/12092
";

string parameter;
string variable;
string url;
string urlComplete;
string etaXml;

!CUxD Verweis
string cuxdAdress = "CUxD.CUX2801002:4.";

!Adresse ETA 
string serverAdress = "http://xxx.xxx.xxx.xxx:8080//user/var";

foreach (parameter, parameterList)
{
	variable = parameter.StrValueByIndex(",",0);
	url = parameter.StrValueByIndex(",",1);
	etaXml = "";
	urlComplete = serverAdress # url;
	WriteLine(urlComplete);
	    
	!hier ist die Abfrage mit CUxD
	dom.GetObject(cuxdAdress # "CMD_SETS").State("wget -q -O - '"#urlComplete#"'");
	dom.GetObject(cuxdAdress # "CMD_QUERY_RET").State(1);
	string eta_xml = dom.GetObject(cuxdAdress # "CMD_RETS").State();

	!Daten mit Suchworten aus XML-File ausfiltern:
	!Wert auslesen zwischen "StrValue" und "unit"
	string word= "strValue";
	integer word_laenge = word.Length();
	integer word_strV_position = eta_xml.Find(word)+ word_laenge+2;
	!WriteLine(word_strV_position);
	string daten = eta_xml.Substr((word_strV_position));
	!WriteLine(daten);

	string word= "unit";
	integer word_unit_position = eta_xml.Find(word);
	!WriteLine(word_unit_position);
	integer value_laenge = ( word_unit_position - word_strV_position)-2;
	!WriteLine(value_laenge);
	string Wert = eta_xml.Substr((word_strV_position),value_laenge);
	! WriteLine(Wert);
	  
	!Gesamtausgabe
	WriteLine(Wert);

	!an Systemvareable
	dom.GetObject(variable).State(Wert);
}
Viele Grüße

hmtomz01
Beiträge: 5
Registriert: 28.06.2018, 16:45

Re: ETA Heizung auslesen

Beitrag von hmtomz01 » 22.07.2018, 16:40

Hallo zusammen,

@cRemE-fReSh -> Ein Herzliches DANKESCHÖN!! Genau das was ich gesucht habe! Funktioniert PERFEKT!

Beste Grüße!

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

Re: ETA Heizung auslesen

Beitrag von cRemE-fReSh » 28.08.2018, 22:57

Der Vollständigkeit halber noch eine Ergänzung: Es ist auch möglich, spezifische Aktionen auf der Heizung auszulösen.
Im nachfolgenden Beispiel ist gezeigt, wie der Kessel der Heizung Ein-/Ausgeschaltet werden kann.
Hierzu ist lediglich wieder die URL anzupassen und die Werte für die Aktion (postVars) auszufüllen. Der Wert 1802 schaltet aus. Der Wert 1803 schaltet ein. Die passenden Werte sind am besten über die Webschnittstelle der ETA zu finden.

Code: Alles auswählen

string 	url 		= "http://192.168.188.34:8080/user/var/40/10021/0/0/12080";
string 	postVars 	= "value=1803"; !1802 Aus, 1803 Ein
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -d '" # postVars # "' " # url);

Antworten

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