我正在尝试使用Python线程为IoT设备实现警报触发功能,但是在理解其逻辑方面存在问题。
我的情况:
我有一个传感器,可以向我发送运动和篡改触发器。因此,如果传感器检测到任何运动或篡改,则应触发警报器。
警报器位于我在单独的类中配置的GPIO端口上。警笛只有一个。
现在输入我的代码:
def siren(self):
print("Turning on the siren")
setGPIOvalue(<port>, <value>)
def triggeralarms(self,):
siren_trigger = threading.Thread(target=self.siren)
if (alarmed == True):
# Check for all the sensors if there is any alarms to be triggered
for i in range(len(a.senList)):
# Motion alarm
if (motion == True):
print("-----------------> Setting the motion alarm")
if not siren_trigger.is_alive():
siren_trigger.start()
motion == False
# Tamper alarm
if (tamper == True):
print("-----------------> Setting the tamper alarm")
if not siren_trigger.is_alive():
siren_trigger.start()
tamper == False
警笛中有10秒的延迟。
triggeralarms()函数会继续检查循环中的状态。
问题:
现在的问题是代码有时会触发GPIO进行运动和篡改。因此,运动和篡改都会创建一个线程来触发警报器。
我正在寻找的是以某种方式检查警笛线程是否已经在运行,然后应该再次启动它。
例如,如果运动传感器触发了警报器,并且我也收到了篡改触发器,那么如果警报器线程已经在运行,则篡改不应再次启动警报器线程。
我试图通过检查siren_trigger.is_alive()
来解决问题,但似乎无法正常工作。
我在这里缺少逻辑。