Ich habe folgendes Problem:
Wenn ich in einem beliebigem Browser
http://172.16.15.77/cm?cmnd=irsend {"protocol": "NEC", "bits": 32, "data": 0x20DF10EF}
öffne wird der Befehl von meinem Tasmota IR Device problemlos ausgeführt.
Von der FHEM console habe ich ein Problem:
{system ("/usr/bin/wget -O /dev/null -q 'http://172.16.15.77/cm?cmnd=irsend {'protocol': 'NEC', 'bits' 32, 'data': 0x20DF10EF}'") }
endet immer mit einem
19:15:59 MQT: stat/tasmota/RESULT = {"IRSend":"Invalid JSON"} auf der Tasmota console.
Das heißt der Teil der hinter dem IRSend kommt wird nicht richtig rüber geschickt.
Ich weiß das es wohl ein Syntax/Escape Problem sein wird, habe auch schon 2 Tage gegoogelt und gelesen und komme einfach nicht weiter.
Ich hoffe jemand kann helfen, danke Klaus
Hallo Klaus,
versuch's mal mit folgendem in der Fhem-Console, allerdings ungetestet, da ich deine spezifische Anwendung nicht habe:
"wget -qO /dev/null http://172.16.15.77/cm?cmnd=irsend {"protocol": "NEC", "bits": 32, "data": 0x20DF10EF}&"
(mit Anführungszeichen eingeben)
Heute hatte ich wegen eines Perl Warnings bei einer geschweiften Klammer folgenden Rat bekommen, der in meinem Fall geholfen hat.
Anscheinend muss man die 1. geschweifte Klammer escapen durch "\{" anstelle von "{".
Ob's in deinem Fall hilft, weiß ich nicht, aber außer, dass es nicht geht, wird wohl hoffentlich nicht viel passieren.
Viele Grüße Gisbert
Hi Gisbert
vielen Dank, das Resultat ist nun:
stat/tasmota/RESULT = {"IRSend":"No Bits or Data"}
also ein Schritt in die richtige Richtung!
In JSON muessen Strings in " eingeschlossen werden (im Gegensatz zu JavaScript, wo auch ' erlaubt ist):
{system ('/usr/bin/wget -O /dev/null -q \'http://172.16.15.77/cm?cmnd=irsend {"protocol": "NEC", "bits":32, "data":0x20DF10EF}\'') }
{system(...)} ist in FHEM verpoent, weil sie FHEM blockiert.
"..." ist besser, weil FHEM den Befehl ... im Hintergrund startet (& ist unnoetig)
Gisberts Beispiel ohne & funktioniert (mit & gibt es ein Syntax error vom shell), aber nur weil der FHEM Parser "doof" ist, und " nur am Anfang und Ende prueft.
Ich wuerde die FHEM Funktion verwenden:{ HttpUtils_NonblockingGet({url=>'http://172.16.15.77/cm?cmnd=irsend {"protocol": "NEC", "bits":32, "data":0x20DF10EF}', callback=>sub(){}}) }
Hallo Rudolf,
habe:
{ HttpUtils_NonblockingGet({url=>'http://172.16.15.77/cm?cmnd=irsend {"protocol": "NEC", "bits":32, "data":0x20DF10EF}', callback=>sub(){}}) }
probiert aber:
stat/tasmota/RESULT = {"IRSend":"No Bits or Data"}
Ich gehe davon aus, dass der Empfaenger kein JSON5 unterstuetzt, und deswegen muss dein hex Zahl als String gesendet werden.
Also ... "data":"0x20DF10EF"...
Widerspricht der Theorie, dass mit dem ersten wget es funktioniert hat.
nee tut's nicht.
Wie gesagt:
http://172.16.15.77/cm?cmnd=irsend {"protocol": "NEC", "bits": 32, "data": 0x20DF10EF}
funktioniert aus jedem Browser
Es scheint mir also die Frage wie man
{"protocol": "NEC", "bits": 32, "data": 0x20DF10EF}
so "verpackt" das es beim Empfänger richtig ankommt.
es geht jetzt:
"wget -qO /dev/null 'http://172.16.15.77/cm?cmnd=irsend {"protocol": "NEC", "bits": 32, "data": 0x20DF10EF}'"
Danke für eure Hilfe Klaus