Hallo zusammen,
ich nutze ein notify um die Daten meiner Wärmepumpe (LUXTRONIK2 Modul) an NodeRED per Curl weiterzusenden.
Mit den einzelnen Readings klappt das sehr gut. Leider gelingt es mir mit dem "state" nicht richtig.
Der aktuelle State der Wärmepumpe lautet: "Wärmepumpe steht seit 01:00:37 - Keine Anforderung"
So funktioniert es:
LWC80:state:.* "curl -s http://192.168.1.120:1880/lwctest?$EVTPART0=$EVTPART1=$EVTPART2=$EVTPART3=$EVTPART4=$EVTPART5=$EVTPART6=$EVTPART7=$EVTPART8=$EVTPART9"
Wenn ich jedoch das ganze $EVENT weiterreichen möchte geht es nicht:
LWC80:state:.* "curl -s http://192.168.1.120:1880/lwctest?$EVENT"
Laut Log liegt das Curl-Problem wohl an dem Zeichen "-" im aktuellen state:
Zitatcurl: option -: is unknown
Curl interpretiert den Text nach "-" wohl als Parameter (den es logischerweise nicht gibt).
Wie kann ich im String des states das "-" ersetzen oder löschen?
Viele Grüße
Josh
Hi,
probier mal
LWC80:state:.* "curl -s "http://192.168.1.120:1880/lwctest?$EVENT""
Das könnte auch gehen. siehe https://fhem.de/commandref_modular_DE.html#command
Wobei eventuell die ganzen Leerzeichen das Problem darstellen, die müsstest Du korrekterweise "url encoden".
Stichwort curl --data-urlencode also eventuell einfach den curl Befehl modifizieren. Eventuell so
LWC80:state:.* "curl -s --data-urlencode "$EVENT" http://192.168.1.120:1880/lwctest"
Gruß Otto
Was mir nur nicht klar ist, welche "" Verwendet jetzt FHEM als Kommandodefinition?
die äußeren, die inneren behält FHEM offenbar bei. So steht es zumindest auch als Beispiel in der commandref: "fhem.pl 7072 "set lamp off""
Hep ... hatte ich mittlerweile auch gesehen ...
Wie immer, Du bist gut 8)
Zitat von: Otto123 am 30 April 2022, 15:43:50
Hi,
probier mal
LWC80:state:.* "curl -s "http://192.168.1.120:1880/lwctest?$EVENT""
Das könnte auch gehen. siehe https://fhem.de/commandref_modular_DE.html#command
Wobei eventuell die ganzen Leerzeichen das Problem darstellen, die müsstest Du korrekterweise "url encoden".
Stichwort curl --data-urlencode also eventuell einfach den curl Befehl modifizieren. Eventuell so
LWC80:state:.* "curl -s --data-urlencode "$EVENT" http://192.168.1.120:1880/lwctest"
Gruß Otto
Hallo,
vielen Dank für deine Tipps. Ich habe beide Varianten probiert. Leider lösen sie das Problem nicht. Es kommt nach wie vor folgende Fehlermeldung im Log:
Zitatcurl: option -: is unknown
Gibt es eine Möglichkeit das Minus ("-") im $EVENT zu ersetzen?
Als Anfänger hätte ich bspw. an so etwas gedacht:
LWC80:state:.* "curl http://192.168.1.120:1880/lwctest { my $string = $EVENT; $string =~ tr/-/ /; return $string }
Durch
$string =~ tr/-/ /
sollte ja "-" durch ein Leerzeichen ersetzt werden...
Wenn ich einen online urlencoder bemühe, sieht Dein String so aus:
W%C3%A4rmepumpe%20steht%20seit%2001%3A00%3A37%20-%20Keine%20Anforderung
Der Bindestrich ist nicht das Problem. ;) die Fehlermeldung ist ein "falscher" Hinweis
Wir müssen die Anführungszeichen wirklich bis zum curl Befehl erhalten!
Versuch mal das:
LWC80:state:.* "curl -s --data-urlencode \"$EVENT\" http://192.168.1.120:1880/lwctest"
Danke für deine Hilfe. Leider kam ich nicht weiter. Ich habe das ganze jetzt mit mqtt Publish gelöst. Damit funktioniert es einwandfrei.
Viele Grüße Josh
Hallo Josh,
das ist mit Sicherheit die bessere Lösung. :D
Trotzdem habe ich mal noch etwas getestet - ohne NodeRed mit einer zweiten Maschine und netcat
netcat -l 1880
Was ohne Fehler in der Linux Shell funktioniert:
EVENT="Wärmepumpe steht seit 01:00:37 - Keine Anforderung"
curl -s "http://raspib2:1880/lwctest?$EVENT"
Die Anführungszeichen um die URL sind wichtig, ansonsten kommt der Fehler wie bei Dir.
Alle meine Versuche waren ziemlich erfolglos, deshalb habe ich ein Script gemacht. Damit umgeht man komplizierte und undurchsichtige Konstrukte beim Aufruf.
Das Script in der FHEM Kommandozeile schreiben:
{FileWrite("script1.sh","curl -s \"http://\$1:1880/lwctest?\$2\"")}
Das notify funktioniert dann so:
LWC80:state:.* "bash script1.sh 192.168.1.120 "$EVENT""
Gruß Otto
In die Richtung habe ich auch schon gedacht