folgendes zum Aufbau, am Raspberry hängt ein PIR. Dieser schaltet einen Monitor über HDMI-CEC ein und aus. Dieser Monitor kann allerdings auch über eine Webschnittstelle vom Raspberry aktiviert werden. Im Script ist es so vorgesehen, dass das PHP-Script Vorrang hat und den PIR ausser Kraft setzt solange der Monitor über die Webschnittstelle aktiviert ist.
Das mit dem ausser Kraft setzten funktioniert genau so wie es soll, sobald ich allerdings den Monitor über die Webschnittstelle wieder deaktivier soll der PIR diesen wieder ein- und ausschalten. Das klappt leider nicht und ich muss das PIR-Script wieder neu starten.
Ich hoffe jemand hat eine Idee was mir noch in meinem Script fehlt, dass der PIR diese wieder von alleine macht.
Hier noch der Code:
Code: Alles auswählen
#!/usr/bin/python
# Import der Python libraries
import RPi.GPIO as GPIO
import time
import datetime
import subprocess
import os.path
# GPIO definieren
PIR_PIN = 7
Led = 11
aktiv = '/var/exis/aktiv.txt'
#Board Mode
GPIO.setmode(GPIO.BOARD)
#GPIO als Input definieren
GPIO.setup(PIR_PIN, GPIO.IN)
#Led GPIOs definieren
GPIO.setup(Led, GPIO.OUT)
GPIO.output(Led, GPIO.HIGH)
print "Displaysteuerung (CTRL-C zum Beenden)"
print "=================================="
print "%s: Sensor initialisieren ..." % datetime.datetime.now()
# Warten bis Sensor sich meldet
while GPIO.input(PIR_PIN) != 0:
time.sleep(0.1)
print "%s: Fertig! Warte auf Bewegung..." % datetime.datetime.now()
# Schleife bis CTRL+C
def MOTION (PIR_PIN):
if os.path.isfile(aktiv) == False and GPIO.input(PIR_PIN) == 1:
print " %s: Bewegung erkannt!" % datetime.datetime.now()
GPIO.output(Led, GPIO.LOW) #LED an
#Standby deaktivieren
subprocess.Popen('echo "on 0" | sudo cec-client -s -d 1', shell=True)
time.sleep(0.5)
subprocess.Popen('sudo chvt 6 && sudo chvt 7', shell=True)
if GPIO.input(PIR_PIN) == 0:
print "%s: Fertig! Warte auf Bewegung..." % datetime.datetime.now()
# Standby aktivieren
subprocess.Popen('echo "standby 0" | sudo cec-client -s -d 1', shell=True)
GPIO.output(Led, GPIO.HIGH)#LED aus
try:
GPIO.add_event_detect(PIR_PIN, GPIO.BOTH, callback=MOTION)
while True:
time.sleep(60)
except KeyboardInterrupt:
print "Exit!"
GPIO.cleanup()
Gruß
Philipp