FHEM Forum

FHEM => Sonstiges => Thema gestartet von: alkazaa am 12 September 2023, 19:11:56

Titel: [Gelöst] HTTPMOD: Wie geht set-Befehl mit Aufruf einer php Datei
Beitrag von: alkazaa am 12 September 2023, 19:11:56
Sorry für das kryptische Betreff...

Ich möchte in einem HTTPMOD device den Volumenstrom einer Tecalor-Lüftungsanlage setzen. Ich nutze das device schon länger, um eine ganze Reihe von Daten auszulesen. Nun wollte ich auch einen der Werte per FHEM setzen, den ich bisher immer über das Web-Interface der Anlage gesetzt habe.

Mit BurpSuite habe ich rausgefunden, dass beim Senden des entsprechenden Befehls folgendes gesendet wird:
POST //save.php HTTP/1.1
Host: 192.168.188.35
Content-Length: 361
Accept: text/plain, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.141 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Origin: http://192.168.188.35
Referer: http://192.168.188.35//?s=4,2,2
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: PHPSESSID=277db9c0b03847e79d478e50bd7878b7
Connection: close

data=%5B%7B%22name%22%3A%22val91%22%2C%22value%22%3A%2247%22%7D%5D
Die letzte Zeile würde im Klartext lauten:
[{"name":"val91","value":"47"}]
Erfolglos versucht habe ich folgende Attribute in meinem FHEM device:
attr Tecalor_Anlage set01Data [{"name":"val91","value":"$val"}]
attr Tecalor_Anlage set01Header Content-Type: application/x-www-form-urlencoded
attr Tecalor_Anlage set01Max 300
attr Tecalor_Anlage set01Min 10
attr Tecalor_Anlage set01Name I_Zuluft1
attr Tecalor_Anlage set01URL http://192.168.188.35//?s=4,2,2

Funktioniert nicht, FHEM log (verbose 4):
2023.09.12 19:09:26 4: Tecalor_Anlage: set will now set I_Zuluft1 -> 16
2023.09.12 19:09:26 4: Tecalor_Anlage: HandleSendQueue sends set01 with timeout 2 to http://192.168.188.35//?s=4,2,2,
data: [{"name":"val91","value":"16"}],
header: Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=c587cc052780d1427850f97d354af858
2023.09.12 19:09:27 4: Tecalor_Anlage: Read callback: request type was set01 retry 0,
header: HTTP/1.0 200 OK
Connection: close
X-Powered-By: PHP/5.3.0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Date: Tue, 12 Sep 2023 17:09:20 GMT
Server: lighttpd/1.4.19, body length 24998
2023.09.12 19:09:27 4: Tecalor_Anlage: BodyDecode is not decoding the response body (charset utf-8, bodyDecode set to none)
2023.09.12 19:09:27 4: Tecalor_Anlage: checking for redirects, code=200, ignore=0
2023.09.12 19:09:27 4: Tecalor_Anlage: no redirects to handle

Ich habe keine Ahnung, wie oder wo ich das save.php unterbringen müsste, das in dem BurpSuite Protokoll in der Zeile "POST //save.php HTTP/1.1" auftaucht.

Zusatzinfo:
In dem Webinterface des Geräts, mit dem ich bisher den Wert setze, ist dem Button, den ich klicke, übrigens folgender HTML code hinterlegt:
<div class="button left" onclick="document.forms['werte'].onsubmit();"><div class="bg_r">&nbsp;</div><a>Speichern</a></div>Im BurpSuite-Protokoll taucht das aber nicht auf.
Titel: Aw: HTTPMOD: Wie geht set-Befehl mit Aufruf einer php Datei
Beitrag von: RalfRog am 14 September 2023, 07:45:27
Hattest du schon mal unter der Rubrik
"Heizungssteuerung/Raumklima" geschaut?

Da sind ja einige in Sachen Tecalor unterwegs.
Titel: Aw: HTTPMOD: Wie geht set-Befehl mit Aufruf einer php Datei
Beitrag von: alkazaa am 15 September 2023, 18:04:06
Zitat von: RalfRog am 14 September 2023, 07:45:27Hattest du schon mal unter der Rubrik "Heizungssteuerung/Raumklima" geschaut?
Danke für den Hinweis. Ich glaube aber eher, dass ich nicht weiß, wie ich ein 'set' in HTTPMOD realisieren muss.

Ein bisschen weiter bin ich insofern gekommen, als ich jetzt mit
set01URL = http://192.168.188.35/save.php
wohl immerhin die richtige URL für den set-Aufruf habe.

Wenn ich mit diesen set-Attibuten arbeite:
attr Tecalor_Anlage set01Data [{"name":"val91","value":"$val"}]
attr Tecalor_Anlage set01Name I_Zuluft1
attr Tecalor_Anlage set01ParseResponse 0
attr Tecalor_Anlage set01URL http://192.168.188.35//save.php
attr Tecalor_Anlage setHeader1 Content-Type: application/x-www-form-urlencoded
attr Tecalor_Anlage setHeader2 Referer: http://192.168.188.35//?s=4,2,2
bekomme ich im verbose=5 log immerhin eine Art Bestätigung, das etwas bei dem Gerät angekommen ist:
2023.09.15 17:47:32 5: Tecalor_Anlage: Read callback: body
{"success":true,"message":"Die Einstellungen wurden erfolgreich gespeichert."}
Nur leider entspricht die Behauptung des Geräts ("Die Einstellungen wurden erfolgreich gespeichert.") nicht der Wahrheit, es wurde mitnichten gespeichert-

Ich tappe ziemlich im Dunkeln, was an den set-Attributen noch fehlt.

Titel: Aw: HTTPMOD: Wie geht set-Befehl mit Aufruf einer php Datei
Beitrag von: RalfRog am 16 September 2023, 12:04:25
Zitat von: alkazaa am 15 September 2023, 18:04:06Danke für den Hinweis. Ich glaube aber eher, dass ich nicht weiß, wie ich ein 'set' in HTTPMOD realisieren muss.

Ja war mir klar, dass es ein HTTPMOD Post Problem ist - aber da die Tecalor-Anwender eventuell eine ähnliche Anforderung haben wäre es eventuell ne gute Stelle für ne schnelle Lösung.
Titel: Aw: HTTPMOD: Wie geht set-Befehl mit Aufruf einer php Datei
Beitrag von: alkazaa am 14 Oktober 2023, 13:48:13
LÖSUNG:
Es muss heißen
attr Tecalor_Anlage set01Data data=[{"name":"val91","value":"$val"}]und nicht
attr Tecalor_Anlage set01Data [{"name":"val91","value":"$val"}]