FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Klaus Heynen am 27 Januar 2020, 20:02:51

Titel: Aus FHEM einen URL Befehl senden
Beitrag von: Klaus Heynen am 27 Januar 2020, 20:02:51
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
Titel: Antw:Aus FHEM einen URL Befehl senden
Beitrag von: Gisbert am 27 Januar 2020, 20:22:32
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
Titel: Antw:Aus FHEM einen URL Befehl senden
Beitrag von: Klaus Heynen am 27 Januar 2020, 20:31:32
Hi Gisbert

vielen Dank, das Resultat ist nun:
stat/tasmota/RESULT = {"IRSend":"No Bits or Data"}

also ein Schritt in die richtige Richtung!
Titel: Antw:Aus FHEM einen URL Befehl senden
Beitrag von: rudolfkoenig am 27 Januar 2020, 20:32:32
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(){}}) }
Titel: Antw:Aus FHEM einen URL Befehl senden
Beitrag von: Klaus Heynen am 27 Januar 2020, 20:40:18
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"}
Titel: Antw:Aus FHEM einen URL Befehl senden
Beitrag von: rudolfkoenig am 27 Januar 2020, 21:19:16
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.
Titel: Antw:Aus FHEM einen URL Befehl senden
Beitrag von: Klaus Heynen am 27 Januar 2020, 21:52:56
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.
Titel: Antw:Aus FHEM einen URL Befehl senden
Beitrag von: Klaus Heynen am 27 Januar 2020, 23:19:29
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