Wie bekomme ich ein Python 3 Programm in fhem zum laufen?

Begonnen von f.f, 06 April 2018, 08:35:47

Vorheriges Thema - Nächstes Thema

f.f

Hallo,

ich habe folgendes Probölem:
Um meine Geräte auszulesen (4-20mA) habe ich eine 8 fach AI Karte von Widgetlords angeschlossen und installiert. Das Beispielprogramm zum Auslesen habe ich von deren Homepage übernommen (ist Python3). Wenn ich PI im graphischen Modus starte, Python 3 starte und dann von dort aus das Python Programm ausführe, dann bekomme ich die 8 Werte ausgegeben - ich gehe also schon einmal davon aus, dass alles richtig installiert ist.

Habe dann versucht das Programm aus fhem aufzurufen und den zurückgegebenen Messwert an ein dummy zu übergeben. Hier bekomme ich "Permission denied". Habe dann die Rechte von USer Pi auf User fhem übertragen......wieder "Permission denied".

Nach 100 versuchen den Aufruf zu modifizieren, dachte ich mir dann es könnte ja daran liegen, dass evtl. nicht die Rechte am py-Programm fehlen, sondern evtl. die REchte auf irgend etwas das im PY Script selber steht. Habe dann im Shell versucht das Script aufzurufen und habe etwas verblüfft festgestellt, dass der versuch das Script auszuführen einen Fehler produziert. Hier bin ich mit meinen noch rudimentären Linux Kenntnissen jetzt am Ende. Offenbar ruft der Aufruf des Programms nicht den Python3 interpreter auf sondern den Python2. Da im Script eine HErsteller LIB eingebunden ist, die offenbar Python 3 ist bekomme ich einen Fehler.
Mein Ziel ist es jetzt erst einmal herauszufinden, wie ich ein python3 script aus shell starten kann?   

Bräuchte hilfe...

Gruss

digiart

ZitatMein Ziel ist es jetzt erst einmal herauszufinden, wie ich ein python3 script aus shell starten kann?

Mit dem richtigen Shebang-Eintrag in der Datei und dem x-Flag (chmod) der Datei

ZitatHabe dann die Rechte von USer Pi auf User fhem übertragen......wieder "Permission denied".

Wo liegt das Script? Hat der User fhem Berechtigung auf das Verzeichnis?
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

Otto123

Moin,

ohne viel zu manipulieren kannst Du die python Version als Aufruf nehmen:
python script.py führt die "default" version aus und man muss in dem Pfad stehen wo das script.py liegt.
/usr/bin/python /home/pi/script.py macht das gleiche aber mit absoluten Pfaden, egal wo man steht - das ist im Zweifel immer die sichere Variante!
/usr/bin/python2 liefert den Link auf die python2 Version.
Jetzt musst Du schauen ob es einen Link für python3 am gleichen Ort gibt, dann verwendest Du einfach den.

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

danke. das hat mich etwas weiter gebracht. das proramm lässt sich via shell mit

/usr/bin/python3.5 /opt/fhem/in81.py

starten und liefert einen Wert.


versuche ich es genauso in fhem mit  command line, bekomme ich
wiringPiSetup: Unable to open /dev/mem or /dev/gpiomem: Permission denied.

???

Gruss

Otto123

Der GPIO Zugriff erfordert Rechte. Die hat der User fhem eventuell nicht.
Mit dem RPI_GPIO Modul sieht das laut commandref so aus:
https://fhem.de/commandref_DE.html#RPI_GPIO
siehe Vorbereitung

Ich kann aber nicht sagen ob das mit wiring Pi genauso ist.

Aber vielleicht ist ja RPI_GPIO sowieso eine Alternative?

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

hi,

danke.
habe einfach mal fhem zu den Gruppen von mem und gpiomem hinzugefügt und bin jetzt einen Schritt weiter.

"/usr/bin/python3.5 /opt/fhem/in81.py"

im fhem command liefert jetzt:
0
Unable to open SPI device

"0" passt, da kein Gerät angeschlossen ist. das liefert auch das py Script im shell, allerdings dort ohne den Zusatz "Unable to open SPI device".  Keine Ahnung wo das jetzt herkommt...
Wie bekomme ich jetzt den "0" in einen dummy? Wie gesagt  "/usr/bin/python3.5 /opt/fhem/in81.py" im shell liefert ja "etwas". habe schon mit "{system("/usr/bin/python3.5 /opt/fhem/in81.py"} in notify rumprobiert, aber das will irgendwie nicht

Otto123

Hi,

qx liefert Dir den Wert zurück. Ich hatte mir mal ein paar Notizen gemacht.


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

danke Otto.

bin das mal durchgegangen: dann sollte aber doch eigentlich im command von fhem eingegeben

"/usr/bin/python3.5 /opt/fhem/in81.py"
das selbe tun wie
{system("/usr/bin/python3.5 /opt/fhem/in81.py")}
oder ????


Bei mir kommt im log bei Variante 1 :
0
Unable to open SPI device

und bei Variante 2:
2018.04.07 09:55:26 1: ERROR evaluating {sytem("/usr/bin/python3.5 /opt/fhem/in81.py")}: Undefined subroutine &main::sytem called at (eval 454) line 1.

ist mir rätselhaft...

JoWiemann

Hallo,

es wäre hilfreich, wenn Du Code Tags, das # klicken, verwenden würdest. In Deinem jetzigen Post ist zwischen python3.5 und dem folgenden / ein Leerzeichen. Copy paste Fehler oder einfach übersehen. Mit dem Leerzeichen funktioniert es natürlich nicht.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Otto123

@Jörg Aber zwischen python (Programm) und der Datei mit dem Code muss doch ein Leerzeichen!

Zur Fehlermeldung: Hier steht sytem und nicht system!

Insofern ist die Fehlermeldung korrekt!

Woher der Fehler kommt ist mir nicht klar: SPI device  -> https://de.wikipedia.org/wiki/Serial_Peripheral_Interface  ???

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

JoWiemann

Hallo Otto,

Du hast recht. Lesefehler.


Gesendet von iPhone mit Tapatalk

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

f.f

hi,

danke für eure Mühe aber ich bekomm das einfach nicht geregelt.

Das Python3 Programm läuft unter shell ohne Probleme und liest die Karte problemlos aus.
Unter fhem bekomme ich im besten Fall: "Unable to open SPI device".
Ich hab mir die c++ lib mal angeschaut, die dem vom Hersteller eingebundenen lib zugrunde liegt, da wird "wiringpi" genutzt. Weiter bin ich in die Materie noch nicht eingestiegen, und hoffe nicht, dass ich den c++ code zerpflücken muss.

Meine alternative Idee 1:
Ich Rufe im shell meine PY 3.5 Datei auf und lasse mir im Minuten Intervall die Messwerte in eine txt. schreiben. Gleichzeitig baue ich mir in fehm einen timer, der alle paar Minuten die txt Datei öffnet und die Werte in Dummies einliest. Ich denk das sollte iregndwie gehen, aber ich finde das eine sehr unbefriedigende Lösung. Zumal ich nicht weiss was passieren wird, wenn fhem gerade mal zugreifen will, wenn das PY Programm gerade schreibt.

deshalb dachte ich nach Internet rechereche hier im Forum Idee 2 wäre eine Möglichkeit: das python fhem API modul
Nach installlation des moduls hab ich mit einem einfachen python 3 programm versucht einen Dummy in fhem zu schalten. Erfolglos.
Der Interpreter meldet "No module named "fhem"`.
Starte ich das Script mit python2 schaltet der dummy sauber.
Mein Probelm ist nun, dass die include lib für die Karte nur unter py3 läuft, ich aber das fhem api modul nur unter py2 zum laufen bekomme.....
Gibt es einen Weg das fhem API modul unter py3 zum laufen zu bekommen..? Das würde alle meine Probleme lösen.

Gruss   

Otto123

Hast Du denn fhem mal einfach in die Gruppe gpio gesteckt?
Ich denke es ist ein simples Rechte Problem.

Gruss 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

Hi Otto,

ja, fhem steckt in GPIO. Ich habe noch eine 32 Kanal IO Karte über i2c am PI um die Poolaktoren zu steuern und das funktioniert auch problemlos aus fhem. Die SPI Karte soll mir die Messwerte/Wasserwerte zurückgeben.

Habe gerade eine (von hinten durch die Brust ins Auge) Lösung gefunden:
Rufe beim booten des PI ein py3 script auf, das mir zyklisch die 8 Kanäle auf der IA Karte ausliest. Danach rufe ich im Script via "import subprocess" ein py2 script auf und übergebe die 8 Werte. Das py2 importiert das fhem.api.modul und schreibt mir die 8 Werte in 8 vorher definierte dummies. das läuft so unerwartet schnell und bisher ausreichend stabil....

PUH und danke
   

fhemcgn

Einen Nachtrag, weil ich bei einem anderen Problem gerade darüber gestolpert bin:
der User fhem muss noch zur Gruppe spi hinzugefügt werden.
Otto lag wohl richtig mit dem Rechteproblem!
Dann hätte es wahrscheinlich damals schon ohne die Verrenkungen funktionieren können  ;)

Ich hoffe das hilft noch jemandem!

/Stefan