FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: f.f am 26 August 2017, 13:40:49

Titel: Kann kein Phyton Script aus FHEM starten
Beitrag von: f.f am 26 August 2017, 13:40:49
Hallo ich wuerde gerne einen PIN der GPIO ueber Phyton mit FHEM steuern.
Dazu habe ich ein py script erstellt. Das ganze funtioniert beim Aufruf im Terminal auch  ueber :

sudo python /home/pi/GPIO26_high.py

jetzt habe ich mal mit FHEM angefangen und versucht einen dummy schalter damit zu belegen. leider schaltetder PIN nicht.

sollte das nicht auch gehen, wenn ich als kommandozeile in FHEM

{system("sudo python /home/pi/GPIO26_low.py")}

ausfuehre?
Ich bekomme "-1", aber das heisst ja wohl nicht viel...aber schalten tut es nicht...

waere euch dankbar fuer einen Rat. bin nicht zu faul zum lesen, aber ich habe jetzt schon soviel in anderen Beitraegen quergele
sen und es funzt trotzdem nicht.

Gruss Frank

Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: dev0 am 26 August 2017, 14:32:06
Zitatwaere euch dankbar fuer einen Rat.
Vmtl. ein Rechteproblem. Darf Dein FHEM User das Script ausführen? Darf dieser FHEM User GPIOs schalten?
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: f.f am 28 August 2017, 09:06:07
Hallo,

leider bin ich noch völlig neu in der Materie Python/Linux. In Windows und vb.net programmiere ich schon etliche Jahre, bin also kein Programmieranfänger...nur eben (noch) etwas confused mit Linux.
Ich habe die python scripte für die GPIO unter "/home/pi" abgelegt. Direkter Ausfruf funktioniert einwandfrei.
Ich habe unter der grafischen Benutzeroberfläche des PI auch die Dateiattribute der Skripte auf ausführbar für "jeden" gesetzt. Trotzdem funzt der zugriff aus FHem nicht.
Um auszuschließen, dass es evtl. an Zugriffsrechten scheitert die aus dem Inhalt des Scripts auf die GPIO folgen, habe ich auch mal ein Dummy "Hello" Script erstellt, im selben ordner gespeichert und ebenfalls für "jeden" ausführbar gemacht. Rufe ich das "Hello" Script aud FHEM Comandozeile auf bekomme ich auch "-1". Allerdings habe ich mangels Erfahrung mit FHEM auch keine Ahnung ob/wo der Printbefehl mir das "Hallo" anzeigen würde, wenn es funktioniert...Ich bekomme jedenfalls, wie beim Ausführen des GPIO-Scripts immer eine "-1".

was läuft hier falsch. Wäre euch für Tipps sehr dankbar, damit ich endlich mit dem eigentlichen FHEM loslegen kann.

Gruss
Frank
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: CoolTux am 28 August 2017, 09:13:19
FHEM läuft im Userkontext mit dem User fhem.
Bedeutet
1. Du versuchst auf ein anderes Userverzeichnis zu zu greifen. Wie auch unter Windows muss das vom User in deren Verzeichnis die Daten liegen erlaubt sein.
Kopiere das Skript nach /opt/fhem/scripts
gibt es den Ordner scripts nicht lege ihn an und gebe fhem als User die Rechte. Vergebe bei deinem kopierten Script ebenfalls die Rechte für FHEM.
Darf der User fhem ein su auf Deinem System machen?


Grüße
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: Otto123 am 28 August 2017, 09:19:43
Hallo Frank,

/home/pi ist das home Verzeichnis des User Pi
/opt/fhem ist das home Verzeichnis des User fhem

Beide Verzeichnisse haben spezielle Berechtigungen, anzeigen kannst Du die z.B. mit ls -l

Was Du angemeldet als User Pi machen kannst ist nicht das Gleiche was der User fhem machen kann.

Um GPIO zu steuern braucht man Rechte, alles mit sudo (root) zu machen ist nicht die gute Lösung.

In FHEM gibt es das Modul RPI_GPIO (https://fhem.de/commandref_DE.html#RPI_GPIO) in der Doku findest Du auch Hinweise zur Vorbereitung.
Damit kannst Du GPIO auch direkt aus FHEM steuern und musst nicht den Umweg über System/Python gehen.
Die dort beschriebenen Berechtigungen gelten auch für dein Python Script:
Zitatsudo adduser fhem gpio
sudo reboot

Gruß Otto
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: MadMax-FHEM am 28 August 2017, 09:22:09
Zitat von: CoolTux am 28 August 2017, 09:13:19
FHEM läuft im Userkontext mit dem User fhem.
Bedeutet
1. Du versuchst auf ein anderes Userverzeichnis zu zu greifen. Wie auch unter Windows muss das vom User in deren Verzeichnis die Daten liegen erlaubt sein.
Kopiere das Skript nach /opt/fhem/scripts
gibt es den Ordner scripts nicht lege ihn an und gebe fhem als User die Rechte. Vergebe bei deinem kopierten Script ebenfalls die Rechte für FHEM.
Darf der User fhem ein su auf Deinem System machen?


Grüße

Wahrscheinlich ist letzteres das Problem...
Evtl. wird eine Passworteingabe erwartet oder wie geschrieben gar keine sudo Berechtigung...

Sieht man anhand der sudoers Datei...

Ansonsten dürfte root (durch sudo) normalerweise sowohl auf die Datei zugreifen als auch ausführen...

Ausführen an sich, also von der Cosole aus wie geschrieben nehme ich mal an geht...

Gruß, Joachim
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: MadMax-FHEM am 28 August 2017, 09:25:07
Das mit dem Gpio-Modul ist am einfachsten und besten, da direkt in fhem integriert...

Gruß, Joachim
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: f.f am 28 August 2017, 10:57:26
Hallo,

danke für die Tipps, ich sitze leider hier im Büro uund habe erst heute Abned wieder Zeit mit meinem PI zu experimentieren. Nach allem was ich gegoogelt (und verstanden..) hatte, dachte ich auch es hat was mit den Rechten zu tun.   Ich hatte deshalb unter /opt/fhem einen Unterordnerordner /PY angelegt, das "hallo"-testcript da reingepackt, und über Dateimanager zur Ausführung  für "jeden" freigegeben. Das hat das Problem leider nicht gelöst. Ich dachte auf die art und Weise hätte user fhem sowieso die Rechte?
Ich habe auch mal versucht mich direkt (über remotedesktop) als fhem einzuloggen. Ich dachte dann könnte ich versuchen das script über commandline als "fhem" aufzurufen und so "von hinten" auf Fehlersuche zu gehen. leider ging das nicht, weil das Remotedesktop seltsamer Weise mit diesem user nach dem login gleich wieder automatisch schließt...

mit RPI_GPIO kann ich wohl nicht arbeiten, da ich >50 Kanäle brauche und mir deshalb ein 128 Kanal i/o bestellt habe. Das läuft über I2C, also muss ich wohl oder übel Python scripte schreiben und dann über FHEM aufrufen. Da das Modul aber noch auf dem Postweg ist, dachte ich, ich lerne ich mich mal ein mit GPIO und Python. Wenn ich es schließlich (hoffentlich in diesem Leben...)schaffe die GPIO onboard mit Python aus FHEM heraus zu schalten, dann bleibt nur die Aufgabe die I2C Ports in Python anzusprechen (und ich hoffe bzw. denke das bekomme ich dann hin)

Gruss
Frank   
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: Wernieman am 28 August 2017, 11:15:39
Da viele verschiedene Fehlermöglichkeiten hier sein könne, könntest Du uns bitte:
(Eventuell die Pfade/Dateinamen anpassen)

# die Rechte des Screiptes zeigen
ls -lha /home/fhem/PY/*
# den Inhalt des Test-Scriptes
cat /home/fhem/PY/hallo
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: Otto123 am 28 August 2017, 12:05:23
Zitat von: f.f am 28 August 2017, 10:57:26
Ich habe auch mal versucht mich direkt (über remotedesktop) als fhem einzuloggen. Ich dachte dann könnte ich versuchen das script über commandline als "fhem" aufzurufen und so "von hinten" auf Fehlersuche zu gehen. leider ging das nicht, weil das Remotedesktop seltsamer Weise mit diesem user nach dem login gleich wieder automatisch schließt...
User fhem hat nicht das Recht auf interaktive Anmeldung. Du solltest das versuchen zu verstehen, aber für Deinen Fall nicht ändern.
Ob es jetzt wichtig ist ein "Hello" in FHEM zu zaubern ist auch die Frage. FHEM hat keine direkte interaktive Oberfläche für so etwas. Sicher willst Du später auch Daten aus "deinem" Script in FHEM bekommen. Dazu gibt es einige Möglichkeiten.
Vielleicht ist es aber einfacher sich mit Perl zu beschäftigen, Python ist für FHEM ein Umweg. Da Du sowieso neu in Python/Linux bist, ist es doch egal  ;)

Gruß Otto
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: f.f am 28 August 2017, 18:23:58
also das sieht so aus

pi@raspberrypi:~ $ ls -lha /opt/fhem/PY
insgesamt 12K
drwxrwxrwx 2 fhem pi      4,0K Aug 28 15:50 .
drwxrwxrwx 9 fhem dialout 4,0K Aug 27 09:12 ..
-rwxrwxrwx 1 fhem pi        15 Aug 27 09:06 hallo.py

und das script ist wie gesagt ein primitiver Test

pi@raspberrypi:~ $ cat /opt/fhem/PY/hallo.py
print("hallo")

ich hab allerdings keine Ahnung ob und wie ein print befehl in FHEM von der Konsole aus angezeigt wird. Gibt es einen anderen einfachen Test?

Gruss



Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: CoolTux am 28 August 2017, 18:33:04
Das klappt so nicht. Du hast doch keine Konsole wo du die Ausgabe sehen kannst. Leute die Ausgabe statt in die stdout um in eine Datei.
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: f.f am 28 August 2017, 19:05:40
ok das bringt mich schon mal weiter.

aber jetzt bin ich voellig verwirrt...habe das "hallo" script modifiziert. Die Ausgabe erfolgt jetzt in ein log.txt. rufe ich das hallo.py jetzt mit thonny auf und lass es laufen, erstellt es mir ein log.txt und schreibt "hallo" rein-....also alles wie es soll...so weit so gut....
rufe ich das script vom command aus auf passiert gar nix...es wird auch kein log.txt erstellt......confused (korrektur...very confused...)


Gruss
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: CoolTux am 28 August 2017, 19:10:39
Wer oder was ist thonny welche Command meinst du und wenn du die Kommandozeile von FHEMWEB meinst wie rufst du da das Script auf?

Ist ein bisschen schwer dir zu helfen.
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: f.f am 28 August 2017, 19:47:51
sorry wenns unverständlich war. danke, dass du dich trotzdem erbarmst...:-)
Thonny ist der python editor.

Ich habe jetzt das script nochmal modifiziert. hatte zunächst als ausgabedatei nur "log.txt" angegeben (ort des "hallo.py" ist aber /opt/fhem/PY) deshalb hat es ueber die commandline das log in /home/pi erstellt. das hatte ich nicht gesehen.
ich habe jetzt den speicher/ausgabe-ort j absolut angegeben und jetzt wird das log.txt auch in /opt/fhem/PY/ erstellt beim aufrufen von der commandline.

aber as fhem heraus will es einfach nicht.
ich habe versucht das script über :
{system('sudo python /opt/fhem/PY/hallo.py')}
{system("sudo python /opt/fhem/PY/hallo.py")}

...und zig andere varianten...habe hier beim querlesen aehnliche probleme schon mehrere varianten gesehen---keine hat funktioniert


Gruss




Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: MadMax-FHEM am 28 August 2017, 19:54:58
Schon geprüft, ob der User fhem (ohne Passworteingabe) überhaupt sudo "darf"?

Gibt es einen Eintrag für den User fhem in der sudoers Datei?

Standardmäßig ist dort ja nur der User pi eingetragen...

Gruß, Joachim
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: CoolTux am 28 August 2017, 20:21:29
Mache wir erstmal die Rechte bisschen gerade und vernünftig.

chown -R fhem: /opt/fhem/PY
chmod -R 755 /opt/fhem/PY

Dann bitte ein

sudo su -s /bin/bash -c '/opt/fhem/PY/hallo.py' fhem

Damit führst Du das Skript mit den Rechten vom User fhem aus und benutzt dabei die Shell bash. Hier erfolgt dann auch eine Fehlerausgabe. Wenn das sauber funktioniert können wir und das ganze aus FHEM heraus ansehen.


Grüße
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: Otto123 am 28 August 2017, 21:28:52
Hi,

man sollte alle zu root machen um "hallo" zu sagen  :-X 

Ganz ohne sudo  8) geht es so (getestet):
Im Terminalfenster als Pi echo 'print("hallo")' > /opt/fhem/Test.py
In der FHEM Kommandozeile"python Test.py"
Ergebnis: Im Logfile steht Hallo.
Warum so einfach: fhem braucht doch an der Script Datei nur Leserecht!

Falls sudo wirklich sein muss, mache ich das auf dem Pi immer so:
# ergänze eine Datei zum sudoers Script Verzeichnis /etc/sudoers.d/
File="011_fhem-nopasswd"
echo "fhem ALL=(ALL) NOPASSWD: <Programm1 mit absolutem Pfad> <Programm2 mit absolutem Pfad>" >/etc/sudoers.d/$File
chmod 0440 /etc/sudoers.d/$File


Gruß Otto
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: f.f am 28 August 2017, 21:40:16
Danke euch! Bin weiter 8)
Das war ein Rechteproblem. habe in sudoers fhem eingetragen und es funktioniert. Ich kann das py script jetzt von FHEM aufrufen und auch die GPIOs habe ich schon geschlalten bekommen :) :)

vielen dank euch !!!!

ich fange jetzt gerade an einen dummy schalter und eine dummy Lampe zu erzeugen und mit notify zu beleben. das macht jetzt richtig Laune und ich denke ich komme auch schnell voran.
eine Frage hätte ich aber noch. Wo muss ich das funktionierende {system('sudo python /opt/fhem/PY/hallo.py')} jetzt hinschreiben damit der Schalter das ausloest?

beim notify hab in in den DEF:
Lamp_Esstisch:state:.*|Switch1:.*|Switch1:on set Lamp_Esstisch on
{system('sudo python /opt/fhem/PY/hallo.py');;}

aber so funzt das nicht, wo muss dass hin, damit der system BEfehl ausgeführt wird, wenn ich den Switch betätige? Wenn ich das heute noch hinbekomme koennte ich glücklich ins bett gehen....

sorry wenn ich mich hier zu bloed anstelle, aber linux, python, perl, fhem, gpio etc. alles zusammen auf einmal ist wirklich viel stoff....hab eigentlich schon viel unter windows mit c++ und .net und auch etliche anwendungen programmiert aber ich habe eben 30 jahre NUR unter windows gelebt und mich eben mit der message map rumgeärgert. Jetzt nervt es mich natuerlich ungemein, dass ich hier wie der ochs vorm berg stehe und nicht mal ein "hallo" hinbekommen hab.....sorry

Gruss
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: Otto123 am 28 August 2017, 21:57:09
Für die DEF!
Lamp_Esstisch:state:.*|Switch1:.*|Switch1:on set Lamp_Esstisch on;"sudo python /opt/fhem/PY/hallo.py"

Die Sache mit der Gruppe gpio wolltest Du nicht probieren?  :'( Ach so Du schaltest noch gar nicht, Du sagst immer noch Hallo.  ;D ::) ;D

Aber wie gesagt für Hallo sagen ist sudo nicht notwendig! Du hast jetzt etwas in die sudoers Datei eingetragen um sudo sagen zu können, mit Hallo hat das nichts zu tun.

Zum Nachlesen ->
https://fhem.de/commandref_DE.html#command
https://fhem.de/commandref_DE.html#notify

Gute Nacht
Otto
Titel: Antw:Kann kein Phyton Script aus FHEM starten
Beitrag von: f.f am 28 August 2017, 22:35:36
vielen lieben dank! mein schalter schaltet jetzt den gpio...supi!!

ich hoffe ich habe nicht zu faul gewirkt um mir das selber zu ergoogeln, aber diesen "Starterfolg " habe ich als Motivationsspritze gebraucht um nicht hinzuschmeissen. Jetzt wo ich gesehen habe, das es geht, hab ich auch die Motivation mich mal mit Linux und Perl auseinanderzusetzen.

@Otto
Ich wollte das "hallo" ja nur um zu sehen, dass fhem mit meinen Synthax-versuchen was "macht" ohne für jeden Versuch/Return (und es waren viele...) das Multimeter an die Pins frikeln zu müssen. das hab am Anfang gemacht und es ist nach dem hundersten mal fast an die Wand geflogen,.... ;D 
ich hoffe mein i2c Modul liegt morgen in der Post, dann kann ich Anfangen zu versuchen die 50 out-ports die ich brauche anzusprechen. Jetzt weiss ich ja schon mal wie ich die Scripte dann aufrufe und kann mir eine "rudimentäre" Oberfläche basteln die dann hoffentlich funktioniert. Das wird dann die Basis für meine weiteren "versuche".  danke nochmal

gruss
Frank