Python Bewegungssensor auslesen mit Python (Skript)

0815_typ

Newbie
Registriert
Feb. 2018
Beiträge
6
Hallo Zusammen

An meinem Rapsberry Pi habe ich einen Bewegungsmelder angeschlossen. Um den angeschlossenen Bewegungsmelder auszulesen, ist auf Pin 8 des Raspberry die Datenleitung Out bzw. Data angeschlossen.
Wenn der Melder eine Bewegung erkennt, liegt am digitalen Ausgang Data ein High-Pegel von 3.3V an.

Sobald also 3.3V anliegen (also eine Bewegung erkannt wird) soll das Skript dies auslesen können und ein SIGUSR2 Signal an das node pi-server.js Programm senden.

Folgendes Skript habe ich schon gefunden:

#!/usr/bin/python

#Import
import RPi.GPIO as GPIO
import time
import datetime

print "BEWEGUNGSMELDER"
print ""

#Board Mode: Angabe der Pin-Nummer
GPIO.setmode(GPIO.BOARD)

#GPIO Pin definieren fuer den Dateneingang vom Sensor
PIR_GPIO = 8
GPIO.setup(PIR_GPIO,GPIO.IN)

read=0
wait=0

try:
#PIR auslesen
while GPIO.input(PIR_GPIO)==1:
read=0
print "WARTEN auf Bewegung..."

#Abbruch ctrl+c
while True :
#PIR auslesen
read = GPIO.input(PIR_GPIO)

if read==1 and wait==0:
print "ALARM %s: Bewegung erkannt!" % datetime.datetime.now()
wait=1

elif read==0 and wait==1:
print "WARTEN auf Bewegung..."
wait=0

time.sleep(0.01)

except KeyboardInterrupt:
print "Beendet"
GPIO.cleanup()


Sobald das Skript also ''read==1'' macht, sollte er nicht ''print Alarm'' machen sondern ''SIGUSR2 Signal'' an ''ode pi-server.js Programm'' senden.

Ist das möglich, und falls ja wie?

Ich entschuldige mich für die (wahrscheinlich) teilweise falschen Formulierungen aber leider bin ich noch totaler Anfänger auf dem Gebiet.

Besten Dank im Voraus euch allen!

Liebe Grüsse
Tim
 
Gute Idee, das, was Du da planst. Das ging mir auch schon einmal durch den Kopf; vielleicht magst Du Deine Fortschritte in dem Projekt hier weiterhin dokumentieren!?

Ich bin kein Python-Programmierer, aber mW. müsste problemlos machbar sein was Du planst.
Zuerst solltest Du Dein node-Programm dazu bringen, dass es bei Skript-Start seine eigene Process-ID (PID) in eine Datei an wohldefinierter Stelle schreibt (also irgendwo, wo Dein Python-Skript es wiederfinden kann).
Das bewirkt, dass Du später einfach durch Auslesen der Datei mit Deinem Python-Skript weisst, mit welcher PID das Node-Skript erreichbar ist.

Das Signal selber müsstest Du mit
os.system("kill -SIGUSR2 Process-ID")
auslösen können - da ich aktiv kein Python programmiere, möge mich da ein fähigerer Developer bitte korrigieren oder bestätigen. Anstelle von Process-ID müsste dort natürlich die o.g. PID eingetragen sein (ergo mit einer Variablen arbeiten).

Gerade weil bei Python das Whitespace eine syntaktische Bedeutung hat (weswegen ich Python nicht mag...), solltest Du für Code in diesem Forum die Möglichkeiten für (Inline-)Code nutzen.
 
  • Gefällt mir
Reaktionen: bog und Hayda Ministral
Sobald das Skript also ''read==1'' macht, sollte er nicht ''print Alarm'' machen sondern ''SIGUSR2 Signal'' an ''ode pi-server.js Programm'' senden.

Ist das möglich, und falls ja wie?
moeglich? ja.

von os.system() wuerde ich erst mal die finger lassen. das kann zwar funktionieren, aber sehr gut auch portabilitaet ruinieren oder stattdessen einfach gar nicht funktionieren.

so wuerd eich mir bspw. die pid aehnlich wie hier per psutil.process_iter() besorgen und dann das signal per os.kill(pid, signal.SIGUSR1) (cf. os.kill(), signal, insb. abschnitt SIG*) absenden.

fuer simple derartige signale reicht die vorgehensweise. fuer komplexere signalisierung wuerde ich mir dann langsam mal sowas wie socket.engine anschauen
 
  • Gefällt mir
Reaktionen: Phrasendreher
Zurück
Oben