Hauptmenü

Buttons für Servos

Begonnen von pallago, 01 April 2015, 21:19:59

Vorheriges Thema - Nächstes Thema

pallago

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 &")}


pallago

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 &")}

   


   

pallago

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)

myit

#3
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.

myit

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?