Quantcast
Viewing all articles
Browse latest Browse all 4810

Python • python alarm program, -resource issue?

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)

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



Viewing all articles
Browse latest Browse all 4810

Trending Articles