ich habe bei meiner Idee bzw. bei dessen Umsetzung so ein wenig meine Probleme.
Aber fangen wir erstmal an, mit dem was ich vor habe und wie die Hardware bestückt ist:
Ich habe ein Gehäuse hier liegen, welches über einen Sabotagekontakt verfügt. Dieser Sabotagekontakt soll überwacht werden über den Raspberry Pi. Sobald dieser ausgelöst wird, soll eine E - Mail versendet werden. Aber da man das Gehäuse auch mal gerne öffnen würde ohne gleich E-Mail und Co in Gang zu setzen verfügt das Gehäuse, nach der Nachrüstung über einen Schlüsselschalter. Sobald ich diesen betätige soll ein Auslösen des Sabotagekontaktes ignoriert werden. Aber das Betätigen des Schlüsselschalters soll in beiden Fällen (beim Öffnen und Schließen) eine Aktion ausführen. Für die Zukunft soll einfach Protokolliert werden, dass der Schlüssel betätigt wurde (mit Zeit und Datum) und welcher Vorgang (Freischalten / Sperren). Für den Versuchszweck reicht mir aber erstmal ein einfache Print auf dem Bildschirm.
Das gleiche gilt fürs erste auch für den Sabotagekontakt. Ich möchte jetzt nicht 1.000 Mails verschicken. Ein einfaches Print reicht hier auch wieder aus.
Sabotagekontakt = GPIO21
Schlüsselschalter = GPIO20
Hier wäre auch mein Code für diese Zwecke:
Code: Alles auswählen
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
bounce_time = 200
PIN_A = 20
PIN_B = 21
a_value = 0
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_A, GPIO.IN)
GPIO.setup(PIN_B, GPIO.IN)
def inputLow(channel):
if GPIO.input(PIN_A) == GPIO.LOW:
if GPIO.input(PIN_B) == GPIO.HIGH:
print ("Tuer offen!")
else:
print ("Schloss offen!")
def main():
GPIO.add_event_detect(PIN_A, GPIO.BOTH, callback=inputLow, bouncetime=bounce_time)
GPIO.add_event_detect(PIN_B, GPIO.BOTH, callback=inputLow, bouncetime=bounce_time)
while True:
time.sleep(1)
if __name__ == '__main__':
try:
main()
except (KeyboardInterrupt, SystemExit):
print "\nQuit\n"
GPIO.cleanup()
Jetzt kommt das große Aber, er führt die Print - Ausgabe nicht nur 1x aus, sondern solange bis sich am Zustand der Melder (Sabotagekontakt bzw. Schlüsselschalter) ändert. Und das ist eigentlich nicht gewollt. Es hängt vermutlich mit der while Schleifen zusammen oder? Aber diese muss ja vorhanden sein, damit das Progamm auch dauerhaft läuft. Es soll in Zukunft als Hintergrunddienst laufen.
Ich hoffe mir kann man irgendwie helfen. Danke schon mal im vorraus.
Michael