Hallo und guten Abend,
ich habe mich an einer "Haussteuerung" versucht.
Also folgender Sachverhalt:
Ich habe einen Bewegungsmelder, der mir auf meinen Pi ein Input von einer halben Minute gibt (natürlich über Relais, sodass er seine 3.3V bekommt), sobald eine Bewegung aufkommt.
Wenn ich einen Input bekomme, dann schalte ich Relais, die in meinem Fall einfach nur Licht anmachen.
Nach der halben Minute von dem Bewegungsmelder möchte ich noch eine weitere halbe Minute die Relais halten. Was ich bisher auch ganz gut hinbekomme.
Wo ich jetzt allerdings scheitere, ist wenn der Bewegungsmelder erneut ein Signal gibt, dann geht das Licht kurz an und wieder aus nachdem er seine halbe Minute zusätzlich die Relais angesteuert hat.
Klar kann man das so lassen, aber ich finde es besser, wenn es komplett durch gängig anbleibt bzw. die halbe Minute von dem Pi nur dann geschalten wird, wenn das Signal vom Melder wieder weg ist.
Mein jetziger Code kommt aus einem Blog, wo ein PIR Sensor im Einsatz war:
(Den habe ich nur auf meine Ein- und Ausgänge angepasst.)
#!/usr/bin/python
import time, sys
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
# Pin of PIR OUT
PIR = 23
# Init PIR for input
def initPIR(PIR):
print "Wait for signal..."
while GPIO.input(PIR) == 1:
print "PIR Ready"
return 0
# Action if motion detected
def motion():
GPIO.setup(21, GPIO.OUT)
GPIO.output(21, GPIO.LOW)
return
# Action if motion is gone
def motionGone():
GPIO.setup(21, GPIO.OUT)
time.sleep(15)
GPIO.output(21, GPIO.HIGH)
return
GPIO.setup(PIR, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
PirPreviousState = 0
PirCurrentState = initPIR(PIR)
try:
while True:
time.sleep(0.1)
PirCurrentState = GPIO.input(PIR)
if PirCurrentState == 1 and PirPreviousState == 0:
# PIR is triggered
motion()
PirPreviousState=1
elif PirCurrentState == 0 and PirPreviousState == 1:
# PIR has returned to ready state
motionGone()
PirPreviousState=0
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.cleanup()
exit()
Alles anzeigen
Also wüsste ich gern, wie ich den Code so schreibe, dass die Zeit immer wieder zurück gesetzt wird, sobald der Bewegungsmelder kein Signal mehr gibt auch nach erneuten Signal.
Vielen Dank!