Wert per WGET abfragen und in Variable schreiben

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

ship
Beiträge: 21
Registriert: 19.06.2017, 12:46

Wert per WGET abfragen und in Variable schreiben

Beitrag von ship » 18.02.2018, 16:08

Hi, ich möchte gerne bei meiner Heizung den Aussentemperaturfühler abfragen und den Wert in ein Variable schreiben.
Leider hat es mit den zusammengeklauten Codeschnipseln hier im Forum nicht geklappt und hoffe, dass evtl. jemand von ein meinen Versuch korrigieren kann.

In einer Browsersitzung lässt sich die Temperatur wie folgt abfragen:

1.) Authentifizierung, da sonst im Schritt 2.) den Zugriff verweigert wird

Aufruf von

Code: Alles auswählen

http://192.168.1.55/cgi/login?username=waterkotte&password=waterkotte
liefert den Quelltext

Code: Alles auswählen

1
#S_OK
IDALToken=e3459da5fd9278d6b746a5ff9c43870d
2.) Abfrage des CGI-Tags A1 in der gleichen Browsersitzung, der die aktuellen Werte des Temp.-Fühlers wie folgt ausgibt:

Code: Alles auswählen

http://192.168.1.55/cgi/readTags?n=1&t1=A1
liefert den Quelltext:

Code: Alles auswählen

#A1	S_OK
192	43
Hierbei entspricht die "43" der Temperatur 4,3 Grad die ich nun in eine CCU-Variable schreiben möchte. Ausgabe einer negativen Temperatur (hier -2,0 Grad) sieht wie folgt aus:

Code: Alles auswählen

#A1	S_OK
192	-20
Ich habe mir ein paar Schnippsel Code zusammengesucht und einmal versucht, zumindest irgendwo anzufangen, allerdings scheitert dies bereits.
Hiermit habe ich begonnen, obwohl damit noch nicht mal das "Ausschneiden" der Temperatur versucht habe.

Code: Alles auswählen

var authurl = "http://192.168.1.55/cgi/login?username=waterkotte&password=waterkotte";
var abfrageurl = "http://192.168.1.55/cgi/readTags?n=1&t1=A1";

dom.GetObject("CUxD.CUX2801001:15.CMD_SETS").State("wget -q -O - '"#authurl#"'");
dom.GetObject("CUxD.CUX2801001:15.CMD_SETS").State("wget -q -O - '"#abfrageurl#"'");

dom.GetObject("CUxD.CUX2801001:15.CMD_QUERY_RET").State(1);
string srueck = dom.GetObject("CUxD.CUX2801001:15.CMD_RETS").State();
WriteLine(srueck);
dom.GetObject(ID_SYSTEM_VARIABLES).Get("Aussentemperatur").State(srueck);
Als Ausgabe erhalte ich hier lediglich eine weisse Seite, auch die von mir erstellte Variable vom Typ Zeichenfolge "Aussentemperatur" bleibt leer.
Da ich mich leider nicht mit Skripten auskenne, steh ich wie der "Ochs vorm Berg"... kann mir evtl. jemand weiterhelfen?

Falls es etwas hilft, bei OpenHAB gibt es ein Java Plugin, bei dem man evtl. etwas abschauen kann...
-> https://www.javatips.net/api/openhab1-a ... ector.java
--------------------------------------------
Raspberrymatic mit 121 Kanäle in 77 Geräten und 32 CUxD-Kanäle in 2 CUxD-Geräten:
3x HM-SCI-3-FM, 2x CUX28, 1x HM-OU-CFM-TW, 1x HM-Sec-SC-2, 3x HM-LC-Sw1-Pl-DN-R1, 10x HM-RC-2-PBU-FM, 13x HM-LC-Dim1TPBU-FM, 8x HM-LC-Sw1PBU-FM, 2x HM-LC-Sw1-Pl-2, 19x HM-LC-Bl1PBU-FM, 2x HM-Sec-TiS, 1x HM-PB-2-WM55-2, 1x HM-WDS40-TH-I-2, 1x HM-LC-Sw1-Pl-CT-R1, 1x HM-Sen-MDIR-O-2, 2x HM-Sec-SCo, 3x HM-Sec-SD-2, 4x HM-Sec-SD, 1x HM-Sec-SD-2-Team, 1x HM-Sec-SD-Team
--------------------------------------------

ship
Beiträge: 21
Registriert: 19.06.2017, 12:46

Re: Wert per WGET abfragen und in Variable schreiben

Beitrag von ship » 19.02.2018, 15:55

Ich habe jetzt nochmal etwas rumprobiert und versucht den Fehler einzugrenzen:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:15.CMD_SETS").State("wget -q -O - 'http://192.168.1.55/cgi/login?username=waterkotte&password=waterkotte'");
dom.GetObject("CUxD.CUX2801001:15.CMD_QUERY_RET").State(1);
string rueckgabe= dom.GetObject("CUxD.CUX2801001:15.CMD_RETS").State();
WriteLine(rueckgabe);
liefert immerhin schonmal:

Code: Alles auswählen

1
#S_OK
IDALToken=4dbda1c85e2d13479c57936ca7461818
jedoch wenn ich die andere URL (zum Auslesen des Tags) nutze:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:15.CMD_SETS").State("wget -q -O - 'http://192.168.1.55/cgi/readTags?n=1&t1=A1'");
dom.GetObject("CUxD.CUX2801001:15.CMD_QUERY_RET").State(1);
string rueckgabe= dom.GetObject("CUxD.CUX2801001:15.CMD_RETS").State();
WriteLine(rueckgabe);
bleibt die Ausgabe leer.
Die gleiche URL direkt im Browser liefert jedoch:

Code: Alles auswählen

#E_NEED_LOGIN
WGET über Windows CMD:

Code: Alles auswählen

C:\>wget "http://192.168.1.55/cgi/readTags?n=1&t1=A1"
--2018-02-19 17:10:03--  http://192.168.1.55/cgi/readTags?n=1&t1=A1
Connecting to 192.168.1.55:80... connected.
HTTP request sent, awaiting response... 500 Internal Server Error
2018-02-19 17:10:03 ERROR 500: Internal Server Error.
Jemand eine Idee?
--------------------------------------------
Raspberrymatic mit 121 Kanäle in 77 Geräten und 32 CUxD-Kanäle in 2 CUxD-Geräten:
3x HM-SCI-3-FM, 2x CUX28, 1x HM-OU-CFM-TW, 1x HM-Sec-SC-2, 3x HM-LC-Sw1-Pl-DN-R1, 10x HM-RC-2-PBU-FM, 13x HM-LC-Dim1TPBU-FM, 8x HM-LC-Sw1PBU-FM, 2x HM-LC-Sw1-Pl-2, 19x HM-LC-Bl1PBU-FM, 2x HM-Sec-TiS, 1x HM-PB-2-WM55-2, 1x HM-WDS40-TH-I-2, 1x HM-LC-Sw1-Pl-CT-R1, 1x HM-Sen-MDIR-O-2, 2x HM-Sec-SCo, 3x HM-Sec-SD-2, 4x HM-Sec-SD, 1x HM-Sec-SD-2-Team, 1x HM-Sec-SD-Team
--------------------------------------------

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Wert per WGET abfragen und in Variable schreiben

Beitrag von alchy » 19.02.2018, 23:46

Ich gehe davon aus, das du mittels Script den Token holen musst und in der 2. Abfrage mitsenden musst.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

ship
Beiträge: 21
Registriert: 19.06.2017, 12:46

Re: Wert per WGET abfragen und in Variable schreiben

Beitrag von ship » 20.02.2018, 12:37

Hmm, das übersteigt meine Copy-Paste-Fähigkeiten leider bei weitem :-(
@Alchy, kannst du mir da vielleicht weiter helfen? Ergibt sich evtl. aus dem verlinkten Java-Plugin von Openhab wie der Token zurückgesendet werden muss?
--------------------------------------------
Raspberrymatic mit 121 Kanäle in 77 Geräten und 32 CUxD-Kanäle in 2 CUxD-Geräten:
3x HM-SCI-3-FM, 2x CUX28, 1x HM-OU-CFM-TW, 1x HM-Sec-SC-2, 3x HM-LC-Sw1-Pl-DN-R1, 10x HM-RC-2-PBU-FM, 13x HM-LC-Dim1TPBU-FM, 8x HM-LC-Sw1PBU-FM, 2x HM-LC-Sw1-Pl-2, 19x HM-LC-Bl1PBU-FM, 2x HM-Sec-TiS, 1x HM-PB-2-WM55-2, 1x HM-WDS40-TH-I-2, 1x HM-LC-Sw1-Pl-CT-R1, 1x HM-Sen-MDIR-O-2, 2x HM-Sec-SCo, 3x HM-Sec-SD-2, 4x HM-Sec-SD, 1x HM-Sec-SD-2-Team, 1x HM-Sec-SD-Team
--------------------------------------------

ship
Beiträge: 21
Registriert: 19.06.2017, 12:46

Re: Wert per WGET abfragen und in Variable schreiben

Beitrag von ship » 21.02.2018, 17:24

Soo, ich bin einen Schritt weiter, allerdings steh ich wieder vor'm Berg :(

In der Windows CMD bekomme ich jetzt den Token gespeichert und kann ihn bei der Anfrage übergeben und erhalten die Ausgabe die brauche um dort die Temperatur irgendwie rauszubekommen.

Hier der (Teil-)Erfolg:

Code: Alles auswählen

C:\wget>wget -v --keep-session-cookies --save-cookies token.txt -O - "http://192.168.1.55/cgi/login?username=waterkotte&password=waterkotte"
--2018-02-21 17:14:09--  http://192.168.1.55/cgi/login?username=waterkotte&password=waterkotte
Connecting to 192.168.1.55:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 50 [text/plain]
Saving to: 'STDOUT'

-                     0%[                    ]       0  --.-KB/s               1

#S_OK
-                   100%[===================>]      50  --.-KB/s    in 0s

2018-02-21 17:14:10 (564 KB/s) - written to stdout [50/50]





C:\wget>wget -v --load-cookies token.txt -O - "http://192.168.1.55/cgi/readTags?n=1&t1=A1"
--2018-02-21 17:14:28--  http://192.168.1.55/cgi/readTags?n=1&t1=A1
Connecting to 192.168.1.55:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16 [text/plain]
Saving to: 'STDOUT'

-                     0%[                    ]       0  --.-KB/s               #
A1      S_OK
192     39
-                   100%[===================>]      16  --.-KB/s    in 0s

2018-02-21 17:14:28 (366 KB/s) - written to stdout [16/16]
Allerdings wenn ich den WGET Aufruf 1:1 ins Homematic Script setze, erhalte ich keine Ausgabe :

Code: Alles auswählen

var authurl = "http://192.168.1.55/cgi/login?username=waterkotte&password=waterkotte";
var abfrageurl = "http://192.168.1.55/cgi/readTags?n=1&t1=A1";

dom.GetObject("CUxD.CUX2801001:15.CMD_SETS").State("wget -v --keep-session-cookies --save-cookies token.txt -O - '"#authurl#"'");
dom.GetObject("CUxD.CUX2801001:15.CMD_QUERY_RET").State(1);


dom.GetObject("CUxD.CUX2801001:16.CMD_SETS").State("wget -v --load-cookies token.txt -O - '"#abfrageurl#"'");
dom.GetObject("CUxD.CUX2801001:16.CMD_QUERY_RET").State(1);

string srueck = dom.GetObject("CUxD.CUX2801001:16.CMD_RETS").State();

WriteLine(srueck);
dom.GetObject(ID_SYSTEM_VARIABLES).Get("Aussentemperatur").State(srueck);
WriteLine("Ende");
Irgendwie klappt es noch nicht, so dass die Ausgabe leer bleibt (bis auf mein "Ende").

Kann mir jemand weiterhelfen?
--------------------------------------------
Raspberrymatic mit 121 Kanäle in 77 Geräten und 32 CUxD-Kanäle in 2 CUxD-Geräten:
3x HM-SCI-3-FM, 2x CUX28, 1x HM-OU-CFM-TW, 1x HM-Sec-SC-2, 3x HM-LC-Sw1-Pl-DN-R1, 10x HM-RC-2-PBU-FM, 13x HM-LC-Dim1TPBU-FM, 8x HM-LC-Sw1PBU-FM, 2x HM-LC-Sw1-Pl-2, 19x HM-LC-Bl1PBU-FM, 2x HM-Sec-TiS, 1x HM-PB-2-WM55-2, 1x HM-WDS40-TH-I-2, 1x HM-LC-Sw1-Pl-CT-R1, 1x HM-Sen-MDIR-O-2, 2x HM-Sec-SCo, 3x HM-Sec-SD-2, 4x HM-Sec-SD, 1x HM-Sec-SD-2-Team, 1x HM-Sec-SD-Team
--------------------------------------------

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Wert per WGET abfragen und in Variable schreiben

Beitrag von alchy » 21.02.2018, 18:49

Du scheinst ja eh schon in meinen Scripten rumzuwühlen und tust mir leid.

Vorschlag:Verwendung des Synoscriptes, versuch mal:

Alchy

Code: Alles auswählen

! Wert per WGET abfragen und in Variable speichern für ship
! v 0.1 (c) by Alchy 
Scriptcopy gelöscht
Ausgabe posten, besser noch die JSON Ausgabe des Script executers (Signatur)

Alchy
Zuletzt geändert von alchy am 21.02.2018, 21:01, insgesamt 1-mal geändert.
Grund: Scriptcopy gelöscht

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

ship
Beiträge: 21
Registriert: 19.06.2017, 12:46

Re: Wert per WGET abfragen und in Variable schreiben

Beitrag von ship » 21.02.2018, 19:41

Klappt natürlich ;-)

Code: Alles auswählen

Cookie erfolgreich geholt 
 1
#S_OK
IDALToken=fd20ca82e71d1a6f86f6448c01f6c355
Aktion erfolgreich gestartet 
 Ausgabe #A1	S_OK
192	17
sowie

Code: Alles auswählen

{
  "result1": "5",
  "sessionId": "",
  "CUXD_ID1": "CUX2801001:1",
  "CUXD_ID2": "CUX2801001:2",
  "STDOUT": "Cookie erfolgreich geholt \n 1\n#S_OK\nIDALToken=b9f9ea78e29acae9f7970959956ec020\r\nAktion erfolgreich gestartet \n Ausgabe #A1\tS_OK\n192\t17\n\r\n",
  "PASSWORD": "waterkotte",
  "url": "http:\/\/192.168.1.55\/cgi\/login?username=waterkotte&password=waterkotte",
  "srueck": "1\n#S_OK\nIDALToken=b9f9ea78e29acae9f7970959956ec020",
  "befehl": "http:\/\/192.168.1.55\/cgi\/readTags?n=1&t1=A1",
  "DEBUG": "ja",
  "USERNAME": "waterkotte",
  "IP_SYNO": "192.168.1.55",
  "brueck": "#A1\tS_OK\n192\t17",
  "httpUserAgent": ""
}
Super! Danke schonmal!
Und wenn ich dich grad schon an der Strippe hab, kannst du mir dann noch sagen, wie ich die "17" am Ende der Rückgabe als eine "1.7" (aktuelle Temperatur) ausschneide? Als Hinweis, die negative Temperatur wird bspw. wie folgt ausgegeben

Code: Alles auswählen

#A1   S_OK
192   -20
Kann man dir eine kleine Dankesspende zukommen lassen? Würde mich gerne für die gesparte Zeit / HM-Aussentemperaturmelder bedanken?
--------------------------------------------
Raspberrymatic mit 121 Kanäle in 77 Geräten und 32 CUxD-Kanäle in 2 CUxD-Geräten:
3x HM-SCI-3-FM, 2x CUX28, 1x HM-OU-CFM-TW, 1x HM-Sec-SC-2, 3x HM-LC-Sw1-Pl-DN-R1, 10x HM-RC-2-PBU-FM, 13x HM-LC-Dim1TPBU-FM, 8x HM-LC-Sw1PBU-FM, 2x HM-LC-Sw1-Pl-2, 19x HM-LC-Bl1PBU-FM, 2x HM-Sec-TiS, 1x HM-PB-2-WM55-2, 1x HM-WDS40-TH-I-2, 1x HM-LC-Sw1-Pl-CT-R1, 1x HM-Sen-MDIR-O-2, 2x HM-Sec-SCo, 3x HM-Sec-SD-2, 4x HM-Sec-SD, 1x HM-Sec-SD-2-Team, 1x HM-Sec-SD-Team
--------------------------------------------

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Wert per WGET abfragen und in Variable schreiben

Beitrag von alchy » 21.02.2018, 20:53

ship hat geschrieben:Klappt natürlich
Naja, auch ein blindes Huhn findet manchmal ein Korn :mrgreen:

Im Setup die Variable noch angeben.

Code: Alles auswählen

! Heizung  Ecotouch Wert per WGET abfragen und in Variable speichern für ship
! v 0.2 (c) by Alchy 

Teste es mal, ob das so funktioniert und poste die JSON Rückgabe, wenn was nicht geht.

Alchy
Zuletzt geändert von alchy am 21.02.2018, 22:37, insgesamt 1-mal geändert.
Grund: Scriptcopy gelöscht

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

ship
Beiträge: 21
Registriert: 19.06.2017, 12:46

Re: Wert per WGET abfragen und in Variable schreiben

Beitrag von ship » 21.02.2018, 21:41

Klappt alles! Vielen, vielen Dank für deine Mühe und Respekt, dass es "im Blindflug" direkt beim ersten Versuch klappt!
Hiermit hast du mir quasi den HM-Aussentempsensor geschenkt! :D :D
Wenn ich mich erkenntlich zeigen kann, sag mir gerne Bescheid!
--------------------------------------------
Raspberrymatic mit 121 Kanäle in 77 Geräten und 32 CUxD-Kanäle in 2 CUxD-Geräten:
3x HM-SCI-3-FM, 2x CUX28, 1x HM-OU-CFM-TW, 1x HM-Sec-SC-2, 3x HM-LC-Sw1-Pl-DN-R1, 10x HM-RC-2-PBU-FM, 13x HM-LC-Dim1TPBU-FM, 8x HM-LC-Sw1PBU-FM, 2x HM-LC-Sw1-Pl-2, 19x HM-LC-Bl1PBU-FM, 2x HM-Sec-TiS, 1x HM-PB-2-WM55-2, 1x HM-WDS40-TH-I-2, 1x HM-LC-Sw1-Pl-CT-R1, 1x HM-Sen-MDIR-O-2, 2x HM-Sec-SCo, 3x HM-Sec-SD-2, 4x HM-Sec-SD, 1x HM-Sec-SD-2-Team, 1x HM-Sec-SD-Team
--------------------------------------------

DerJoey
Beiträge: 8
Registriert: 04.03.2015, 23:18

Re: Wert per WGET abfragen und in Variable schreiben

Beitrag von DerJoey » 25.05.2019, 13:06

ship hat geschrieben:
21.02.2018, 19:41
kannst du mir dann noch sagen, wie ich die "17" am Ende der Rückgabe als eine "1.7" (aktuelle Temperatur) ausschneide? Als Hinweis, die negative Temperatur wird bspw. wie folgt ausgegeben

Code: Alles auswählen

#A1   S_OK
192   -20
Hast du das Umwandeln in eine Fließkommanzahl hinbekommen? Wenn ja, dürfte ich fragen wie?

Viele Dank im voraus und viele Grüße,

Joachim

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“