Hallo Zusammen,
Ich will den Status eines Devices an eine REST-API via CURL übermitteln. Leider wird mir bei meinem Notify mein $EVENT nicht ausgewertet.
Im Service (Amazon AWS) kommt ein tatsächliches "$EVENT" an. Statt der eigentliche Status.
Folgendes Notify funktioniert nicht.
define MyNotify notify testDummy "curl -X POST https://xxxxxxxxx.execute-api.eu-west-1.amazonaws.com/dev/TestDeviceUpdate -H 'cache-control: no-cache' -H 'postman-token: xxxxxxxx-yyyy-yyyy-7166-66db09070a70' -H 'x-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' -d '{ "TableName": "MyTableName", "Item": { "online": false, "status": "$EVENT", "DeviceName": "PushTest" } }' &"
Dieses Test-Notify funktioneirt aber (Hier wird $EVENT umgesetzt, mit dem Status des Devices auf das das Notify reagiert
define MyNotify notify testDummy "curl -s -S "192.168.53.11:8083/fhem?cmd.TV=set%20testDummy2%20$EVENT &" "
Wo ist der Unterschied frag ich mich :-|.....
Viele Grüße
Stefan
Hallo Stefan,
laut https://fhem.de/commandref_DE.html#command kannst Du Dir das & am Ende sparen.
Mir ist das mit den verschachtelten " immer zu stressig. Ich würde die lange Zeile in eine Scriptdatei auslagern und $EVENT als Parameter übergeben.
Innerhalb von den einfachen ' ' werden keine Variablen aufgelöst.
-> https://de.wikibooks.org/wiki/Perl-Programmierung:_Variablen
Gruß Otto
Zitat von: SwordMaster am 14 August 2017, 22:20:42
Hallo Zusammen,
Ich will den Status eines Devices an eine REST-API via CURL übermitteln. Leider wird mir bei meinem Notify mein $EVENT nicht ausgewertet.
Im Service (Amazon AWS) kommt ein tatsächliches "$EVENT" an. Statt der eigentliche Status.
Folgendes Notify funktioniert nicht.
define MyNotify notify testDummy "curl -X POST https://xxxxxxxxx.execute-api.eu-west-1.amazonaws.com/dev/TestDeviceUpdate -H 'cache-control: no-cache' -H 'postman-token: xxxxxxxx-yyyy-yyyy-7166-66db09070a70' -H 'x-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' -d '{ "TableName": "MyTableName", "Item": { "online": false, "status": "$EVENT", "DeviceName": "PushTest" } }' &"
Dieses Test-Notify funktioneirt aber (Hier wird $EVENT umgesetzt, mit dem Status des Devices auf das das Notify reagiert
define MyNotify notify testDummy "curl -s -S "192.168.53.11:8083/fhem?cmd.TV=set%20testDummy2%20$EVENT &" "
Wo ist der Unterschied frag ich mich :-|.....
Viele Grüße
Stefan
Weil das in einfachen Hochkommas liegt und somit nicht die Variable befüllt wird (wie Otto schon schrieb).
Probier mal:
define MyNotify notify testDummy "curl -X POST https://xxxxxxxxx.execute-api.eu-west-1.amazonaws.com/dev/TestDeviceUpdate -H 'cache-control: no-cache' -H 'postman-token: xxxxxxxx-yyyy-yyyy-7166-66db09070a70' -H 'x-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' -d '{ "TableName": "MyTableName", "Item": { "online": false, "status": "'.$EVENT.'", "DeviceName": "PushTest" } }' &"
Gruß
Dan
Hallo ihr zwei,
Vielen Dank für die nützlichen Tipps.
@Otto: Mit dem Auslagern hast recht. Werd ich vermutlich machen.
@DeeSPe: Danke für die Verbesserung. Deine Lösung hat fast funktioniert. Aber es kam .on. im Service an.
Die Punkte um $EVENT bei deinem Vorschlag hab ich jetzt rausgenommen. Jetzt gehts.
Vielen Dank für die schnellen Antworten!!!
Das Forum ist immer wieder klasse.
Viele Grüße
Stefan