Seite 1 von 2

Probleme mit CURL Befehl

Verfasst: 21.01.2018, 09:18
von Accuracy
Hi Leute,

ich bekomme im Sktipteditor immer eine Fehlermeldung bei folgendem CURL Befehl in meinem Skript:

Code: Alles auswählen

dom.GetObject('CUxD.CUX2801001:1.CMD_EXEC').State('LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -H "Content-Type: application/json" -X PUT -d '{"on":false}' http://192.168.1.45/api/meineAPI/sensors/25B2A128B-2B22-48DD-5FA9-91A3F02D/config');
Es scheint an den Gänsefüßchen zu liegen.

Der Fehler ist wie folgt:

Code: Alles auswählen

Error 1 at row 1 col 312 near ^"on":false}' http://192.168.1.45/api/meineAPI/sensors/...
Parse following code failed:
dom.GetObject('CUxD.CUX2801001:1.CMD_EXEC').State('LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -H "Content-Type: application/json" -X PUT -d '{"on":false}' http://192.168.1.45/api/
Wenn ich die ' Gänsefüßchen rausnehme, dann ist der Fehler weg aber das Skript wird nicht richtig ausgeführt.

Muss man für CURL ggf. noch was installieren?

vielen Dank schon einmal für Eure Hilfe

Re: Probleme mit CURL Befehl

Verfasst: 21.01.2018, 13:38
von anli
Es liegt daran, dass das Gänsefüßchen den entsprechenden String zu früh „zu macht“. Probiere mal, die einfachen Gänsefüßchen zu escapen, also an den betreffenden Stellen \‘ zu schreiben.

Re: Probleme mit CURL Befehl

Verfasst: 21.01.2018, 14:01
von Accuracy
Du meinst so?

Code: Alles auswählen

dom.GetObject('CUxD.CUX2801001:1.CMD_EXEC').State('LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -H "Content-Type: application/json" -X PUT -d \‘{"on":false}\‘ http://192.168.1.45/api/...
was dann zu folgendem geparsed wird:

Code: Alles auswählen

dom.GetObject('CUxD.CUX2801001:1.CMD_EXEC').State('LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -H "Content-Type: application/json" -X PUT -d \%u2018{"on":false}\%u2018 http://192.168.1.45/api/ ...
Dann ist zwar die Fehlermeldung weg aber das Script scheint nicht zu funktionieren bzw. wird nicht richtig ausgeführt. Irgendwas scheint immer noch nicht zu passen ...
(Ich hatte die einzelne Befehlt in der HUE developer Debugumgebung getestet. Da klappt's ....)

Re: Probleme mit CURL Befehl

Verfasst: 21.01.2018, 16:48
von anli
Schau mal, habe ich eben mit google state anführungszeichen homematic gefunden: viewtopic.php?f=19&t=12512

Re: Probleme mit CURL Befehl

Verfasst: 23.01.2018, 06:59
von Accuracy
Habe den Thread durchgeschaut. Die haben genau das gleich Problem wie ich und empfehlen:

Hatte das Problem bei einer anderen Applikation. CUXD oder verträgt keine Sonderzeichen wie "\n" im String.

Mein Workaround damals:
Mit CUXD ein Shell Script aufrufen (ev. mit Parametern), welches dann den curl-Befehl korrekt aufruft
.

jetzt stellt sich mir die Frage wie mache ich das mit dem Shell Skript Aufruf?

Re: Probleme mit CURL Befehl

Verfasst: 23.01.2018, 08:10
von jmaus
Accuracy hat geschrieben: jetzt stellt sich mir die Frage wie mache ich das mit dem Shell Skript Aufruf?
Ohne das ich es probiert habe sollte folgender system.Exec() Aufruf prinzipiell funktionieren:

Code: Alles auswählen

string stdout;
string stderr;
system.Exec("LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -H \"Content-Type: application/json\" -X PUT -d '{\"on\":false}' http://192.168.1.45/api/meineAPI/sensors/25B2A128B-2B22-48DD-5FA9-91A3F02D/config", &stdout, &stderr);
Und wenn du eine RaspberryMatic verwendest kann es sogar so aussehen:

Code: Alles auswählen

string stdout;
string stderr;
system.Exec("curl -H \"Content-Type: application/json\" -X PUT -d '{\"on\":false}' http://192.168.1.45/api/meineAPI/sensors/25B2A128B-2B22-48DD-5FA9-91A3F02D/config", &stdout, &stderr);
Und wenn das nur ein reiner Aufruf ist ohne das du die Ausgabe des curl Befehles brauchst dann kann es noch weiter verkürzt werden:

Code: Alles auswählen

system.Exec("curl -H \"Content-Type: application/json\" -X PUT -d '{\"on\":false}' http://192.168.1.45/api/meineAPI/sensors/25B2A128B-2B22-48DD-5FA9-91A3F02D/config &");

Re: Probleme mit CURL Befehl

Verfasst: 23.01.2018, 15:50
von Accuracy
danke für die schnelle Antwort. Ich nutze eigentich keine System.Exec Befehle mehr, sondern CuxD.
Gibts das auch für CuxD?

Re: Probleme mit CURL Befehl

Verfasst: 23.01.2018, 17:15
von jmaus
Accuracy hat geschrieben:danke für die schnelle Antwort. Ich nutze eigentich keine System.Exec Befehle mehr, sondern CuxD.
Gibts das auch für CuxD?
Warum? Gerade mit neuesten CCU2 Firmwares gibt es keinerlei Grund mehr warum man system.Exec() nicht nutzen sollte. Es ist leider ein weit verbreiteter Irrglaube das system.Exec() Probleme macht. Das war in der Stärke noch nie so und seit neuesten CCU2 Firmwares mit ReGaHss Community+Standard hat man auch ein system.Exec() an der Hand das CUxD nicht mehr vermissen lässt.

Re: Probleme mit CURL Befehl

Verfasst: 23.01.2018, 20:51
von Akwak
Hallo Jens,
das ist schön zu hören, das System.Exec jetzt auch nichtblockierend Befehle ausführt und den Task bei zu langer Laufzeit abbricht.
Gruss,
Alfred

Re: Probleme mit CURL Befehl

Verfasst: 23.01.2018, 21:09
von jmaus
Akwak hat geschrieben: das ist schön zu hören, das System.Exec jetzt auch nichtblockierend Befehle ausführt und den Task bei zu langer Laufzeit abbricht.
Letzteres ist zwar nicht so, aber das sollte IMHO nicht wirklich ein großes Problem darstellen, denn wenn man Befehle immer nicht blockierende aufruft dann sollte das die ReGaHss in keinster Weise blockieren.