Hi
I have made a python alarm program, with a simple input switch to activate/ deactive the alarm.
Including some time delay, when activating alarm, and also when setting off the horn when PIR detects movement.
The python program is started as an demon thread at power on, by “/ETC/ RC.Local”
It all works fine, -when it works. But sometimes it doesn’t. And that’s a bit frustrating, because why is it not always working? Can it be a resource issue in the CPU?
(Sorry for danish words here and there)
I have made a python alarm program, with a simple input switch to activate/ deactive the alarm.
Including some time delay, when activating alarm, and also when setting off the horn when PIR detects movement.
The python program is started as an demon thread at power on, by “/ETC/ RC.Local”
It all works fine, -when it works. But sometimes it doesn’t. And that’s a bit frustrating, because why is it not always working? Can it be a resource issue in the CPU?
(Sorry for danish words here and there)
Code:
#!/usr/bin/env python 3import RPi.GPIO as GPIOimport threadingimport timePIR_pin = 27AlarmAktiv_Switch = 18BuzzerOutput = 20 #These output are defined by RPI Relay Board HornOutput = 21 #These output are defined by RPI Relay BoardAlarm_Activated = 26 #These output are predefined by RPI Relay BoardGPIO.setwarnings(False)GPIO.setmode(GPIO.BCM)GPIO.setup(PIR_pin, GPIO.IN, GPIO.PUD_DOWN)GPIO.setup(AlarmAktiv_Switch, GPIO.IN)GPIO.setup(BuzzerOutput, GPIO.OUT, initial=GPIO.HIGH) #ensuring outout starts at lowGPIO.setup(HornOutput, GPIO.OUT, initial=GPIO.HIGH) #ensuring outout starts at lowGPIO.setup(Alarm_Activated, GPIO.OUT, initial=GPIO.HIGH) #ensuring outout starts at lowMovement = 0AlarmAktiv = 0 #Bool evtAlarm_Horn_Set = 0Alarm_Horn_Max_tid = 0def delay_Horn_function(): #Thread 1 (t1) if Alarm_Horn_Set ==1: time.sleep(15) if not GPIO.input(AlarmAktiv_Switch): print ("Alarm horn") GPIO.output(HornOutput, GPIO.LOW) GPIO.output(BuzzerOutput, GPIO.HIGH) #stop buzzer heredef delay_Horn_Max(): #Thread 2 (t2) if Alarm_Horn_Max_tid ==1: time.sleep(900) #Maybe set to: 15min (15*60=900 sec.) print ("Alarm max tid") GPIO.output(HornOutput, GPIO.HIGH) GPIO.output(Alarm_Activated, GPIO.HIGH) #turn off 12 VDC PS, og derved alarm aktiveret signal if __name__ == "__main__": while True: if not GPIO.input(AlarmAktiv_Switch) and AlarmAktiv ==0: #Here alarn is activated time.sleep(7) print ("Alarm Aktiveret") # AlarmAktiv = 1 #Alarmen er aktiveret, efter en forsinkelse GPIO.output(Alarm_Activated, GPIO.LOW) #LOW actually trigger Reley "ON"(inverted) time.sleep(10) #Timedelay, from indication 'Alarm active', till actual active if AlarmAktiv ==1 and Movement ==0: #Hvis alarmen er aktiveret if GPIO.input(PIR_pin): #PIR Input is monitored, -any activity? Movement = 1 #Movement detected GPIO.output(BuzzerOutput, GPIO.LOW) #LOW actually trigger Reley "ON"(inverted) print ("Movement detekteret") #BuzzerOutput = 1 #Delay inden horn aktiveres if Movement == 1 and Alarm_Horn_Set ==0: Alarm_Horn_Set =1 t1 = threading.Thread(target=delay_Horn_function, args=()) t1.start() #Max horn tid: if Alarm_Horn_Set ==1 and Alarm_Horn_Max_tid ==0: Alarm_Horn_Max_tid =1 t2 = threading.Thread(target=delay_Horn_Max, args=()) t2.start() if GPIO.input(AlarmAktiv_Switch): #Deaktiver og reset variabler: AlarmAktiv = 0 Movement = 0 # Alarm_Horn_Set = 0 Alarm_Horn_Max_tid = 0 GPIO.output(BuzzerOutput, GPIO.HIGH) GPIO.output(HornOutput, GPIO.HIGH) GPIO.output(Alarm_Activated, GPIO.HIGH) #Evt else her, med nulstilling af alt print ("Alarm deaktiveret")
Statistics: Posted by MBBach — Sun Jan 26, 2025 7:03 pm — Replies 2 — Views 50