FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: tklein am 25 Oktober 2021, 15:01:45

Titel: Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 25 Oktober 2021, 15:01:45
Hallo,

wie kann ich aus einem Notify das 433 Util Script starten?

Pfad:
pi@raspberrypi-iob:~/433Utils/RPi_utils $ pwd
/home/pi/433Utils/RPi_utils

Starten:
pi@raspberrypi-iob:~/433Utils/RPi_utils $ ./codesend 10101602

Bei meinem Notif bekomme ich immer leider nur
2021.10.25 14:57:42 3 : Leinwand_notify_1 return value: -1
2021-10-25 14:57:42 dummy Leinwand hoch

zurück.

Hier mein Notify:
defmod Leinwand_notify_1 notify Leinwand:hoch {system(" /home/pi/433Utils/RPi_utils/codesend 10101608 &")}

setstate Leinwand_notify_1 2021-10-25 14:57:42
setstate Leinwand_notify_1 2021-10-25 12:30:31 state active


Hier die Rechteübersicht:
drwxr-xr-x 2 pi pi  4096 Oct 25 12:28 .
drwxr-xr-x 7 pi pi  4096 Apr 30 11:46 ..
-rwxr-xr-x 1 pi pi 20104 Apr 30 11:47 codesend
-rwsrwxrwx 1 pi pi 20104 Oct 25 12:28 codesend_2


Ich freue mich über Hilfe

Grüße
Thomas
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: MadMax-FHEM am 25 Oktober 2021, 15:09:03
Ein Script des Users pi im Home von User pi wird schwierig durch den User fhem ausführen zu lassen...

Was tut das Script?
Kannst du es posten?

Muss es unter /home/pi/... liegen?

Besser als User fhem (also Besitz und Rechte) unter /opt/fhem/...

Vielleicht hilft auch: https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html

Gruß, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 25 Oktober 2021, 16:25:11
Hallo Joachim,

damit sende ich 433 MHz Signale. Infos:https://github.com/ninjablocks/433Utils
Bei einer alten FHEM Instanz mit meinem 3er Raspi konnte ich das Script so starten:
/home/pi/433Utils/RPi_utils/codesend xyz

jetzt auf dem neuen System mit dem 4er Rasp muss ich ./codesend zum starten des Skriptes/Funktion eingeben.

Werde es nach /opt/fhem/FHEM/FhemUtils kopieren und hoffen, dass ich es mit den richtigen rechten/group versehe.
Thx für den Link, werde da a bissl lesen.
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: MadMax-FHEM am 25 Oktober 2021, 16:31:30
./codesend -> hängt halt davon ab "wo" "du" (bzw. der aufrufende User) in dem Moment des Aufrufes "steht".

Ein absoluter Pfad ist davon unabhängig...

Auf einem früheren System kann z.B. sein, dass fhem als root gestartet wurde -> root darf alles, also auch "Scripte" (oder Programme) eines "beliebigen Users" ausführen...

Evtl. brauchst du root-Rechte (in der Readme steht was von sudo ...) -> das muss user fhem auch erst mal "dürfen" (aufpassen: nicht zu großzügig)

Beim Verschieben nach /opt/fhem/...


sudo cp /vollerPfad/datei /neuerPfad/datei


dann


sudo chown fhem:dialout /neuerPfad/datei


Und prüfen, ob Execute gesetzt ist (ansonsten: sudo chmod +x /neuerPfad/datei )

Viel Erfolg, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 25 Oktober 2021, 16:42:29
thx,

so so sieh es jetzt aus:
drwxr-xr-x 2 fhem dialout  4096 Oct 25 16:30 .
drwxr-xr-x 6 fhem dialout 36864 Oct 25 09:07 ..
-rwxr-xr-x 1 fhem dialout 20104 Oct 25 16:30 codesend
-rw-r--r-- 1 fhem dialout   562 May  3 08:00 release.pm
-rw-r--r-- 1 fhem dialout   117 May  3 15:58 uniqueID
-rw-r--r-- 1 fhem dialout  5739 May  3 08:00 update-20130127-001


Der Aufruf ergibt dennoch -1 im Log.
Wie kann ich fhem als root für dieses Tool laufen lassen?
So klappt es auch nicht:
defmod Leinwand_notify_1 notify Leinwand:hoch {system(" sudo /opt/fhem/FHEM/FhemUtils/codesend 10101608 &")}

Kann es evtl damit zu tun haben, dass tool früher mit codesend xyz und jetzt mit ./codesend xyz aufgerufen werden muss?
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: MadMax-FHEM am 25 Oktober 2021, 16:52:22
Zitat von: tklein am 25 Oktober 2021, 16:42:29
thx,

so so sieh es jetzt aus:
drwxr-xr-x 2 fhem dialout  4096 Oct 25 16:30 .
drwxr-xr-x 6 fhem dialout 36864 Oct 25 09:07 ..
-rwxr-xr-x 1 fhem dialout 20104 Oct 25 16:30 codesend
-rw-r--r-- 1 fhem dialout   562 May  3 08:00 release.pm
-rw-r--r-- 1 fhem dialout   117 May  3 15:58 uniqueID
-rw-r--r-- 1 fhem dialout  5739 May  3 08:00 update-20130127-001


Sieht gut aus...


Zitat von: tklein am 25 Oktober 2021, 16:42:29
Der Aufruf ergibt dennoch -1 im Log.
Wie kann ich fhem als root für dieses Tool laufen lassen?

Hast du die verlinkte Seite gelesen? -> system( ) liefert IMMER -1 zurück ;)

root: sudo (hatte ich ja geschrieben), das muss aber für User fhem erst "eingerichtet" werden. Da gibt's (bestimmt) auch einen Blog für ;)
EDIT: oder hier mal schauen https://forum.fhem.de/index.php/topic,88282.0.html

Zitat von: tklein am 25 Oktober 2021, 16:42:29
So klappt es auch nicht:
defmod Leinwand_notify_1 notify Leinwand:hoch {system(" sudo /opt/fhem/FHEM/FhemUtils/codesend 10101608 &")}

Geht denn das:

{system(" sudo /opt/fhem/FHEM/FhemUtils/codesend 10101608 &")}

in FHEMWeb-cmd?

Steht etwas im Log?

Evtl. mal (nur zum Test wegen "Rückmeldung") folgendes:

qx(sudo /opt/fhem/FHEM/FhemUtils/codesend 10101608)


Zitat von: tklein am 25 Oktober 2021, 16:42:29
So klappt es auch nicht:
defmod Leinwand_notify_1 notify Leinwand:hoch {system(" sudo /opt/fhem/FHEM/FhemUtils/codesend 10101608 &")}

Kann es evtl damit zu tun haben, dass tool früher mit codesend xyz und jetzt mit ./codesend xyz aufgerufen werden muss?

Löst das notify aus?
Wie hast du es erstellt?
Eventmonitor erstellen lassen?

Ich denke, dass fhem kein sudo darf...

Gruß, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 25 Oktober 2021, 17:07:08
Zitat{system(" sudo /opt/fhem/FHEM/FhemUtils/codesend 10101608 &")}
--> nix im Log

Zitatqx(sudo /opt/fhem/FHEM/FhemUtils/codesend 10101608)
--> Unknown command qx(sudo, try help.

ZitatWie hast du es erstellt?
Eventmonitor erstellen lassen?
--> ja. Notify löst aus.


Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: MadMax-FHEM am 25 Oktober 2021, 17:14:32
Sorry, nat.


{qx(sudo /opt/fhem/FHEM/FhemUtils/codesend 10101608)}


Etwas "mitdenken" ist schon erlaubt ;)

qx ist ja ein Perl Kommando/Befehl und kein fhem Befehl, also erst mal nach Perl -> { Perl } ;)

Evtl. auch Anführungszeichen um den Befehl innerhalb von qx, nutze das nicht (weil es blockiert) daher weiß ich es nicht genau...
Also:

{qx("sudo /opt/fhem/FHEM/FhemUtils/codesend 10101608")}


EDIT: aber bevor du einfach wild irgendwelche Dinge durchtestest: erst mal die verlinkten Dinge lesen. Ich denke ja, dass es an "fhem darf kein sudo (ohne Passwort)" liegt... Aber auch hier: sorgfältig lesen! Bevor du dir dein System "zerschießt" oder "zu große Löcher reißt" (-> Sicherheit)...

Gruß, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 25 Oktober 2021, 17:51:33
Hi Joachim,

besten Dank für deine Hilfe/Supprt. Bin fhemmäßig "eingerostet" Nutze es nur noch für 433 MHz Signale zum Syncen zu meinem iobroker.
So langsam kommen die Sachen wieder :-)

Werde da wohl doch noch (wieder) tiefer in die Materie gehen müssen.

Gruß
Thomas
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: MadMax-FHEM am 25 Oktober 2021, 18:11:23
Wäre mqtt keine bessere Lösung?

Wobei ich ja nicht weiß was du syncst ;)

Viel Erfolg, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: Wernieman am 25 Oktober 2021, 18:15:08
Du kannst externe Programme auch ohne Umwege über die perl-Ebene starten:
"/pfad/zu/meinem/tollen/Programm/programm.sh"
Also in "" setzen, dann wird nur keine Rückgabe ausgewertet, dafür dann aber auch nicht blockierend
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: Otto123 am 25 Oktober 2021, 18:26:38
Hi,

ich habe nicht herausgelesen ob das Script überhaupt funktioniert? Hat's denn ein Shebang am Anfang?
Braucht es für die Ausführung noch andere Rechte? Auf was greift das Script denn zu? pi ist ja in allen möglichen Gruppen, der user fhem nicht. gpio z.B.?


Gruß Otto
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 25 Oktober 2021, 19:03:33
Zitat von: Wernieman am 25 Oktober 2021, 18:15:08
Du kannst externe Programme auch ohne Umwege über die perl-Ebene starten:
"/pfad/zu/meinem/tollen/Programm/programm.sh"
Also in "" setzen, dann wird nur keine Rückgabe ausgewertet, dafür dann aber auch nicht blockierend

es ist kein shell script. sondern ein tool, um 433 MHz Daten zu senden.
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 25 Oktober 2021, 19:09:24
Zitat von: MadMax-FHEM am 25 Oktober 2021, 18:11:23
Wäre mqtt keine bessere Lösung?

Wobei ich ja nicht weiß was du syncst ;)

Viel Erfolg, Joachim

In Fhem bekomme ich via Signalduino Infos von Fernbedienungen, PIR, etc. diese synce ich per fhem-adapter zu meinem iobroker. dort kann ich auf die signale reagieren und aktoren schalten.

Hier gehe ich jetzt den Weg genau anders: in iobroker schalte ich einen Datenpunkt, dieser synct sich zu fhem und dann schaltet fhem per 433 sender die Leinwand.
Ich kann dafür nicht verlässlich über den Signalduino gehen. Das klappt nicht immer. Daher der Umweg über den alternativen Sender.
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: MadMax-FHEM am 25 Oktober 2021, 19:54:49
Ah, ok für die Verbindung fhem-ioBroker den "Connector"...
Ich hatte so verstanden, als ob du 433MHz-Nachrichten für die Kopplung verwenden würdest ;)

Gruß, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: Otto123 am 25 Oktober 2021, 20:18:22
Zitat von: tklein am 25 Oktober 2021, 19:03:33
es ist kein shell script. sondern ein tool, um 433 MHz Daten zu senden.
Aber im Betreff steht doch "Aufruf von Script"  :o
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: MadMax-FHEM am 25 Oktober 2021, 20:40:01
Zitat von: Otto123 am 25 Oktober 2021, 20:18:22
Aber im Betreff steht doch "Aufruf von Script"  :o

Ist aber doch nicht wirklich relevant, oder?

Also ob Script oder Programm/Executable...

@tklein: unter de User pi hat es aber funktioniert? Kompiliert hast du auf dem PI wo es läuft/laufen soll? Pin2 passt auch?

Ich tippe ja (immer noch) auf: fhem darf kein sudo ohne PW...

Gruß, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: Otto123 am 25 Oktober 2021, 22:21:35
ich tippe auf fehlende Gruppenzugehörigkeit - wenns nur mit sudo geht ist es sowieso ins dünne Brett gebohrt. ;D
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 25 Oktober 2021, 22:22:28
Zitat von: Wernieman am 25 Oktober 2021, 18:15:08
Du kannst externe Programme auch ohne Umwege über die perl-Ebene starten:
"/pfad/zu/meinem/tollen/Programm/programm.sh"
Also in "" setzen, dann wird nur keine Rückgabe ausgewertet, dafür dann aber auch nicht blockierend

wie kann ich mein neues shell script aus fhem heraus starten?

Script:
#!/bin/sh
cd /opt/fhem/FhemUtils

echo ausgabe text
./codesend 10101602


Rechte:
pi@raspberrypi-iob:/opt/fhem/FhemUtils $ pwd
/opt/fhem/FhemUtils
pi@raspberrypi-iob:/opt/fhem/FhemUtils $ ls -la
total 32
drwxr-xr-x  2 root root     4096 Oct 25 22:19 .
drwxr-xr-x 11 fhem dialout  4096 Oct 25 20:59 ..
-rwxrwxrwx  1 fhem dialout 20104 Oct 25 22:00 codesend
-rwxrwxrwx  1 fhem dialout    73 Oct 25 22:16 test.sh


Aufruf im Notify:

defmod Leinwand_notify_2 notify Leinwand:runter { system("opt/fhem/FhemUtils/test.sh &")}

Das klappt nicht.

In der Konsole kann ich das Script mit
bash test.sh erfolgreich ausführen
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: MadMax-FHEM am 25 Oktober 2021, 22:22:34
Zitat von: Otto123 am 25 Oktober 2021, 22:21:35
ich tippe auf fehlende Gruppenzugehörigkeit - wenns nur mit sudo geht ist es sowieso ins dünne Brett gebohrt. ;D

Oder so... ;)

Gruß, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: MadMax-FHEM am 25 Oktober 2021, 22:27:55
Warum rufst du das "Programm" per Shell-Script auf und nicht einfach direkt?

Ist für die Problematik irrelevant...

Wenn es auf der Console bist und es geht: als User pi!?
Ohne sudo?

Wenn du es von fhem aus aufrufst (egal welcher Weg), dann führt das der User fhem aus!

Solange der das "Programm" nicht ausführen kann/darf, kannst du noch so viele "Umwege" drumrum bauen: es wird nicht gehen...

In deibem notify Aufruf ust der Pfad falsch!
Du musst schon an der "Wurzel" '/' anfangen... ;)
Also:

/opt/fhem/FhemUtils/test.sh

Absonsten startest du bzw. der User fhem wo er eben gerade "steht" und versucht nach opt usw. zu kommen. Das wird nicht gehen ;)
Sollte aber einen Fehler im Log geben...

EDIT: war es nicht schon mal der Pfad /opt/fhem/FHEM/FhemUtils ? ;) Wo nun? ;)
EDIT: die Rechte die du zuletzt gepostet hast sind auch übertrieben unnötig. Daher hat User pi überhaupt die Chance es auszuführen. Das sollte eigentlich NICHT (einfach) gehen, weil das ist ja das Home-Verzeichnis von fhem. Da darf pi erst mal nix was viel... ;)

Gruß, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: Otto123 am 25 Oktober 2021, 22:37:38
was macht denn codesend? Welche Rechte braucht das? Welche Gruppenzugehörigkeit ist notwendig? Welche Hardware wird damit gesteuert?

mit sudo -su fhem codesend ...kannst Du im terminal mit user fhem testen.
Vielleicht einfacher im Test wie das rumgebammel innerhalb von FHEM.

Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 26 Oktober 2021, 09:24:44
Zitat von: Otto123 am 25 Oktober 2021, 22:37:38
was macht denn codesend? Welche Rechte braucht das? Welche Gruppenzugehörigkeit ist notwendig? Welche Hardware wird damit gesteuert?

mit sudo -su fhem codesend ...kannst Du im terminal mit user fhem testen.
Vielleicht einfacher im Test wie das rumgebammel innerhalb von FHEM.

hier die Ausgabe. Da liegt der Hund begraben:
pi@raspberrypi-iob:~/433Utils/RPi_utils $ sudo -su fhem ./codesend 1234
wiringPiSetup: Unable to open /dev/mem or /dev/gpiomem: Permission denied.
  Aborting your program because if it can not access the GPIO
  hardware then it most certianly won't work
  Try running with sudo?
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: Otto123 am 26 Oktober 2021, 09:29:48
da lag ich doch mit meiner Vermutung richtig :)

packe user fhem in die Gruppe gpio, starte einmal neu (ich weiß nicht genau wann die neue Gruppe greift) und dann funktionieren die zahlreichen Vorschläge und Möglichkeiten ;) (Bevorzugt die Variante von Werner einfach als FHEM Command (https://fhem.de/commandref_DE.html#command))
Beispiel
sudo usermod -aG gpio fhem
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 26 Oktober 2021, 09:37:08
Zitat von: MadMax-FHEM am 25 Oktober 2021, 22:27:55
Warum rufst du das "Programm" per Shell-Script auf und nicht einfach direkt?

Ist für die Problematik irrelevant...
--> war ein Test/Idee von mir.

Wenn es auf der Console bist und es geht: als User pi!?
Ohne sudo?
--> Ja

Wenn du es von fhem aus aufrufst (egal welcher Weg), dann führt das der User fhem aus!
--> okay da hilft auch wohl kein sudo

Solange der das "Programm" nicht ausführen kann/darf, kannst du noch so viele "Umwege" drumrum bauen: es wird nicht gehen...

In deibem notify Aufruf ust der Pfad falsch!
Du musst schon an der "Wurzel" '/' anfangen... ;)
Also:

/opt/fhem/FhemUtils/test.sh

Absonsten startest du bzw. der User fhem wo er eben gerade "steht" und versucht nach opt usw. zu kommen. Das wird nicht gehen ;)
Sollte aber einen Fehler im Log geben...
--> steht leider immer nur
2021.10.26 09:34:51 3 : Leinwand_notify_2 return value: -1
2021-10-26 09:34:51 dummy Leinwand runter

[/b]

EDIT: war es nicht schon mal der Pfad /opt/fhem/FHEM/FhemUtils ? ;) Wo nun? ;)  --> /opt/fhem/FhemUtils
EDIT: die Rechte die du zuletzt gepostet hast sind auch übertrieben unnötig. Daher hat User pi überhaupt die Chance es auszuführen. Das sollte eigentlich NICHT (einfach) gehen, weil das ist ja das Home-Verzeichnis von fhem. Da darf pi erst mal nix was viel... ;)
--> Danke für die Erklärung

Gruß, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: MadMax-FHEM am 26 Oktober 2021, 09:41:25
Zitat
Wenn du es von fhem aus aufrufst (egal welcher Weg), dann führt das der User fhem aus!
--> okay da hilft auch wohl kein sudo

Naja: helfen würde es schon ;)

Aber der Weg von Otto ist besser (der richtige Weg): https://forum.fhem.de/index.php/topic,123658.msg1182360.html#msg1182360

Gruß, Joachim
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: Wernieman am 26 Oktober 2021, 14:21:53
Und noch eine Kleinigkeit:
Wenn eine Datei Beginnt mit einer Zeile #!, wie hier z.B. #!/bin/bash, brauchst Du den Interpreter nicht nochmals anzugeben.

Also ./test.sh reicht und nicht "bash ./test.sh"
Titel: Antw:Aufruf von Script unter /home/pi/433Utils/RPi_utils/
Beitrag von: tklein am 27 Oktober 2021, 12:30:49
Zitat von: Wernieman am 26 Oktober 2021, 14:21:53
Und noch eine Kleinigkeit:
Wenn eine Datei Beginnt mit einer Zeile #!, wie hier z.B. #!/bin/bash, brauchst Du den Interpreter nicht nochmals anzugeben.

Also ./test.sh reicht und nicht "bash ./test.sh"

besten dank für die Erklärung!