Hallo,
ich habe vor meine RaspberryCamera in FHEM einzubinden und Servos über FHEM zu steuern.
Wie man die Kamera als Stream einbinden kann, habe ich bereits gefunden (http://forum.fhem.de/index.php?topic=30765.0) - das klappt auch wunderbar.
Die Servos kann ich über python-Skripts ansteuern, sodass sich der Servo immer um ein Stückchen bewegt, sobald das Skript ausgeführt wird. (klappt auch)
Das Skript kann ich auch aus FHEM ausführen (habe mir einen dummy erstellt, der bei Klick auf "on" bzw "off" einfach ein Skript ausführen lassen (klappt auch)).
define LED3 dummy
attr LED3 setList on off
define off_LED3 notify LED3:off {\
system("sudo python /opt/fhem/LED.py --pin 38 --state 0 &")}
define on_LED3 notify LED3:on {\
system("sudo python /opt/fhem/LED.py --pin 38 --state 1 &")}
Nun zur Anfängerfrage:
Wie kann ich denn in FHEM Buttons implementieren ?
Ich möchte einen Pfeillinks, Kreis (für Mittelposition), Pfeilrechts, Pfeilrauf, Kreis (für Mittelposition), Pfeilrunter - (habe ein Icon definiert, sieht ganz gut aus, jedoch:
wenn ich nun auf diese Pfeiltasten klicke, soll das Pythonskript ausgeführt werden und nicht die Details aufgerufen werden)
Siehe Bild - Problem: sobald ich "rechts" definiere, kommt eine Fehlermeldung:
Bad regexp: Unmatched ( in regex; marked by <-- HERE in m/^Richtung:rechts{ system( <-- HERE "sudo$/ at ./FHEM/91_notify.pm line 39, <$fh> line 55.
Code vom Bild:
define webcam weblink iframe http://127.0.0.1:8080/stream
attr webcam group camera_group
define Richtung dummy
attr Richtung setList links rechts
define links_Richtung notify Richtung:links {\
system("sudo python /opt/fhem/LED.py --pin 30 --state 0 &")}
Hallo,
anbei ein Lösungsvorschlag für einen Servo:
1) Installiere Servoblaster (z.B. : http://cihatkeser.com/servo-control-with-raspberry-pi-in-5-minutes-or-less/)
2.) Öffne Servoblaster mit sudo ./servod (ganz wichtig, sonst funktioniert es nicht – ich muss noch herausfinden wieso)
3.) Schließe Servo an, hier: GPIO4 – pin7 – in servod: 0
4.) Modifiziere sudo nano /etc/sudoers und ergänze folgende Zeile, damit fhem das Python Skript als sudo aufrufen darf:
fhem ALL=NOPASSWD: /usr/bin/python /opt/fhem/servo.py*
5.) Lege ein Python Skript an:
sudo nano /opt/fhem/servo.py
#!/usr/bin/python
import subprocess
import time
from argparse import ArgumentParser
parser = ArgumentParser(description='Servo movement')
parser.add_argument('--movement', dest='movement', default='50', type=str)
parser.add_argument('--port', dest='port', default='0', type=str)
args = parser.parse_args()
# exclude problems at boundaries
if int(args.movement)==0:
args.movement = str(5)
if int(args.movement)==100:
args.movement = str(95)
# run command
subprocess.call("sudo echo " + args.port + "=" + args.movement + "% > /dev/servoblaster", shell=True)
6.) Modifziere fhem.cfg
define servo1 dummy
attr servo1 group camera_group
attr servo1 setList state:slider,0,5,100
attr servo1 webCmd state
#Python Skript
define Notify_servo1 notify servo1 {\
system("sudo python /opt/fhem/servo.py --movement %EVTPART0 --port 0 &")}
Damit es auch direkt nach dem Booten funktioniert muss man in /etc/rc.local folgendes eintragen (vor exit0 ;) ):
sudo /home/pi/PiBits/ServoBlaster/user/servod
(es gilt natürlich das Installationsverzeichnis anzupassen)
Hallo,
ich erhalte folgenden Fehler:
2017.12.19 20:33:10 3: Notify_servo1 return value: -1
Traceback (most recent call last):
File "/opt/fhem/servo.py", line 10, in <module>
if int(args.movement)==0:
ValueError: invalid literal for int() with base 10: '%EVTPART0'
hat jemand eine Idee?
... es muss heißen $EVTPART0 ..., dann funktioniert es bei mir.
Hallo,
leider musste ich fhem neu aufsetzen und jetzt funktioniert die Servos nicht mehr. Jedoch liegt dies vermutlich nicht an fhem, da Servoblaster auch auf echo 0=50% > /dev/servoblaster
über das Terminal nicht reagiert. Es wird aber kein Fehler ausgegeben. Habe zwischenzeitlich die Motoren folgendermaßen https://tutorials-raspberrypi.de/raspberry-pi-servo-motor-steuerung/
getestet, das funktioniert alles.
Hat jemand eine Idee, was ich falsch mache?