@nezzcarth
Danke für den Vorschlag, dass ist eine gute Idee
Der Vollständigkeit halber möchte ich einmal genauer erläutern, worum es geht.
Ich habe zu Hause eine Alarmanlage, welche bisher lediglich einen lokalen Alarm ausgibt. Diese möchte ich um eine selbstgebaute Übertragungseinrichtung erweitern. Die Events Störung sowie Scharf/Unscharf sollen lediglich in einer Log Datei gespeichert werden, echte Alarme zusätzlich per SMS an mich und weitere Personen versand werden. Da ich mir nicht täglich eine Routine SMS zusenden möchte, suche ich nach einem Weg, dieses Skript ausfallsicher zu machen bzw. eine Benachrichtigung zu erhalten, wenn das System nicht mehr läuft.
Im folgendem Skript habe ich dazu einfach einen Ausgang in die Schleife gebaut. Diesen will ich abgreifen und auf ein frei programmierbares Relais der Alarmanlage legen. Wenn das Programm ausfällt ändert sich der Zustand des Kontaktes und die eigentliche Alarmanlage soll ein Störungsalarm senden.
Ich bin mir nur nicht sicher, wie valide dieses Verfahren ist.
Hier ist das vorläufige Skript. Für Verbesserungsvorschläge im Code bin ich auch sehr dankbar
Code: Alles auswählen
#!/usr/bin/python3
import os
import RPi.GPIO as IO
import time
TelephonNumbers = open("telephonnumbers.txt","r")
IO.setmode(IO.BCM)
AlarmPin = 22
ArmPin = 5
ErrorPin = 17
SystemStatus = 26
IO.setup(SystemStatus, IO.OUT)
IO.setup(AlarmPin, IO.IN, pull_up_down=IO.PUD_DOWN)
IO.setup(ArmPin, IO.IN, pull_up_down=IO.PUD_DOWN)
IO.setup(ErrorPin, IO.IN, pull_up_down=IO.PUD_DOWN)
def ArmUnarm(channel):
if IO.input(ArmPin) == 0:
os.system('echo `date` Scharf >> /home/pi/Alarm/alarm-system-dialer/log.txt')
else:
os.system('echo `date` Unscharf >> /home/pi/Alarm/alarm-system-dialer/log.txt')
def Error(channel):
if IO.input(ErrorPin) == 0:
os.system('echo `date` Stoerung >> /home/pi/Alarm/alarm-system-dialer/log.txt')
else:
os.system('echo `date` Stoerung zurueckgesetzt >> /home/pi/Alarm/alarm-system-dialer/log.txt')
def AlarmDetection(channel):
if IO.input(AlarmPin) == 0:
os.system('echo `date` Alarm >> /home/pi/Alarm/alarm-system-dialer/log.txt')
# for number in TelephonNumbers.readlines():
# os.system('echo Alarmanlage meldet: Einbruch! | sudo gammu-smsd-inject TEXT %s' %(number))
else:
os.system('echo `date` Alarm zurueckgesetzt >> /home/pi/Alarm/alarm-system-dialer/log.txt')
# os.system('echo Alarmanlage meldet: Alarm zurueckgesetzt | sudo gammu-smsd-inject TEXT %s' %(number))
IO.add_event_detect(AlarmPin, IO.BOTH, callback = AlarmDetection, bouncetime = 100)
IO.add_event_detect(ArmPin, IO.BOTH, callback = ArmUnarm, bouncetime = 100)
IO.add_event_detect(ErrorPin, IO.BOTH, callback = Error, bouncetime = 100)
try:
while True:
time.sleep(0.1)
IO.output(SystemStatus, IO.LOW)
except KeyboardInterrupt:
IO.cleanup()