[GELÖST]Shell/Python Script ausführen (via Dummy / system{})

Begonnen von thomka, 16 Dezember 2013, 22:05:47

Vorheriges Thema - Nächstes Thema

thomka

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

MarkusN

Versuch es mal mit folgendem:

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

thomka

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

ollir

#3
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

thomka

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

Puschel74

Hallo,

ZitatFü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.

Jaydee

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

Jaydee

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...

thomka

#8
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

thomka

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

Puschel74

Hallo,

Zitatsystem('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

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

Wernieman

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

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

Wernieman

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