Kann kein Phyton Script aus FHEM starten

Begonnen von f.f, 26 August 2017, 13:40:49

Vorheriges Thema - Nächstes Thema

f.f

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


dev0

Zitatwaere euch dankbar fuer einen Rat.
Vmtl. ein Rechteproblem. Darf Dein FHEM User das Script ausführen? Darf dieser FHEM User GPIOs schalten?

f.f

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

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

#4
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 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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Das mit dem Gpio-Modul ist am einfachsten und besten, da direkt in fhem integriert...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

f.f

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   

Wernieman

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

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

f.f

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




CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

f.f

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

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

f.f

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