FHEM Forum

FHEM => Sonstiges => Thema gestartet von: amenomade am 23 August 2017, 15:20:28

Titel: fhem.pl Kommando auf telnet Port
Beitrag von: amenomade am 23 August 2017, 15:20:28
Ich möchte gern per shell ein Reading setzten, das aber viele Leerzeichen enthält. Wie kann ich es in einem Befehl packen, ohne dass es als mehrere "cmd" interpretiert wird?
perl fhem.pl localhost:7072 "setreading dutest testreading $wert" wo $wert diese mehrere durch Leerzeichen getrennte Wörter enthält, ergibt viele "Unknown command" und nur das erste wird als Reading gesetzt.
Titel: Antw:fhem.pl Kommando auf telnet Port
Beitrag von: betateilchen am 23 August 2017, 15:29:03
Bei mir funktionieren folgende beiden Varianten problemlos:


perl fhem.pl localhost:7072 "setreading dutest testreading wert1 wert2 wert3"
echo "setreading dutest testreading2 wert1 wert2 wert3" |telnet localhost 7072


Beschreibe doch mal etwas genauer, was Du vorhast und wie das shell skript bei Dir aussieht.
Titel: Antw:fhem.pl Kommando auf telnet Port
Beitrag von: amenomade am 23 August 2017, 15:38:00
Naja. Anscheinend sind nicht die Leerzeichen das Problem, sondern Zeilenumbrüche
wert="wert1
wert2
wert3"
perl fhem.pl localhost:7072 "setreading dutest testreading $wert"

Unknown command wert2, try help.
Unknown command wert3, try help.
Titel: Antw:fhem.pl Kommando auf telnet Port
Beitrag von: amenomade am 23 August 2017, 15:39:34
pi@raspberrypi:/opt/fhem $ wert="wert1
> wert2
> wert3"
pi@raspberrypi:/opt/fhem $ echo $wert
wert1 wert2 wert3
pi@raspberrypi:/opt/fhem $ perl fhem.pl localhost:7072 "setreading dutest fhem_text $wert"
Unknown command wert2, try help.
Unknown command wert3, try help.
pi@raspberrypi:/opt/fhem $ ^C
pi@raspberrypi:/opt/fhem $
Titel: Antw:fhem.pl Kommando auf telnet Port
Beitrag von: betateilchen am 23 August 2017, 15:46:55

wert="wert4
wert5
wert6"

echo -E setreading dutest testreading $wert | sed 's/\n/ /g' | telnet localhost 7072
Titel: Antw:fhem.pl Kommando auf telnet Port
Beitrag von: amenomade am 23 August 2017, 15:54:00
Das shell Skript soll die Liste von anstehenden Updates in einem Reading schreiben, wie hier vom User gewünscht: https://forum.fhem.de/index.php/topic,75692.0.html
VORSICHT: nicht machen, da er dann die UPD als Kommandos interpretiert, und startet ein update!

#!/bin/bash
updatesfhem=$(curl -sS http://fhem.de/fhemupdate/controls_fhem.txt| diff - /opt/fhem/FHEM/controls_fhem.txt  |grep "> UPD" )
perl fhem.pl localhost:7072 "setreading dutest FHEM $updatesfhem"


Mit deinem Befehl ersetzt Du aber die Zeilenumbrüche durch Leerzeichen. Nicht so schön, aber vielleicht für den User OK. Werde fragen.
Titel: Antw:fhem.pl Kommando auf telnet Port
Beitrag von: betateilchen am 23 August 2017, 15:57:54
Zitat von: amenomade am 23 August 2017, 15:54:00
VORSICHT: nicht machen, da er dann die UPD als Kommandos interpretiert, und startet ein update!

quatsch.

Zitat von: amenomade am 23 August 2017, 15:54:00
Nicht so schön, aber vielleicht für den User OK. Werde fragen.

Kann der nicht selber fragen ???
Titel: Antw:fhem.pl Kommando auf telnet Port
Beitrag von: amenomade am 23 August 2017, 16:02:13
Quatsch? Probier es dann mal ;) Du bist gewarnt (und hast bestimmt Testinstallationen)

Ich habe mit userReadings und qx(curl...) probiert. Es wird sowieso nicht mit Zeilenumbrüche ins Reading gesetzt. Dann... mal sehen, was der User sagt.