FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: suchmich1983 am 29 August 2021, 20:36:25

Titel: [Gelöst] Fhem Shell Script via Kommandozeile starten
Beitrag von: suchmich1983 am 29 August 2021, 20:36:25
Hi,

ich stehe "mal wieder" total auf dem Schlauch. Auch die Suche hat mir nicht geholfen:

Ich würde gerne ein Shell Script aus der FHEM Kommandozeile starten. Später dann auch via Dummy, allerdings will es schon in der FHEM Kommandozeile nicht klappen.
Hier meine verwendete Syntax:

{system "sudo sh /opt/fhem/hdmi2.sh"}

Allerdings kommt im WebIf dann als Rückgabe immer nur -1 und das Shellscript wird nicht ausgeführt.
Im Log steht nichts, allerdings kann ich das Shellscript in der Shell selbst mit dem Benutzer unter dem auch FHEM läuft einwandfrei starten.  ???

Mein Shell Script sendet prinzipiell nur HEX Werte an meinen Sony Beamer via Netzwerk:

Zitatprintf "\x02\x0ASONY\x00\x17\x2b\x02\x00\x00" | nc  192.168.178.39 53484

Kann mir jemand nen Tipp geben? k.A. obs am Shellscript liegt oder irgendwo ein Escapecharacter fehlt oder sowas.
Ich würde auch ein anderes Modul nehmen was HEX werte an IP/Ports senden kann, bin bisher aber nicht fündig geworden.

Danke und LG


EDIT:

nach vielem hin und her lag es dann tatsächlich daran, dass in den Scripts kein "shebang" angegeben war. siehe auch: https://wiki.ubuntuusers.de/Shebang_f%C3%BCr_Shellskripte/ (https://wiki.ubuntuusers.de/Shebang_f%C3%BCr_Shellskripte/)
Fügt man diese an den Anfang des Scripts hinzu funktioniert genau wie erwartet!

Also ausführen des Scripts in FHEM Kommandozeile ganz simpel via:
"/opt/fhem/hdmi1.sh"
Und das Script sieht dann so aus:

#!/bin/bash
echo -n -e "\x02\x0ASONY\x00\x17\x2b\x02\x00\x00" | nc  192.168.178.39 53484 #HDMI1


Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: Otto123 am 29 August 2021, 20:54:28
Hi,

system() liefert nur -1 als Quittung - das ist normal so. Die Standard Ausgabe des Scripts landet im LogFile.
Wozu nimmst Du sudo?

Funktioniert das in der FHEM Kommandzeile?
"sh /opt/fhem/hdmi2.sh"
die " " gehören dazu!

Siehe https://fhem.de/commandref_DE.html#command

Gruß Otto
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: suchmich1983 am 30 August 2021, 09:40:07
Hi Otto,

danke für deine Hilfe!

ZitatWozu nimmst Du sudo?
Das war auch nur ein Versuch weil ich dachte es habe etwas mit "Berechtigungen" zu tun. Fehlanzeige.

Wenn ich das so ausführe wie in deinem Beispiel steht im Log nur folgendes:
\x0\x

Sieht für mich so aus als würde da was abgeschnitten. Vielleicht doch Escapecharacter einfügen?
So ähnlich wie in deinem Blogpost beschrieben? https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html

ZitatIm folgenden Beispiel muss der Name der Variable im Shellscript auch geschützt werden.
Im Zweifelsfall hilft nur probieren!

Danke und Grüße
Christian
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: Otto123 am 30 August 2021, 10:13:36
Hallo Christian,

kann ich nicht nachvollziehen :(
Ich habe genau Deinen Befehl in eine Scriptdatei gepackt und lausche auf einem anderen Host mit nc -l
raspib Datei tt.sh:
printf "\x02\x0ASONY\x00\x17\x2b\x02\x00\x00"|nc raspib3plus 4000
raspib3plus in der Konsole
nc -l 4000
In der Kommandozeile von FHEM von raspib
"sh /home/pi/tt.sh"
Ausgabe in der Konsole von raspib3plus
\x02\x0ASONY\x00\x17\x2b\x02\x00\x00
im Log landet da nichts.
Ok in meinem Beispiel wird erstmal die Verbindung nicht geschlossen. Wenn ich auf dem raspib3plus mit "willi & ctrl+c" schließe, landet "willi" im Log von raspib.

Würde in deinem Fall bedeuten: Dein receiver quittiert mit \x0\x ???

Gruß Otto
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: suchmich1983 am 30 August 2021, 10:18:33
Hi,

danke dir fürs Testen!

Ich verstehe es auch nicht. Zumal es via Shell direkt einwandfrei klappt!

Je nachdem ob ich "" oder '' verwende steht auch mal mehr und mal weniger im Log:
02\xAS
\x0\x

Deswegen war meine Vermutung es liegt irgendwie am Escaping... :(
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: suchmich1983 am 30 August 2021, 12:37:51
ich verstehe nicht, wieso der Befehl in der LINUX Shell so einwandfrei funktioniert und in der FHEM Kommandozeile nicht.

Power ON:
echo -n -e "\x02\x0ASONY\x00\x17\x2F\x02\x00\x00" | nc  192.168.178.39 53484
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: MadMax-FHEM am 30 August 2021, 12:40:55
Zitat von: suchmich1983 am 30 August 2021, 12:37:51
ich verstehe nicht, wieso der Befehl in der LINUX Shell so einwandfrei funktioniert und in der FHEM Kommandozeile nicht.

Power ON:
echo -n -e "\x02\x0ASONY\x00\x17\x2F\x02\x00\x00" | nc  192.168.178.39 53484

Wie hast du das denn in FHEMWeb eingegeben?


"echo -n -e \"\x02\x0ASONY\x00\x17\x2F\x02\x00\x00\" | nc  192.168.178.39 53484"

bzw.:

"echo -n -e '\x02\x0ASONY\x00\x17\x2F\x02\x00\x00' | nc  192.168.178.39 53484"


Oder meinst du im Vergleich zum Script? Weil das weicht ja von deinem Script ab...

EDIT: wobei ich jetzt nicht weiß, ob "Pipes" in FHEMWeb "gehen"...

Gruß, Joachim
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: Otto123 am 30 August 2021, 12:47:03
Zitat von: MadMax-FHEM am 30 August 2021, 12:40:55

EDIT: wobei ich jetzt nicht weiß, ob "Pipes" in FHEMWeb "gehen"...
Die gehen nicht!

Deswegen ja, der Aufruf des Shellscripts muss eigentlich gehen, der printf oder echo Befehl mit Pipe direkt in der FHEM Kommandozeile geht nicht.
Die FHEM Kommandozeile ist eben keine Linux Shell Konsole :)
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: MadMax-FHEM am 30 August 2021, 13:06:04
Zitat von: Otto123 am 30 August 2021, 12:47:03
Die gehen nicht!

Deswegen ja, der Aufruf des Shellscripts muss eigentlich gehen, der printf oder echo Befehl mit Pipe direkt in der FHEM Kommandozeile geht nicht.
Die FHEM Kommandozeile ist eben keine Linux Shell Konsole :)

Danke.
Ich wusste doch da "war was" ;)

Gruß, Joachim
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: Otto123 am 30 August 2021, 13:13:11
also ich will das nicht Oberlehrerhaft behaupten, aber bei mir ging es bisher "so einfach" nicht. Ich habe aber eventuell auch noch nicht alles in diesem System verstanden. Rudi meinte seinerzeit mal: es sollte eigentlich gehen, er hatte keine Erklärung dafür.
Deswegen in meinem Kopf: einfache shell Befehle direkt absetzen, sobald die Umleitung sein muss, oder die Sache ein bisschen länger wird, viele Strings eine Rolle spielen -> Script machen und das aufrufen.
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: MadMax-FHEM am 30 August 2021, 13:59:03
Also was ich schon mitbekommen hab: "Doppel-Pipe" geht wohl eher nicht...
Ansonsten: ich probiere auch lang nicht alles aus..
...und bin sowieso eher ein "Freund" von myUtil-Subs oder (Shell-)Scripten... :)

Gruß, Joachim
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: suchmich1983 am 30 August 2021, 14:05:52
Hi,

schon mal gut zu wissen das Pipen nicht geht.

Trotzdem funktioniert in der Shell:
/opt/fhem/hdmi1.sh

In der FHEM Kommandozeile funktioniert aber weder:
"/opt/fhem/hdmi1.sh"
noch
"sh /opt/fhem/hdmi1.sh"

ich schnalle nur einfach nicht wieso! Dachte immer es würde nur das Shellscript aufgerufen?

Dank Euch!
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: suchmich1983 am 30 August 2021, 14:32:40
Ich schicke die Befehle jetzt mal an eine andere IP mit Shellzugriff damit ich auch sehe was dort ankommt. (Danke Otto für den Tipp)!

Mein Shellscript:
echo -n -e "\x02\x0ASONY\x00\x17\x2b\x02\x00\x00" | nc  192.168.178.21 53484 #HDMI1

Am Empfänger kommt dann das an:
SONY,

Lasse ich im Shellscript "-e" weg, dann wird es sauber ausgegeben der Beamer reagiert nur trotzdem nicht.
\x02\x0ASONY\x00\x17\x2c\x02\x00\x00
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: suchmich1983 am 30 August 2021, 14:51:56
Zitat von: Otto123 am 30 August 2021, 13:13:11
also ich will das nicht Oberlehrerhaft behaupten, aber bei mir ging es bisher "so einfach" nicht. Ich habe aber evntuell auch noch nicht alle sin diesem System verstanden. Rudi meinte seinerzeit mal: es sollte eigentlich gehen, er hatte keine Erklärung dafür.
Deswegen in meinem Kopf: einfache shell Befehle direkt absetzen, sobald die Umleitung sein muss, oder die Sache ein bisschen länger wird, viele Strings eine Rolle spielen -> Script machen und das aufrufen.
deswegen hatte ich mir ja shellscripte gemacht, geht ja leider auch nicht.
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: Otto123 am 30 August 2021, 15:12:41
naja, ich würde sagen Du machst irgendwas verkehrt. Ich kann Dir mit dem Beamer nicht helfen.
echo mit und ohne -e ist ja ein gewaltiger Unterschied auch im Vergleich zu printf.

Also lass doch den Beamer außen vor und probiere nur den Syntax, ich denke wir reden irgendwie grundlegend aneinander vorbei.
/opt/fhem/hdmi1.shfunktioniert ja nur mit ordentlichem shebang (habe ich in deinem Script nicht gesehen) und Script ausführbar gemacht (chmod -x)

Kannst Du mein Beispiel von oben mit nc als Empfänger nachvollziehen?

Gruß Otto
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: suchmich1983 am 30 August 2021, 15:30:52
ja, ausführbar gemacht hatte ich es mit:

chmod +x SHELLSCRIPTNAME

Nen Shebang hatte ich nicht drin stimmt, und siehe da schon gehts! Sorry, ich muss gestehen ich bin echt ne Lusche in Sachen Linux. Meine Welt ist Windows und in PowerShell brauch man sowas nicht.
Sorry, da hätte ich auch mal selber drauf kommen können!

Lieben Dank Euch. Ich schreibe nachher noch ne kurzes HowTo wie es nun geklappt hat. Vielleicht es für andere Sony Beamer Besitzer auch noch interessant!

Grüße
Christian
Titel: Antw:Fhem Shell Script via Kommandozeile starten
Beitrag von: Otto123 am 30 August 2021, 22:18:56
Das würde dann bedeuten das der shell Aufruf (sh) bei Dir in der FHEM Umgebung nicht gefunden wird. Hatte ich noch nicht, aber ja: es empfiehlt sich generell im Zweifelsfall komplette Pfade zu verwenden.
/bin/sh /path/to/scriptname

Was gibt Dir denn dieser Ausdruck in der FHEM Kommandozeile zurück?
{qx(printenv PATH)}
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: MadMax-FHEM am 31 August 2021, 10:14:26
Zitat von: Otto123 am 30 August 2021, 12:47:03
Die gehen nicht!

Deswegen ja, der Aufruf des Shellscripts muss eigentlich gehen, der printf oder echo Befehl mit Pipe direkt in der FHEM Kommandozeile geht nicht.
Die FHEM Kommandozeile ist eben keine Linux Shell Konsole :)

Hmm, scheinen wohl doch zu gehen?
Siehe: https://forum.fhem.de/index.php/topic,17201.msg1172529.html#msg1172529

Wobei ich "sowas" ja (weiterhin) auslagere... 8)

Gruß, Joachim
Titel: Antw:Fhem Shell Script via Kommandozeile starten
Beitrag von: suchmich1983 am 31 August 2021, 13:18:37
ZitatWas gibt Dir denn dieser Ausdruck in der FHEM Kommandozeile zurück?
{qx(printenv PATH)}

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

Viele Grüße
Christian
Titel: Antw:Fhem Shel Script via Kommandozeile starten
Beitrag von: Otto123 am 31 August 2021, 14:44:55
Zitat von: MadMax-FHEM am 31 August 2021, 10:14:26
Hmm, scheinen wohl doch zu gehen?
Hallo Joachim,

ich habe nicht gesagt, dass es in qx() oder system() (perl) nicht geht. Es geht direkt in der FHEM Kommandozeile nicht:
"echo 'willi' > test.txt"
willi landet im Log und es entsteht keine test.txt Datei.

Gruß Otto
Titel: Antw:Fhem Shell Script via Kommandozeile starten
Beitrag von: Otto123 am 31 August 2021, 15:06:30
@christian
Da ist der Suchpfad aber vorhanden. Da wundert mich warum die Variante:
"sh scriptname.sh"
nicht funktioniert haben soll. Ist mir ein Rätsel.
Titel: Antw:Fhem Shell Script via Kommandozeile starten
Beitrag von: suchmich1983 am 31 August 2021, 16:51:39
Grüß dich Otto,

ich tippe es hat funktioniert, allerdings fehlte ja doch immer noch der shebang?
Titel: Antw:Fhem Shell Script via Kommandozeile starten
Beitrag von: Otto123 am 31 August 2021, 17:33:53
Vom Blickpunkt geht / geht nicht - sind diese beiden Vorgehensweisen alternativ:
scriptname  (shebang + Datei ausführbar)
sh scriptname (ohne oder mit shebang + Datei nur lesbar)
Titel: Antw:Fhem Shell Script via Kommandozeile starten
Beitrag von: helmut am 31 August 2021, 18:07:59
Zitat von: Otto123 am 31 August 2021, 14:44:55
ich habe nicht gesagt, dass es in qx() oder system() (perl) nicht geht. Es geht direkt in der FHEM Kommandozeile nicht:
"echo 'willi' > test.txt"
Hallo Otto,

jaein, wenn Du es klammerst, geht es doch. Warum das so ist, weiss sicher Rudi.
"(echo willi > test.txt)"
Zitatwilli landet im Log und es entsteht keine test.txt Datei.
Eine leere test.txt Datei wurde bei mir auch ohne Klammern angelegt; willi fand ich im Log.

Gruss Helmut
Titel: Antw:Fhem Shell Script via Kommandozeile starten
Beitrag von: suchmich1983 am 02 September 2021, 09:22:54
nur zur vollständigkeit halber hab ich hier mein HowTo hinterlassen. War unter anderem der Grund für diesen Thread hier: https://forum.fhem.de/index.php/topic,122741.0.html