Hallo mal wieder.
Ich habe einen RPi B+ und nutze daran neben FHEM auch die GPIOs. Da hängt ein Taster dran, der auch funktioniert. Außerdem ist eine LED angeschlossen, die ebenfalls geht und sich über FHEM schalten lässt. Ich habe ein Script in Python geschrieben, welches man in Raspbian Python aufrufen kann und die LED wieder leuchtet. Das hat erst mal keinen weiteren Nutzen sondern ist nur zum testen und lernen da.
Ich möchte nun, über einen Tastendruck aus FHEM das Python-Script aufrufen und damit die LED zum leuchten bringen. Über FHEM ist es leicht realisierbar, aber das bringt mich nicht weiter, da ich anstelle des LED-Scripts ein anderes Script laufen lassen möchte.
Hier mein Script:
define Pin29_Motion RPI_GPIO 5
attr Pin29_Motion direction input
attr Pin29_Motion interrupt rising
attr Pin29_Motion pud_resistor up
attr Pin29_Motion toggletostate yes
define n_Pin29_MotionOn1 notify Pin29_Motion:on {system('python /root/led.py');;}
wenn ich anstelle von...
{system('python /root/led.py');;}
den Befehl set Pin38 on;;
einfüge, geht eine LED an. Also hängt es eben an dem Teil:
{system('python /root/led.py');;}
Das Script ist mit Python2 geschrieben und unter /root/led.py abgespeichert.
Hier ist nochmal, für Alle die es interessiert, mein Vorhaben:
Später mal soll damit etwas Anderes verwirklicht werden (Haustürklingel wird gedrückt und auf einem LCD1602 erscheint ein Text "Sie klingeln bei Fam. Huber, Müller, Meier, Schmidt,, wir kommen sofort." oder mit Anwesenheitserkennung "Wir sind im Moment leider nicht zu Hause". (Wir wohnen in einem Mehrgenerationenhaus und es ist immer jemand im Haus, daher muss man sich keine Sorgen wegen Einbruchseinladung machen).
Kann mir jemand einen Tipp geben, wie ich es zum laufen bekomme?
Vielen Dank
Kai aus Oberfranken
Hi Kai,
du hast als Benutzer fhem nicht die Berechtigung auf das Verzeichnis /root zuzugreifen. Der absolute Pfad zum Programm python kann auch nicht schaden. Die Lösung, welche du schaffen willst, ist in fhem auch ohne Umwege zu python möglich.
Gruß Jens
Hallo und herzlichen Dank an dieser Stelle für die Antwort.
ich glaube ich habe wieder einiges mehr verstanden.
Zitat von: dirigent am 18 Januar 2015, 16:41:29
du hast als Benutzer fhem nicht die Berechtigung auf das Verzeichnis /root zuzugreifen.
das bedeutet, dass ich, auch wenn ich FHEM die root-Rechte gegeben habe, nicht auf den Ordner /root zugreifen kann?
ZitatDer absolute Pfad zum Programm python kann auch nicht schaden.
Ich fange erst an alles zu lernen. Wo finde ich denn den Pfad? Ist das der Pfad zu dem Program Python, also muss ich das so angeben:
define n_Pin29_MotionOn1 notify Pin29_Motion:on {system('/etc/python /root/led.py');;}
ZitatDie Lösung, welche du schaffen willst, ist in fhem auch ohne Umwege zu python möglich.
OK, aber wie kann ich das realisieren. Wie schaut das dann aus, nach was kann ich, im Internet, suchen?
Tut mir echt leid, wenn ich so deppert nachfrage, aber ich versuche mir die ganze Materie beizubringen. Mir hilft dabe jeder Tipp.
Velen Dank
Kai
Wenn fhem mit root-Rechten läuft, sollte der Zugriff zu /root klappen.
Python ist wahrscheinlich unter /usr/bin/python zu finden. Gib mal "find / -name python" in der Shell ein.
Mit der Intergration deines LCD-Display am RPi habe ich mich ein wenig zu weit aus dem Fenster gelehnt, da ich selbst das Display über einen Arduino+ConfigurableFirmata übers Netzwerk anspreche. In der reference http://fhem.de/commandref.html#RPII2C (http://fhem.de/commandref.html#RPII2C) ist die generelle Integration eines I2C an fhem beschrieben. In der reference und in den ersten 4 Posts im Anfängerbereich des Forums sind die Grundlagen zu fhem beschrieben. Wie hast du dein LCD mit dem RPi verbunden?
Gruß Jens
Ich kann leider immer noch nicht jubeln.
Bei mir klappt nichts. Ich habe schon einiges ausprobiert und auch gelesen aber auch gelernt. Aber es klappt dennoch nichts. Ich verstehe nicht wo mein Fehler liegt.
Darf ich bitte noch mal um einen Tipp bitten? Vielen Dank
Hier nochmal das Script von FHEM:
define Pin33_Motion RPI_GPIO 13
attr Pin33_Motion direction input
attr Pin33_Motion interrupt rising
attr Pin33_Motion pud_resistor up
attr Pin33_Motion toggletostate yes
#define n_Pin33_MotionOn notify Pin33_Motion:on set Pin38 on;;
#define n_Pin33_MotionOff notify Pin33_Motion:off set Pin38 off;;
define n_Pin33_MotionOn1 notify Pin33_Motion:on {system('python /root/led.py');;}
und hier einmal die in Python geschriebene Datei led.py (abgespeichert in root/ im Raspberry Pi, auf dem auch FHEM läuft):
#!/bin/sh
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(38,GPIO.OUT)
for x in range(0,3):
GPIO.output(38,True)
time.sleep(1)
GPIO.output(38,False)
ZitatWie hast du dein LCD mit dem RPi verbunden?
Ich habe ein Set gekauft von SUNFOUNDER und in der Beschreibung ist es gut erklärt. Außerdem ist eine Datei dabe, die man dann nach eigenen belieben ändern kann. Eigentlich recht einfach. Ich kann dir gerne die Datei einmal zukommen lassen.
Vielen Dank für alles
Kai aus Oberfranken
Wie schon geschrieben, habe ich k.A. vom RPi aber will trotzdem versuchen, dir zu helfen.
In http://raspberrypiguide.de/#HowTo (http://raspberrypiguide.de/#HowTo) ist Pin38 GPIO20 zugeordnet.
Nach http://fhem.de/commandref_DE.html#RPI_GPIO (http://fhem.de/commandref_DE.html#RPI_GPIO) musst du "define LED RPI_GPIO 20" ausführen.
Mit "set LED on" sollte diese dann auch leuchten, vorausgesetzt, du hast sie in Reihe mit einem Widerstand ~680Ohm gegen GND geklemmt.
Dein notify würde dann etwa so aussehen: "define n_Pin33_MotionOn1 notify Pin33_Motion:on set LED on
Danke für die schnelle Antwort.
Ja ich habe die LED schon zum leuchten gebracht. Mein notify schaut so aus:
define n_Pin33_MotionOn1 notify Pin33_Motion:on set LED_Pin38 on
Es geht die LED (Pin38) an. Das ist toll. Nun dachte ich, ich kann über das notify ein Script ausführen lassen. Dazu schrieb ich ein einfaches Script, bei dem (auch) die LED 38 angeht. Um zu testen, ob das klappt, und um danach weiter zu experimentieren. Leider scheitert es an dem Punkt, wo ich {system('python root/led.py');;} einfüge.
define n_Pin33_MotionOn1 notify Pin33_Motion:on {system('python /root/led.py');;}
Ich habe ein SMD LED, wo der Widerstand gleich mit aufgelötet ist.
Aber die LED lässt sich über den Schalter schalten.
Vielen Dank nochmal. Ich finde echt jeden Tipp klasse, das ist für mich alles auch immer ein großes Lernfeld und bei jedem Hinweis oder Tipp lerne ich dazu. Vielen Dank
Kai
Und wie ist es mit {system("sudo python /root/led.py")} ?
Leider nein.
Nein, mit
{system("sudo python /root/led.py")}
passiert auch nichts.
Ich habe FHEM in Raspbian shell zugewiesen und root Rechte gegeben, aber es tut sich nichts.
Moinsen,
Und auf der Kommandozeile kannst du das Python-Programm ausführen?
Mich wundert an deinem Prog etwas ...
Zitat von: kblc am 21 Januar 2015, 14:28:09
#!/bin/sh
import RPi.GPIO as GPIO
...
Der "Shebang" (http://stackoverflow.com/questions/7366775/what-does-the-line-bin-sh-mean-in-a-unix-shell-script) ist falsch.
Er sollte imho wohl eher
#!/usr/bin/python
oder
#!/usr/bin/env python
lauten.
So wie bei dir verzweigst du in die Shell.
Gruß
Thomas
Vielen Dank,
Leider geht es auch nicht. Ich habe hier nochmal kurz alle derzeitigen Einstellungen kurz beschrieben:
Raspberry Pi B+ mit Raspbian und FHEM mit aktuellem update (22.01.2015 10:25)
Raspberry Pi ist im Netzwerk, wo sich noch jede Menge anderer Geräte befinden.
Ich arbeite mit einem Macbook über das Terminal mit ssh - Verbindung,
mit Microsoft-RemoteDesktopverbindung zu Raspbian, und über das web interface zu FHEM.
auf einem Steckbrett befindet sich ein Kurzhubtaster - Angeschlossen an GND (PIN39) und GPIO 13 (Pin33)
Außerdem eine LED mit Widerstand - Angeschlossen an GND (Pin6) und GPIO 20 (Pin38)
Die Datei led1.py (wurde gestern in ...1 umbenannt, da ich versuchte die led.py in den Ordner des Benutzers "FHEM" zu verschieben) schaut nun folgendermaßen aus:#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(38,GPIO.OUT)
for x in range(0,3):
GPIO.output(38,True)
time.sleep(1)
GPIO.output(38,False)
In FEHM habe ich eine eigene Datei angelegt "fhem-gpio.cfg". Diese habe ich durch die Zeile "include ./FHEM/fhem-gpio.cfg" mit eingebunden. In der Datei sind weitere LED´s programmiert, die auch funktionieren. Unter anderem auch das LED, das ich gerne über das Python Script ansprechen würde (GPIO 20 - Pin 38). Das leuchtet auch wenn ich es in FHEM einschalte.
Der Schalter funktioniert ebenfalls, das Birnenbild "leuchtet", wenn ich ihn einmal drücke, wenn ich dann erneut auf den Kurzhubtaster drücke, springt die Birne wieder in die andere Richtung und ist dunkel gemalt. So wie es sein soll.
Hier die gesamte fhem-gpio.cfg:define Pin36 RPI_GPIO 16
attr Pin36 direction output
attr Pin36 room Haus
define Pin38 RPI_GPIO 20
attr Pin38 direction output
attr Pin38 room Haus
define Pin22 RPI_GPIO 25
attr Pin22 direction output
attr Pin22 room Haus
#define Pin40 RPI_GPIO 21
#attr Pin40 direction output
#attr Pin40 room Haus
define Pin32 RPI_GPIO 12
attr Pin32 direction output
attr Pin32 room Haus
define Pin33_Motion RPI_GPIO 13
attr Pin33_Motion direction input
attr Pin33_Motion interrupt rising
attr Pin33_Motion pud_resistor up
attr Pin33_Motion toggletostate yes
#define n_Pin33_MotionOn notify Pin33_Motion:on print:"Hello";;
#define n_Pin33_MotionOff notify Pin33_Motion:off set Pin38 off;;
define n_Pin33_MotionOn1 notify Pin33_Motion:on {system ('sudo python /root/led1.py");;}
define Pin35_Motion RPI_GPIO 19
attr Pin35_Motion direction input
attr Pin35_Motion interrupt rising
attr Pin35_Motion pud_resistor up
attr Pin35_Motion toggletostate yes
define n_Pin35_MotionOn notify Pin35_Motion:on set Pin22 on;;
define n_Pin35_MotionOff notify Pin35_Motion:off set Pin22 off;;
Der Taster "Pin35_Motion" funktioniert auch.
Wen ich beim Taster "Pin33_Motion" die auskommentierzeichen entferne, dann geht die LED auch an, aber eben nicht über das Python-Script. Das für mein weiteres Vorhaben von großer Bedeutung wäre.
Achja, die Verkabelung der anderen Taster ist auf einem anderen Steckbrett, mit T-Coppler(GPIO Breakout Adapter) damit auf meinem Steckbrett wirklich nur das nötigste ist. Aber die Komponenten sind ja vom Terminal, von FHEM und auch aus Python (Raspbian) ansprechbar.
Die Datei led1.py habe ich in Raspbian mit dem Menüpunkt "Dateieigenschaften" "Berechtigungen" "-Inhalt Anzeigen; -Inhalt ändern; Ausführen;" alle drei auf "Jeder" gesetzt.
Im Macbook Terminal mit ssh Verbindung kann ich die Datei mit dem Befehl python led1.py
aktivieren. Es geht dann das Licht an!
FHEM hat root - Rechte. Ich habe dem Benutzer "FHEM" auch shell zugewiesen und ein Passwort gegeben. Damit kann ich auch im Terminal mit dem Benutzer FHEM anmelden. Wenn ich dann aber led1.py ausführen möchte, geht es von dieser Stelle aus nicht. Es wird ein Passwort verlangt:[sudo]password for fhem
Allerdings klappt mein Passwort mit dem ich mich unter fhem anmelde nicht. Aber fhem ist in der Gruppe "root" root@raspberrypi:/opt# sudo addgroup fhem root
Der Benutzer »fhem« ist bereits ein Mitglied der Gruppe »root«.
Der letzte Versuch war mit chown -R fhem:root /opt/fhem
die Rechte für FHEM zu geben. Ich hoffe das passt so.
Das waren die Einstellungen.
Aber:
ich habe wieder was dazugelernt. Das ist schon an sich eine große Bereicherung für mich. Danke auch für den Link
ZitatDer "Shebang" ist falsch.
Das ist echt super von Euch.
Vielen Dank und hoffentlich bis bald
Kai
Moin Kai,
du schreibst, bei
[sudo]password for fhem
Zitatklappt mein Passwort mit dem ich mich unter fhem anmelde nicht
Das PW, dass hier abgefragt wird, ist das PW des Users "pi".
Edith sagt: Moment... nicht ganz richtig, es wird ja nach dem Passwort von User "fhem" gefragt und der hat ja normal kein Passwort, oder hast du ihm eins gegeben? Damit ist
nicht das Web-Anmelde-Passwort gemeint, dass du ihm in der fhem.cfg geben kannst.
Zusätzlich solltest du den absoluten Pfad, aus dem python aufgerufen wird angeben. Der Tipp wurde bereits von Jens aka dirigent gegeben. Setze doch mal seinen Befehl
find / -name python
in einer Konsole ab, da müsste dann in etwa so etwas rauskommen:
Zitat
...
/usr/include/boost/python
/usr/bin/python <<<<<<<<<<<<====== das ist es
/usr/lib/python2.7/site-packages/pivy/quarter/plugins/designer/python
...
und dann solltest du folgendes
{system("sudo /usr/bin/python /Pfad/da/ist/led1.py")}
einarbeiten.
Ach ja, bitte noch in das Verzeichnis wechseln, in dem dein led1.py steht und ein
ls -l led1.py
absetzen und das Ergebnis hier posten.
Btw: für Anfänger in Sachen Linux empfehle ich den midnight commander, zu installieren auf deinem RPi mittels
apt-get install mc
Aufruf mittels "mc" in der Kommandozeile. Ist ein Klon des "alterwürdigen" Norton Commanders. Damit kann man bereits nach kurzer Eingewöhnungszeit ganz gut Dateioperationen durchführen.
Gruß
Thomas
Danke für die schnelle Antwort.
Ich habe mich gleich drüber gemacht. Leider auch wieder ohne Erfolg. Das Script wird aus FHEM nicht gestartet.
Ich habe dem Benutzer FHEM in der Konsole ein Passwort und die shell zugewiesen. Also hat neben root und pi auch fhem einen Zugang. Im Webinterface von FHEM habe ich kein Passwort. Da komme ich nach Eingabe der IP:8083 direkt zur FHEM Weboberfläche.
Zitat/usr/bin/python <<<<<<<<<<<<====== das ist es
ja, das ist bei mir auch so, /usr/bin/python , noch ganz viele andere aber das auch.
{system("sudo /usr/bin/python /root/led1.py")}
hab ich gemacht. led1.py befindet sich im Ordner root daher dann auch nur /root/led1.py - korrekt?
Wenn ich
ls -l led1.py
auslese, dann erhalte ich:
Also wenn is in
root@raspberrypi:~# ls
eingebe, dann kommen viele Dateien, unter anderem auch meine led1.py
dann gebe ich hier folgendes ein
root@raspberrypi:~# ls -l led1.py
dann kommt folgendes dabei raus:
root@raspberrypi:~# ls -l led1.py
-rwxrwxrwx 1 root root 197 Jan 22 10:18 led1.py
root@raspberrypi:~#
Vielen Dank auch für den Hinweis mit "mc". Habe ich gleich gemacht. Das ist echt toll. Erleichtert mir bestimmt in Zukunft die Arbeit.
Gibt es nochwas, was ich machen kann?
Danke schön.
Hi,
die py-Datei steht im Verzeichnis /root. Dieses Verzeichnis gehört dem User root, der auch der Gruppe root angehört. Der User fhem ist der User fhem, welcher auch der Gruppe root angehört. Auf das Verzeichnis /root hat aber nur der User root die rwx-Rechte, nicht aber die sonstigen Mitglieder der Gruppe root. Also z.B. nicht fhem.
Packe deine py-Datei in ein Verzeichnis, auf das alle Zugriff haben, setze die Rechte notfalls mit
chmod a+rwx Verzeichnisname
dass alle auf das Verzeichnis "Verzeichnisname" lesenden, schreibenden und ausführbaren Zugriff haben.
Edith 2: Bitte diesen Befehl auf keinen Fall auf das Verzeichnis /root loslassen!
Und setze den Befehl entsprechend auf den neuen Verzeichnisstandort um.
Dann teste.
Gruß
Thomas
Edith: Typos
Hallo,
habe wieder alles probiert. Aber die LED bleibt still. Es tut sich immer noch nichts.
Die Datei befindet sich nun im Ordner /programme/led1.py
also habe ich es so eingetragen. Es geht einfach nicht. Ich verzweifle langsam.
Gibt es nochwas, was ich probieren kann?
Vielen vielen lieben Dank
Kai
Mach mal: "chown fhem /programme/led1.py" - danach noch mal per fhem testen.
Gruß Jens
Ja habe ich gleich gemacht. Ich habe dann auch wieder etwas herumprobiert. Aber die LED geht nicht an.
Die Eingabe von "chown fhem /programme/led1.py" kam im Terminal ohne Wiedergabe. Also es kam gleich wieder:
root@raspberrypi:/programme#
Kann es was ausmachen, dass ich das Programm unter root geschrieben habe im Python - Programm von Raspbian?
Moins,
ja, es gibt noch was: Dein Skript greift auf die GPIOs zu, welche normalerweise nur vom User root benutzt werden dürfen. Da könnte/wird das Problem liegen. Ich habe aber bisher noch nicht mit den GPIOs gearbeitet, daher müsste ich mich selbst erst da einlesen. Schmeiß mal in eine Suchmaschine deiner Wahl die Begriffe "raspberry gpio python rechte" rein und lies dich ein ;)
Das ganze ist (per Bash-Skript) auch im Wiki (http://www.fhemwiki.de/wiki/Raspberry_Pi:_GPIOs_schalten) zu finden.
Edith ergänzt: Eingefallen ist mir das, weil ich noch in Erinnerung habe, dass du vor dem Editieren deines o.a. Beitrages noch etwas von "/dev/mem" dort stehen hattest :-X
Gruß
Thomas
Vien lieben Dank nochmal.
Das ist echt toll. Ich werde mich gleich mal drüber machen und schauen, was ich finde und werde schauen.
Es ist immer gut zu wissen, nach was man suchen muss.
Ich werde dann mein Ergebnis/Lösungsweg (wenn es erfolgreich war) hier posten, damit Andere "Neulinge" oder Suchende das Endergebnis dann haben?
Ich bin echt sehr dankbar.
Bis bald Kai aus Oberfranken
Hallo mal wieder.
Ich habe nun mich eingelesen, und den Benutzer fhem die python - Rechte zugewiesen. Nun kann ich auch ohne weiteres unter dem Benutzer fhem oder pi die LED zum leuchten bringen. Außerdem habe ich das Script erneut unter dem Benutzer pi geschrieben und in den Ordner /programme/ abgelegt. Den Schalter habe ich deaktiviert und habe die Schaltung an eine bereits vorhandene LED - Programmierung gesetzt (Die LED ist nicht angeschlossen und geht nicht, dennoch geht die Birne in FHEM an und ich kann damit ein notify programmieren). Wenn ich die LED einschalte sollte das Script ausgeführt werden. Eine funktionsfähige LED geht aus FHEM an. Jetzt muss nur noch die LED über das Script angehen. Das war das Ziel, das ich verfolgte. Aber es tut sich leider dennoch nichts. Ich habe keine Ahnung woran es liegen könnte. Mein Script sollte, so wie es ist auch jetzt, dank Euerer Hilfe, passen. Aber es geht nichts.
Ich bin am überlegen, ob ich das System Raspbian und FHEM erneut aufsetze und von "0" anfange. Dann kann ich immerhin ausschließen, dass in der Vergangenheit (seit Anfang Januar, denn solange habe ich das Ding erst) irgendetwas verstellt habe.
Ich werde mich dann hier wieder melden, ob sich was verändert hat.
zur Info:
in fhem.cfg steht nun:
define LED_1 FS20 11144444 2c
attr LED_1 dummy 1
define act_on_LED_1 notify LED_1 {\
if ("%" ne "off") {\
system("sudo fhem-gpio.sh 22 1 &")\
} else {\
system("sudo fhem-gpio.sh 22 0 &")\
}\
}
define MotionOn1 notify LED_1:on {system("sudo /usr/bin/python /programme/led1.py")}
Das Script led1.py steht in /programme/led1.py und ist (jetzt neu) von dem Benutzer "pi" aus geschrieben. An dem Script hat sich nichts (seit dem letzten Stand) geändert.
Sollte es noch einen Tipp geben, auch wenn er mir in diesem Fall nicht weiterhilft, bin ich sehr dankbar, denn durch solche Hinweise lernt man unheimlich schnell verstehen. Das ist echt super. Vielen Dank
Schönes Wochenende und leibe Grüße aus Oberfranken
Kai
Hallo mal wieder.
Ich habe nun alles neu installiert. Raspbian läuft. FHEM ist installiert.
Kann mir jemand sagen, wie ich weiter machen soll, ich möchte nun nichts verkehrt machen.
Ich vermute, dass ich das letzte mal irgendwelche Rechte verletzt habe. Daher muss es ja jetzt eigentlich gehen.
Kann ich das so machen:
- Python Scrypt schreiben
- abspeichern unter /programme/led.py
- mit dem Befehl im Terminal: "chmod a+rwx /programme" eingeben
- Raspbian neu starten
- in FHEM den Befehl probieren: {system("sudo python /programme/led.py")}
Wäre schön, wenn jemand mal drüber schauen könnte, möchte keinen Fehler machen.
Vielen Dank
Kai aus Oberfranken