Programmierhilfe: GPIO Befehl mit motion verbinden

  • Hallo,


    ich habe einen RPi 3 mit Raspbian. Angeschlossen ist eine NoIR V2, die durch "motion" ein Video aufnimmt, wenn die Kamera Bewegung registriert.

    Ich möchte nun ein Lisiparoi Infrarot-Modul so schalten, dass das Licht angeht, wenn die Kamera eine Bewegung bemerkt, ergo wenn die Kamera aufnimmt.

    Ich weiß, wie ich die Kamera anschließe und wie ich sie über GPIO an und ausstelle. Aber wie kann ich das nun mit motion kombinieren?

    Schreibe ich beispielsweise eine Licht_an.py

    Python
    1. import RPi.GPIO as GPIO
    2. GPIO.setmode(GPIO.BOARD)
    3. GPIO.setup(4, GPIO.OUT)
    4. GPIO.output(4, GPIO.HIGH)

    und lasse die, wenn die Kamera Bewegung wahrnimmt, laden? (und hinterher dann trivial Licht_aus.py)

    Falls ja:

    Wie mache ich das? Wo muss ich das hinschreiben?


    Für einen hilfreichen Beitrag wäre ich euch dankbar.

    Viele Grüße, Tom

  • Moin,

    nur mal aus Interesse: Wie stellt die Kamera denn eine Bewegung fest wenn kein Licht an ist?

    Oder umgekehrt: Wenn sie eine Bewegung festgestellt hat muß sie ja vorher etwas aufgenommen haben, wozu dann noch das Licht einschalten?

  • Angeschlossen ist eine NoIR V2, die durch "motion" ein Video aufnimmt, wenn die Kamera Bewegung registriert.


    Ich möchte nun ein Lisiparoi Infrarot-Modul so schalten, dass das Licht angeht, wenn die Kamera eine Bewegung bemerkt, ergo wenn die Kamera aufnimmt.

    Wenn du "motion" also das Programm verwendest, dann nutze ein on_* Event zum schalten des GPIO's bzw zum ausführen eines Scripts.

    Siehe dazu http://www.lavrsen.dk/foswiki/…/Motion/ConfigFileOptions bzw http://www.lavrsen.dk/foswiki/…w/Motion/ExternalCommands

  • Vielen Danke meigrafd  :thumbup: Da ich RaspberryPi/Python-Anfänger bin frage ich lieber nochmal nach:


    Also speicher ich den oben beschriebenen Code als licht_an.py in /etc/motion/

    Und ändere in der motion.conf

    on_event_start %f /etc/motion/licht_an.py

    on_event_end %f /etc/motion/licht_aus.py


    Habe ich das so richtig verstanden?


    Gruß, Tom

  • Habe ich das so richtig verstanden?

    Okay, so scheint es noch nicht gestimmt zu haben.

    Die Dateien licht_an.py und licht_aus.py tun definitiv was sie sollen.

    Meinen Vermutungen:

    1. Ich habe in der Zeile on_event_start %f /etc/motion/licht_an.py irgendetwas falsch geschrieben, irgendetwas nicht geschrieben?

    2. Die Datei muss in den Ordner /etc/motion/ um zu funktionieren. Ich habe aber nicht die Rechte sie dahinzuschieben.


    Hat jemand einen Tipp?


    Gruß, Tom

  • (d)rwxr-xr-x pi pi und

    (d)rwxr-xr-x roor root

    sind eben zwei verschiedene Paar Schuhe.


    Das -w- Schreibrecht des Eigentümers erlaubt nicht nur das Ändern eines File(inhaltes), sondern auch das Erstellen eines Files und das Schreiben (Ausgeben) auf ein Device (das ja auch nur ein iNode im Filesystem ist).


    Und so ein Wunderwuzzi ist sudo-root auch nicht, wenn er keine Schreibrechte aus dem übergeordnetem Verzeichnis hat.


    Servus !

  • lass mal das %f weg. In der Doku (Links von meigrafd) und in der Issue #357 steht es nicht dabei.

    also das steht in der motion.conf

    Code
    1. # Command to be executed when a movie file (.mpg|.avi) is created. (default: no$
    2. # To give the filename as an argument to a command append it with %f
    3. on_movie_start %f /home/pi/Licht_an.py

    Ich probiere es gleich trotzdem mal ohne aus.


    Ein anderer Gedanke:

    on_movie_start ist doch richtig oder? es gäbe ja auch noch on_event_start.


    (d)rwxr-xr-x pi pi und

    (d)rwxr-xr-x roor root

    sind eben zwei verschiedene Paar Schuhe.


    Das -w- Schreibrecht des Eigentümers erlaubt nicht nur das Ändern eines File(inhaltes), sondern auch das Erstellen eines Files und das Schreiben (Ausgeben) auf ein Device (das ja auch nur ein iNode im Filesystem ist).


    Und so ein Wunderwuzzi ist sudo-root auch nicht, wenn er keine Schreibrechte aus dem übergeordnetem Verzeichnis hat.

    war das an mich gerichtet? Wenn ja was soll ich machen? Rechte ändern?


    Gruß, Tom

  • Code
    1. # Command to be executed when a movie file (.mpg|.avi) is created. (default: no$
    2. # To give the filename as an argument to a command append it with %f
    3. on_movie_start %f /home/pi/Licht_an.py

    Du willst aber kein *.mpg/avi deinem Script übergeben, sondern einfach nur ein Script bei diesem Event ausführen. Also lass %f weg!


    Desweiteren muss in Deinem Fall ein korrekter Shebang im File gesetzt sein, sonst bringen die Ausführrechte (x) nichts. Laut Beitrag#1 hast du keinen Shebang.

    Alternativ die Datei direkt dem Interpreter übergeben: on_movie_start /usr/bin/python /home/pi/Licht_an.py

    Case Sensitiv! Licht_an.py ist eine andere Datei als licht_an.py


    Übrigens würde auch eine einzige Scriptdatei reichen, die dann per Argument unterschiedliche Aktionen ausführen würde:

    on_event_start /usr/bin/python /etc/motion/licht.py an

    on_event_end /usr/bin/python /etc/motion/licht.py aus

  • Den fehlenden Shebang hab ich glatt übersehen.


    on_movie_start ist doch richtig oder? es gäbe ja auch noch on_event_start.


    Ich bin mir nicht sicher, ob on_movie_start wirklich beim Start der Aufnahme greift oder erst nachdem ein Video erstellt wurde, denn da steht:


    # Command to be executed when a movie file (.mpg|.avi) is created.


    Deshalb würde ich es erst mit on_event_start zum laufen bringen und bei Bedarf kannst Du ja dann mit on_movie_start testen wie sich das nun genau verhält. :denker: