Hallo zusammen,
ich möchte über einen PIR Sensor am GPIO-PIN26 einen anderen GPIO Pin HIGH/LOW schalten (startet WebRadio).
Nur soll der andere GPIO nur geschaltet werden wenn nicht bereits zuvor erfolgt.
Zudem soll der GPIO automatisch wieder auf LOW gehen, wenn z.B. 5min. keine Bewegung/Motion am PIR-PIN26. (also WebRadio wieder aus wenn 5min. keine da gewesen)
In Script habe ich die 5min. zum test erst mal auf 15sec gesetzt.
Ich bin nicht der python Profi!
Etwas geht schon.
Nur sobald die 15sec. abgelaufen sind bzw. "TurnOff()" durchlaufen ist, dann wird in meinem Script nie wieder ein Motion am PIN26 registiert.
Aber warum?
Hat jemand einen Tipp für mich? Wenn es einfacher geht, bin ich auch für Tipps dankbar
Danke
Code
import RPi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BOARD)
PIR_PIN = 26
OnTimeInSeconds=15
Counter = 0
GPIO.setup(PIR_PIN, GPIO.IN)
def TurnOn():
print "TurnOn"
os.system('sudo touch /home/pi/motion_on')
#Später GPIO für Radio HIGH
def TurnOff():
print "TurnOff"
os.system('sudo rm /home/pi/motion_on')
#Später GPIO für Radio LOW
def MOTION(PIR_PIN):
global Counter
tme=time.localtime()
timeString=time.strftime("%d.%m.%Y %H:%M:%S", tme)
print 'Motion Detected: ' + timeString
with open('motion.log','a') as f: f.write('Motion Detected: ' + timeString + '\n')
if os.path.isfile('/home/pi/motion_on'):
print "Nothing"
else:
TurnOn()
Counter=0
print str(Counter)
def Check():
global Counter
print str(Counter)
if (Counter<OnTimeInSeconds-1):
Counter+=1
else:
print "Check" + str(Counter)
TurnOff()
print "...PIR Module Test (CTRL+C to exit)..."
time.sleep(2)
print "...Ready..."
Counter=0
try:
GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=MOTION)
while 1:
#time.sleep(100)
time.sleep(1)
if os.path.isfile('/home/pi/motion_on'):
Check()
except KeyboardInterrupt:
print "... Quit..."
Alles anzeigen