NEWS
Roth Touchline HTTP Request
-
Hallo,
ich versuche mich gerade an IOBROKER und habe eine Problem, dass ich meinen ROTH Touchline Heizkreisverteiler nicht eingebunden bekomme. Das Gerät hat einen integrierten Webserver und befindet sich wie der IOBROKER in meinem Heimnetzwerk. Die Temperaturwerte und Kanalnamen lassen sie über einen HTTP POST Request z.B. über FHEM oder auch als CURL erfolgreich abrufen.
Das sieht dann wie folgt aus:
Request POST /cgi-bin/ILRReadValues.cgi HTTP/1.1 Accept-Language: * Content-Type: text/xml User-Agent: SpiderControl/1.0 (iniNet-Solutions GmbH) Cache-Control: no-cache Pragma: no-cache Host: 192.168.178.xx Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Proxy-Connection: keep-alive Content-Length: 812 <body><version>1.0</version><client>IMaster6_21_00</client><client_ver>6.21.0014</client_ver><file_name>roomsovw</file_name><item_list_size>25</item_list_size><item_list><i><n>G1.name</n></i><i><n>G3.TempSIUnit</n></i><i><n>totalNumberOfDevices</n></i><i><n>G0.TempSIUnit</n></i><i><n>G1.RaumTemp</n></i><i><n>CD.upass</n></i><i><n>G2.name</n></i><i><n>G4.TempSIUnit</n></i><i><n>G1.TempSIUnit</n></i><i><n>G3.name</n></i><i><n>G4.RaumTemp</n></i><i><n>G3.WeekProg</n></i><i><n>G4.name</n></i><i><n>G2.WeekProg</n></i><i><n>G2.RaumTemp</n></i><i><n>G0.WeekProg</n></i><i><n>R0.Taupunkt</n></i><i><n>G0.RaumTemp</n></i><i><n>G4.WeekProg</n></i><i><n>R0.Safety</n></i><i><n>G2.TempSIUnit</n></i><i><n>G3.RaumTemp</n></i><i><n>G0.name</n></i><i><n>R0.SystemStatus</n></i><i><n>G1.WeekProg</n></i></item_list></body> Response HTTP/1.1 200 OK Server: Keil-EWEB/2.1 Content-Type: text/html Cache-Control: no-cache Connection: close <body><version>1.0</version><client>IMaster6_21_00</client><client_ver>6.21.0014</client_ver><file_name>roomsovw</file_name><item_list_size>25</item_list_size><item_list><i><n>G1.name</n><v>Gäste WC</v></i><i><n>G3.TempSIUnit</n><v>0</v></i><i><n>totalNumberOfDevices</n><v>5</v></i><i><n>G0.TempSIUnit</n><v>0</v></i><i><n>G1.RaumTemp</n><v>1879</v></i><i><n>CD.upass</n><v>1234</v></i><i><n>G2.name</n><v>Diele</v></i><i><n>G4.TempSIUnit</n><v>0</v></i><i><n>G1.TempSIUnit</n><v>0</v></i><i><n>G3.name</n><v>Küche</v></i><i><n>G4.RaumTemp</n><v>2026</v></i><i><n>G3.WeekProg</n><v>1</v></i><i><n>G4.name</n><v>Büro</v></i><i><n>G2.WeekProg</n><v>1</v></i><i><n>G2.RaumTemp</n><v>2069</v></i><i><n>G0.WeekProg</n><v>1</v></i><i><n>R0.Taupunkt</n><v>0</v></i><i><n>G0.RaumTemp</n><v>2265</v></i><i><n>G4.WeekProg</n><v>1</v></i><i><n>R0.Safety</n><v>0</v></i><i><n>G2.TempSIUnit</n><v>0</v></i><i><n>G3.RaumTemp</n><v>2111</v></i><i><n>G0.name</n><v>Wohnzimmer</v></i><i><n>R0.SystemStatus</n><v>0</v></i><i><n>G1.WeekProg</n><v>1</v></i></item_list></body>
Meine funktionierende CURL Abfrage sieht so aus:
curl -s -k -X 'POST' -H 'Content-Type: text/xml' --data-binary $'<body><item_list><i><n>G0.RaumTemp</n></i></item_list></body>' "http://192.168.XX.XX/cgi-bin/ILRReadValues.cgi"
und liefert den Temperaturwert G0 z.B. als Zahlenwert 2050 für 20,5°C zurück.
Nun versuche ich das irgendwie im IOBROKER hinzubekommen
-
Erfolglose Idee war das über ein BLOCKY script mit dem Web-Request Block zu machen. Hier scheint aber wohl nur die Methode GET vorgesehen zu sein.
-
Versuch war dann meine CURL Abfrage in ein POST Request per JAVAscript wie folgt umzusetzen.
schedule({minute: [00,1]}, RothTemperatur_G0); function RothTemperatur_G0() { var xhr = new XMLHttpRequest(); xhr.open("POST", http://192.168.178.xx/cgi-bin/ILRReadValues.cgi";); xhr.setRequestHeader("Content-Type:", "text/xml"); var data = "$<body><item_list><i><n>G0.RaumTemp</n></i></item_list></body>"; xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // Zustand 4 = Übertragung erfolgreich abgeschlossen console.log(xhr.status); console.log(xhr.responseText); }}; xhr.send(data); xhr.onload = function() { let result.G0.Out = xhr.responseText ; setState("Temperaturanzeige.state", result.G0.Out); }
Das Script wird auch Zeitgesteuert ausgeführt allerding werden keine Daten übertragen und auch kein Status oder Response Text im IOBROKER Logfile hinterlegt, so das der angefragte Webserver gar nicht antwortet.
Schöne Grüße
Herry
-