[Gelöst] HTTPMOD: Wie geht set-Befehl mit Aufruf einer php Datei

Begonnen von alkazaa, 12 September 2023, 19:11:56

Vorheriges Thema - Nächstes Thema

alkazaa

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.

RalfRog

Hattest du schon mal unter der Rubrik
"Heizungssteuerung/Raumklima" geschaut?

Da sind ja einige in Sachen Tecalor unterwegs.
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

alkazaa

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.


RalfRog

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.
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

alkazaa

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"}]