Autor Thema: [GELÖST]Shell/Python Script ausführen (via Dummy / system{})  (Gelesen 41818 mal)

Offline hellspawn0815

  • New Member
  • *
  • Beiträge: 3
Antw:[GELÖST]Shell/Python Script ausführen (via Dummy / system{})
« Antwort #30 am: 19 Dezember 2015, 14:29:08 »
Moin zusammen!

Hab mich hier extra registriert um mal Feedback zu geben ;D Danke zunächst mal an alle, mit euch habe ich es zum laufen bekommen.

Bei mir hat es mit folgenden Änderungen geklappt:

  • Den Benutzer fhem habe ich nicht der Gruppe root hinzugefügt, wie es thomka beschrieben hatte. Ich habe da ähnliche bedenken wie Wernieman. Ich habe stattdessen den Benutzer fhem der Gruppe gpio hinzugefügt. Dieser Gruppe muss man angehören wenn man unter /sys/class/gpio die Pins steuern will. Und da mit der fhem.cfg der Benutzer fhem versucht die GPIOs zu steuern, braucht der halt Zugriffsrechte. Dafür zum root werden, die Datei editieren, dort den bestehenden "gpio"-Eintrag suchen und dahinter ein ",fhem" ohne "") dranhängen
sudo nano /etc/group
   gpio:x:997:pi,fhem      << nur ",fhem" (ohne "") anhängen!! Dann speichern und schließen
reboot
  • Ich musste die /etc/sudoers verändern. Aber nicht so wie es thomka beschrieben hatte. Bei mir hat es gereicht den Benutzer fhem genauso einzurichten wie den Benutzer pi (Danach natürlich noch einen reboot). Bei mir sieht die Datei nun u.a. so aus:
pi ALL=(ALL) NOPASSWD: ALL
fhem ALL=(ALL) NOPASSWD: ALL
  • Meine fhem.cfg-coding sieht so aus (Man beachte: Für den Python-Aufruf benötige ich kein sudo):
# Muss einmal definiert werden, kA warum
attr global userattr webCmd

# Lichtleiste
define Lichtleiste dummy
attr Lichtleiste room Arbeitszimmer
attr Lichtleiste webCmd on:off
define sw_ll_off notify Lichtleiste:off {system('python /opt/fhem/relais.py&');;}
define sw_ll_on notify Lichtleiste:on {system('python /opt/fhem/relais.py&');;}
« Letzte Änderung: 19 Dezember 2015, 18:22:24 von hellspawn0815 »
Hilfreich Hilfreich x 1 Liste anzeigen

Offline hellspawn0815

  • New Member
  • *
  • Beiträge: 3
Antw:[GELÖST]Shell/Python Script ausführen (via Dummy / system{})
« Antwort #31 am: 19 Dezember 2015, 16:18:47 »
Ich nochmal.

Ich habe noch etwas herausgefunden. Ich habe auch ein wenig mit "echo" experimentiert und geguckt wieviele Parameter mitgegeben werden können.
define Lichtleiste dummy
attr Lichtleiste room Arbeitszimmer
attr Lichtleiste webCmd on:off
define sw_ll_off notify Lichtleiste:off {system('/opt/fhem/test.sh 1 2 3 4&');;}
define sw_ll_on notify Lichtleiste:on {system('/opt/fhem/test.sh 1 2 3 4&');;}

Die test.sh schreibt die übergebenen Parameter in eine Logdatei weg. Ergebnis: Es werden nur "1" und "2" übergeben. Ich bin der Meinung, dass die Funktion system() nur 3 Argumente aufnehmen kann. In diesem Fall wäre das erste Argument: /opt/fhem/test.sh, das zweite Argument wäre 1 und das dritte Argument 2.

Mein Script namens gpio.py benötigt um meine Pins anzusteuern 2 Parameter. Der Aufruf im Terminal läuft so:
python /opt/fhem/gpio.py 37 0
python /opt/fhem/gpio.py 37 1
In der fhem.cfg würde das so aussehen
define Lichtleiste dummy
attr Lichtleiste room Arbeitszimmer
attr Lichtleiste webCmd on:off
define sw_ll_off notify Lichtleiste:off {system('python /opt/fhem/gpio.py 37 0&');;}
define sw_ll_on notify Lichtleiste:on {system('python /opt/fhem/gpio.py 37 1&');;}
Das ist aber ein Problem, denn in der fhem.cfg bekommt die Methode system() nun insgesamt 4 Parameter übergeben.


Die Lösung ist denkbar einfach:
  • Mit dem nano in meine gpio.py rein und in der ersten Zeile dies hier eintragen:
#!/usr/bin/env python
  • Nun noch die Datei ausführbar machen:
chmod +x gpio.py
  • Jetzt kann im Terminal das Script ohne den "python"-Zusatz aufgerufen werden, nämlich so:
/opt/fhem/gpio.py 37 0
/opt/fhem/gpio.py 37 1
  • Daher kann der Aufruf in der fhem.cfg nun so aussehen:
define Lichtleiste dummy
attr Lichtleiste room Arbeitszimmer
attr Lichtleiste webCmd on:off
define sw_ll_off notify Lichtleiste:off {system('/opt/fhem/gpio.py 37 0&');;}
define sw_ll_on notify Lichtleiste:on {system('/opt/fhem/gpio.py 37 1&');;}

Jetzt klappt es auch mit dem Python-Script  ;D
Gefällt mir Gefällt mir x 1 Hilfreich Hilfreich x 2 Liste anzeigen

 

decade-submarginal