Hallo zusammen,
ich habe mir mit "Glancr", einem Bewegungsmelder und einem Relais einen SmartMirror gebaut.
Soweit bin ich zufrieden, aber das Skript, welches für das Zusammenspiel zwischen Bewegungsmelder und Relais zuständig ist, funktioniert nicht so wie ich es will. Vorab: An dem Relais gehen zwei Kabel weg, die an der Ein-/Ausschalt-Taste des Monitors gelötet ist. (Es schaltet ihn also einfach nur ein und aus, weil der LCD-Controller den Monitor nicht automatisch in den Standby schickt, wenn das HDMI Signal weg ist.)
Okay, und nun das Skript:
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import datetime
#Board Mode anstelle GPIO BCM Nummer
GPIO.setmode(GPIO.BOARD)
# GPIO 7 = Bewegungsmelder
# GPIO 11 = Relais
GPIO_PIR = 7
GPIO_MON = 11
print "Bewegungsmelder Test (CTRL-C zum Beenden)"
print "========================================="
# GPIO als "Input" festlegen
GPIO.setup(GPIO_PIR,GPIO.IN)
GPIO.setup(GPIO_MON,GPIO.OUT)
Current_State = 0
Previous_State = 0
try:
print "%s: Sensor initialisieren ..." % datetime.datetime.now()
# Warten bis Sensor sich meldet
while GPIO.input(GPIO_PIR)==1:
Current_State = 0
print "%s: Fertig! Warte auf Bewegung..." % datetime.datetime.now()
# Schleife bis CTRL+C
while True :
#Status von Sensor auslesen
Current_State = GPIO.input(GPIO_PIR)
if Current_State==1 and Previous_State==0:
print " %s: Bewegung erkannt!" % datetime.datetime.now()
Previous_State=1
GPIO.output(GPIO_MON, GPIO.LOW)
time.sleep(1)
GPIO.output(GPIO_MON, GPIO.HIGH)
time.sleep(1)
elif Current_State==0 and Previous_State==1:
print " %s: Fertig! Warte auf Bewegung..." % datetime.datetime.now()
Previous_State=0
GPIO.output(GPIO_MON, GPIO.LOW)
time.sleep(1)
GPIO.output(GPIO_MON, GPIO.HIGH)
time.sleep(1)
except KeyboardInterrupt:
print " Exit"
GPIO.cleanup()
Alles anzeigen
Nach einem reboot bleibt das Relais auf "1", anstatt nur kurz "1, warten, 0". Wenn ich das Skript von Hand in der Konsole starte, funktioniert komischerweise alles Gestartet wird das Skript mit "sudo crontab -e":
EDIT: Hab vergessen in crontab den kompletten Pfad zum Python-Interpreter anzugeben. Leider funktioniert auch das nicht..
EDIT2: Hab den Fehler gefunden. Durch die unzähligen Versuche das Skript zum autostart zu bewegen, habe ich wohl in der
den Eintrag nicht entfernt, als ich es mit crontab versucht hab. Jetzt ist das Skript nur als (root) cronjob eingetragen und funktioniert :thumbs1:
EDIT3: Für alle die das Skript einfach nur per Copy&Paste verwenden: Wenn das Skript startet und man sich gerade (oder kurz davor) vor dem Bewegungsmelder befindet, "hängt" das Skript und hält das Relais auf "1". Liegt daran, dass das Poti am Bewegungsmelder (zumindest bei mir) auf Maximum steht, also rund 4-5 Minuten. Warum das Skript dann aber das Relais auf "1" hält, weiß ich leider nicht, aber wenn man den Bewegungsmelder abdeckt oder den Raum verlassen hat, läuft alles problemlos.