Problem mit notify und curl

Begonnen von JF79, 30 April 2022, 15:08:22

Vorheriges Thema - Nächstes Thema

JF79

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

Otto123

#1
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

Was mir nur nicht klar ist, welche "" Verwendet jetzt FHEM als Kommandodefinition?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Otto123

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""
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

Hep ... hatte ich mittlerweile auch gesehen ...

Wie immer, Du bist gut  8)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

JF79

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...

Otto123

#6
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"
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

JF79

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

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

In die Richtung habe ich auch schon gedacht
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html