Könnte sich FHEMWEB in irgendeiner Art und Weise gestört fühlen, wenn man einen Befehl über eine http get URL aufruft und in diesem Aufruf nicht nur die http Header vorhanden sind, sondern auch noch json Content?
2016.08.21 12:11:03.907 4: WEB_192.168.30.145_2805 GET /fhem?cmd=setreading%20ESP02%20Uptime%20328.00&{"module":"ESPEasy","version":"0.1","data":{"ESP":{"version":9,"build":121,"name":"ESP02","sleep":0,"ip":"192.168.30.145"},"SENSOR":{"value0":{"deviceName":"SI","valueName":"Uptime","value":328.00,"type":1},"value1":{},"value2":{}}}}; BUFLEN:0
Um für eine Übergangszeit eine Rückwärtskompatibilität zu bieten, wäre das recht hilfreich. Oder ist das ein no-go?
Ich verstehe nur Bahnhof.
Ich befürchte Du wirst wohl des gesamten url Aufruf codieren müssen. Sprich Sonderzeichen {} , "
Zitat von: rudolfkoenig am 21 August 2016, 13:02:03
Ich verstehe nur Bahnhof.
Ok, der Reihe nach:
Ich habe ein Plugin (https://github.com/ESP8266nu/ESPEasy/blob/master/_C009.ino) für ESPEasy erstellt, dass Sensorwerte über eine URL an FHEM übergeben kann:
http://<fhem>:8083/fhem?cmd=setreading%20device%20reading%20value
Da das recht unflexible ist, habe ich im nächsten Schritt ein zweistufiges Modul (https://github.com/ddtlabs/ESPEasy/blob/develop/FHEM/34_ESPEasy.pm) geschrieben, dass anstatt FHEMWEB von ESPEasy angesprochen wird. Stellt ein Benutzer nun in ESPEasy den Port von FHEMWEB _nicht_ auf mein Modul um, dann ist das auch ok, der alte Mechnismus funktioniert ja weiterhin.
Da die "setreading Syntax" aber auch alles andere als flexible ist, habe ich das ESPEasy Plugin dahin gehend erweitert, dass zusätzlich Daten im json Format übertragen werden. Mein Modul verarbeitet dann nur noch diese Json Daten und alles ist gut. Das funktioniert so weit.
Jetzt kann es aber sein, dass ein Benutzer den Port im ESPEasy-Setup noch nicht von 8083 (FHEMWEB) auf mein Modul geändert hat. Das hat dann zur Folge, dass FHEMWEB weiterhin den "/fhem?cmd=setreading... " Aufruf bekommt
mit Json Daten im Content:
Zitat
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Content-Length: "+ len + "\r\n" +
"Host: " + host + "\r\n" + authHeader +
"Connection: close\r\n\r\n"
+ jsonBuffer);
Da dieser GET Request wohl nicht so ganz den RFCs entspricht, wollte ich mit meiner ursprünglichen Frage klären ob FHEMWEB dadurch eventuell in einer unerwarteten Weise reagieren könnte (crash, ...), da ich nicht sicherstellen kann, dass alle ESPEasy Benutzer den Port in ihrem Setup ändern um das ESPEasy Modul zu verwenden.
Meine Tests haben zwar gezeigt, dass FHEMWEB damit kein Problem hat, aber ich wollte sicherheitshalber doch hier nachfragen, bevor es nachher heißt: "Wie kannst Du nur..." ;)
Ich hoffe, dass war jetzt verständlicher.
Gegen welche RFCs dein Request verstoessen soll, ist mir zwar schleierhaft, aber soweit ich sehe, hat FHEMWEB kein Problem mit einem JSON Inhalt (kann damit auch nichts anfangen), und liefert die normale Eingangsseite als Antwort zurueck. Die GET/POST Parameter werden in FHEMWEB bei & getrennt, und danach in key=value zerteilt. Wenn keys existieren, mit dem FHEMWEB was anfangen kann (wie z.Bsp. cmd), dann passiert was mit value, sonst wird key+value ignoriert.
Danke, ist damit geklärt.