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

thomka

  • Gast
Hallo Community,

ich versuche irgendwie schon seit längerem ein python bzw. Shell-script per FHEM auszuführen zu lassen:

in der fhem.cfg habe ich folgendes definiert:

define Lichtleiste dummy
attr Lichtleiste webCmd on:off
define sw_ll_off notify Lichtleiste:off {system "/fhem/elro_1_off.sh&"}
define sw_ll_on notify Lichtleiste:on {system "/fhem/elro_1_on.sh&"}

Im Ordner /opt/fhem liegt des elro_1_on.sh und off.sh script. Führe ich diese unter dem user PI (Putty) aus, funkrionert es tadellos.

Das Logfile gibt leider auch kaum was her:
2013.12.16 21:58:47 3: sw_ll_on return value: -1
2013.12.16 21:58:49 3: sw_ll_on return value: -1
2013.12.16 21:58:51 3: sw_ll_on return value: -1
2013.12.16 21:58:52 3: sw_ll_on return value: -1
2013.12.16 21:58:53 3: sw_ll_on return value: -1
2013.12.16 21:58:54 3: sw_ll_off return value: -1
2013.12.16 21:58:55 3: sw_ll_off return value: -1
2013.12.16 21:58:57 3: sw_ll_on return value: -1

Auf OS-Ebene haben die Scripte CHMOD 755 bekommen. Auch die im Script gerufene .py Datei hat chmod 755.

Hat vielleicht noch wer eine Idee, was ich machen kann, damit ich das Script per FHEM ausführen kann?

Danke und Grüße,
Thomas
« Letzte Änderung: 18 Dezember 2013, 11:49:03 von thomka »

Offline MarkusN

  • Full Member
  • ***
  • Beiträge: 250
    • Markus´ Blog
Antw:Shell/Python Script ausführen (via Dummy / system{})
« Antwort #1 am: 16 Dezember 2013, 22:42:24 »
Versuch es mal mit folgendem:

{system ("/fhem/elro_1_on.sh &")}

thomka

  • Gast
Antw:Shell/Python Script ausführen (via Dummy / system{})
« Antwort #2 am: 16 Dezember 2013, 22:52:44 »
Hallo Markus,

Danke für die schnelle Hilfe - es funktioniert jedoch leider immer noch nicht :-(

2013.12.16 22:50:20 3: sw_ll_on return value: -1
2013.12.16 22:50:22 3: sw_ll_on return value: -1
2013.12.16 22:50:35 3: sw_ll_on return value: -1
2013.12.16 22:50:37 3: sw_ll_on return value: -1
2013.12.16 22:50:38 3: sw_ll_on return value: -1
2013.12.16 22:51:39 3: sw_ll_off return value: -1
2013.12.16 22:51:42 3: sw_ll_off return value: -1
2013.12.16 22:51:44 3: sw_ll_off return value: -1
2013.12.16 22:51:45 3: sw_ll_off return value: -1
2013.12.16 22:51:46 3: sw_ll_off return value: -1
2013.12.16 22:51:48 3: sw_ll_off return value: -1
2013.12.16 22:51:49 3: sw_ll_off return value: -1

Grüße,
Thomas

Offline ollir

  • Full Member
  • ***
  • Beiträge: 165
Antw:Shell/Python Script ausführen (via Dummy / system{})
« Antwort #3 am: 17 Dezember 2013, 07:48:40 »
Hallo,

so wie du schreibt liegt der fhem-Ordner nicht unter /opt/fhem/... etc. sonder direkt in der Hauptebene.

Müsste dann {system ("./elro_1_on.sh &")} oder ähnlich sein
-oder du gibst den kompletten Pfad an:{system ("/opt/fhem/elro_1_on.sh &")}

VG
Olaf
« Letzte Änderung: 17 Dezember 2013, 07:55:02 von ollir »

thomka

  • Gast
Antw:Shell/Python Script ausführen (via Dummy / system{})
« Antwort #4 am: 18 Dezember 2013, 10:13:36 »
Hallo Olaf,

Danke für den Hinweis. Ich habe ihn natürlich gleich umgesetzt - ohne Erfolg  :(

weder der direkte Aufruf mit ./ noch der via Pfad mit /opt...

VG
Thomas

Offline Puschel74

  • Hero Member
  • *****
  • Beiträge: 9838
Antw:Shell/Python Script ausführen (via Dummy / system{})
« Antwort #5 am: 18 Dezember 2013, 10:19:40 »
Hallo,

Zitat
Führe ich diese unter dem user PI (Putty) aus, funkrionert es tadellos.

Soweit mir bekannt besitzt der "User" PI root-Rechte.
FHEM hat allerdings nur einfacher Userrechte.

Stell dem Aufruf doch mal ein sudo vorne dran - was passiert dann?
{system ("sudo ./elro_1_on.sh &")}
Grüsse
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Offline Jaydee

  • Full Member
  • ***
  • Beiträge: 239
Antw:Shell/Python Script ausführen (via Dummy / system{})
« Antwort #6 am: 18 Dezember 2013, 10:21:36 »
vielleicht liegt es daran, was das Skript tun soll...

Hat der User fhem dafür die Rechte? Also nicht für die Ausführbarkeit des Skriptes, sodern das zu tun, was IM Skript steht? So Sachen wie auf GPIOs oder SPI zuzugreifen sind nämlich auf dem Pi  etwas kniffelig, was die Rechte angeht.

Teste den FHEM-Aufruf, vielleicht erstmal mit etwas was definitiv erlaubt ist, wie zum Beispiel in eine (erlaubte) Textdatei schreiben...

Gruß
Jan
FHEM auf Cubietruck, HMLAN, HUEBridge, TCP
HM-LAN: HM-RC-4-B,HM-PB-6-WM55,HM-LC-SW2-FM,HM-LC-DIM1T-PL,HM-LC-Dim1PWM-CV,HM-LC-SW4-BA-PCB,HM-LC-SW4-PCB
Hue-Bridge: LCT001,LWL001
sonst.: Onkyo TX-NR515, Kindle Touch

Offline Jaydee

  • Full Member
  • ***
  • Beiträge: 239
Antw:Shell/Python Script ausführen (via Dummy / system{})
« Antwort #7 am: 18 Dezember 2013, 10:23:05 »
Ah, Puschel74 war schneller :-)

Soweit ich weiß ist fhem aber out-of-the-box nicht sudo-berechtigt. Da müsste zuvor erst noch was geändert werden...
FHEM auf Cubietruck, HMLAN, HUEBridge, TCP
HM-LAN: HM-RC-4-B,HM-PB-6-WM55,HM-LC-SW2-FM,HM-LC-DIM1T-PL,HM-LC-Dim1PWM-CV,HM-LC-SW4-BA-PCB,HM-LC-SW4-PCB
Hue-Bridge: LCT001,LWL001
sonst.: Onkyo TX-NR515, Kindle Touch

thomka

  • Gast
Antw:Shell/Python Script ausführen (via Dummy / system{})
« Antwort #8 am: 18 Dezember 2013, 10:45:34 »
Hallo,

Danke für die raschen Antworten. Ich habe vor einigen Tagen, hoffentlich korrekt, den user fhem in die Gruppe root reingepackt:

nano /etc/group
dort in der ersten Zeile einfach mein fhem dazu geschrieben:

root:x:0:fhem,pi
damit sollte doch der User FHEM der Gruppe root angehören und im Umkehrschluss sollte es doch keine Berechtigungsprobleme geben, oder?


----
Im Script selber greife ich auf den GPIO 17 zu. Dazu habe ich in der /etc/rc.local folgende Änderungen vorgenommen:

sudo -u pi /usr/local/bin/gpio export 17 out
sudo -u fhem /usr/local/bin/gpio export 17 out

die Scripte im /opt/fhem Ordner habe ich auch bereits per

sudo chown fhem elro_1_on.sh
sudo chown fhem elro_1_off.sh
sudo chown fhem elro.py

dem User FHEM übergeben.

Die Shell-Scripte sind eigentlich nur Einzeiler, welche das Python Script mit bestimmten Parametern aufrufen. ... Das war auch schon ein Schritt meiner Fehlersuche (Pythonscript-Aufruf mit Parametern in ein Shell Script zu packen) um Probleme bei der Parameterübergabe auszuschließen.

elro_1_on.sh:
#!/bin/sh
python elro_wiringpi.py 8 1


VG,
Thomas
« Letzte Änderung: 18 Dezember 2013, 10:55:35 von thomka »

thomka

  • Gast
Antw:Shell/Python Script ausführen (via Dummy / system{})
« Antwort #9 am: 18 Dezember 2013, 11:47:44 »
Ok, ich habe den Fehler gefunden:


define Lichtleiste dummy
attr Lichtleiste webCmd on:off
define sw_ll_off notify Lichtleiste:off {system('sudo /opt/fhem/elro_1_off.sh&');;}
define sw_ll_on notify Lichtleiste:on {system('sudo /opt/fhem/elro_1_on.sh&');;}

mit diesem Code funktioniert das Schalten!

Danke Euch allen für die Unterstützung

VG
Thomas

Offline Puschel74

  • Hero Member
  • *****
  • Beiträge: 9838
Antw:[GELÖST]Shell/Python Script ausführen (via Dummy / system{})
« Antwort #10 am: 18 Dezember 2013, 11:51:26 »
Hallo,

Zitat
system('sudo /opt/fhem/elro_1_off.sh&');;

Was einfache Anführungszeichen alles ausmachen können  ;)

Aber schön das es jetzt klappt.

Grüsse

P.S.: Könntest du deinen ersten Beitrag bitte editieren und ein Gelöst vorne dran stellen? Danke
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

thomka

  • Gast
Antw:[GELÖST]Shell/Python Script ausführen (via Dummy / system{})
« Antwort #11 am: 07 Januar 2014, 20:59:59 »
Nachtrag:

das ganze funktioniert noch nicht ganz wie beschrieben - wir haben eben herausgefunden, dass trotzdem ein Berechtigungsproblem besteht:
man muss noch die /etc/sudoers modifizieren. Mit folgenden Einträgen funktioniert es bei mir:

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
fhem    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
fhem ALL=(ALL) NOPASSWD: ALL
pi ALL=(ALL) NOPASSWD: ALL

Anschliessend ein Reboot und dann sollte es klappen

Grüße,
Thomas
Zustimmung Zustimmung x 1 Liste anzeigen

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 5786
Antw:[GELÖST]Shell/Python Script ausführen (via Dummy / system{})
« Antwort #12 am: 07 Januar 2014, 21:17:27 »
Kleiner (nicht unwesentlicher) Hinweis:
fhem ist mit Deinem sudo praktisch root-Berechtigt ... muß das wirklich so sein?

Kannst Du rausfinden, welche Rechte Dein fhem braucht, um das Script auszuführen? Dann könntest Du Ihm genau diese geben (und nicht mehr)
- 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

thomka

  • Gast
Antw:[GELÖST]Shell/Python Script ausführen (via Dummy / system{})
« Antwort #13 am: 07 Januar 2014, 21:56:23 »
Ja ich bin mir dessen bewusst, dass mein FHEM User nun die entsprechenden Berechtigungen hat. Da FHEM auf meinem Raspi läuft - und auch nur FHEM auf diesem Raspi läuft - stellt das für mich derzeitig kein Problem dar. Der Raspi und auch FHEM sind nicht von aussen erreichbar (ich wähle mich per VPN in mein Netzwerk und arbeite quasi im lokalen LAN).

Evtl. kannst du mich über die Nachteile dieser (Berechtigungs)-Konfiguration aufklären (speziell für meine Situation?!)

Danke und Grüße,
Thomas

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 5786
Antw:[GELÖST]Shell/Python Script ausführen (via Dummy / system{})
« Antwort #14 am: 07 Januar 2014, 22:04:04 »
Naja .. eigentlich versucht man unter Unix  jedem user nur die benötigten rechte zu geben. Deshalb hast Du auf deinem Pi ja auch den fhem user.

Das problem ist primär security, wenn es jemand schat auf deinem Ffhem zu kommen, kann er diesen konfigurieren und amit "praktisch" root-Befehl setzen. Wenn der fhem dagegen weniger rechte hat ...

Es könnte natürlich im "Fehlerfalle", also der fhem "dreht durch" auch weniger kaputt gehen, wenn er weniger Rechte hat.

Wenn natürlich wirklich "nur" fhm auf Deinem Pi läuft ....  trotzdem würde (ich persöhnlich) mir die Mühe machen, es einzuschränken. Da ich nur kein Pi habe, kann ich Dir beim Suchen der einstellungen nichts helfen ... man müste wissen, das Deine Befehle (/opt/fhem/elro_1_off) wirklich machen, d.h. welche Device sie ansprechen ...
- 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