Neue Version von HTTPMOD eingecheckt

Begonnen von StefanStrobel, 14 Dezember 2014, 17:55:03

Vorheriges Thema - Nächstes Thema

StefanStrobel

Hallo,

Eine grundlegend überarbeitete und erweiterte Version von HTTPMOD ist nun eingecheckt.

Folgendes ist neu:
Es gibt die Möglichkeit Set-Optionen generisch über Attribute zu erzeugen und so Daten an ein Gerät mit Web-Interface zu senden. Bei einer Heizung, die ein Web-Interface hat, könnte man beispielsweise per
set Heizung TempSoll 22
die Zieltemperatur auf 22 Grad setzen und HTTPMOD macht daraus den passenden HTTP-Request. 
Dazu definiert man Attribute wie:

attr Heizung set01Name TempSoll
attr Heizung set01URL http://MeineHeizung/cgi-bin/webgui.fcgi?sid=$sid
attr Heizung set01Min 15
attr Heizung set01Max 25
attr Heizung setHeader1 Content-Type: application/json
attr Heizung set01Data {"set" :{"34.3118.value" :"$val" }}


Damit das ganze auch funktioniert wenn das Web-Interface eine Session-Id und ein Login benötigt und nicht mit Basic-Auth o.ä. zufrieden ist, gibt es die Möglichkeit mehrere HTTP-Requests für die Login-Prozedur über Attribute zu definieren.
Beispiel:

attr Heizung sidURL http://MeineHeizung/index.cgi
attr Heizung sid1Data username=Oeko&password=MeinGeheimesPasswort&language=de&submit=Anmelden
attr Heizung sid1Header1 Accept-Language: de
attr Heizung sid1IDRegex pksession=([0-9]+);

In diesem Beispiel werden Name und Passwort wie beim Ausfüllen des entsprechenden Formulars an den Server gesendet. In der Antwort vom Server wird dann ein Session-Cookie gesetzt, das mit der sid1Regex extrahiert wird und in späteren Requests als $sid verwendet werden kann, z.B. in einem Set:

attr Heizung set01Header2 Cookie: pksession=$sid


oder wenn man in einem anderen Beispiel mehrere Schritte zum Anmelden benötigt:

attr Heizung sidURL http://MeineHeizung/cgi-bin/webgui.fcgi?sid=$sid
attr Heizung sidHeader1 Content-Type: application/json
attr Heizung sid1IDRegex wui.init\('([^']+)'
attr Heizung sid2Data {"set" :{"9.17401.user" :"fhem" ,"9.17401.pass" :"password" }}
attr Heizung sid3Data {"set" :{"35.5062.value" :"128" }}
attr Heizung sid4Data {"set" :{"42.8026.code" :"pincode" }}


In diesem Beispiel werden 4 Schritte durchlaufen, bis eine gültige Session-Id existiert. Die URL und die HTTP-Header gelten in diesem Beispiel für alle 4 Schritte, sie könnten aber auch für jeden Schritte separat angegeben werden (sid1URL, sid2URL etc.).
Im ersten Schritt in diesem Beispiel wird die neue Session Id mit der sid1Regex extrahiert und in den folgenden Schritte authentisiert und autorisiert.

Damit das mit dem Login und den Sets auch ohne Blockieren funktioniert, verwendet das neue HTTPMOD eine Send-Queue, die per Internal-Timer schrittweise abgearbeitet wird.

Weitere Details in der Doku bzw. im Wiki.

Gruss
   Stefan