这是我的第一篇文章和第一个 Python 项目。我试图通过多种条件控制硬件传感器:
- 如果传感器感应到运动,发送电子邮件并睡觉
- elif时间范围不在工作时间之间,然后睡到早上9点
- 否则休眠半秒并等待传感器
到目前为止,第一个条件和最后一个条件都有效。也就是说,如果没有运动,重复 sleep(0.5) 直到传感器激活。
问题:我在时间不在 9 点到 5 点之间的中间部分遇到问题。如果我在 9 点之前或 5 点之后运行代码,它会一直休眠到上午 9 点按预期到达,但如果代码已经在 9 点到 5 点之间运行(等待移动),则中间条件永远不会触发。它卡在睡眠(0.5)上。
我没有那么有经验,但我有一个模糊的想法,即第二个过程应该有助于跟踪时间。有什么建议么?这是代码。
def pir_init():
while True:
m = datetime.datetime.now().time().minute #loop through for current time
h = datetime.datetime.now().time().hour
if h < 9:
print("Sleeping...")
time_sleep = (9 - h) * 3600
time.sleep(time_sleep)
elif h > 16:
print("Sleeping...")
time_sleep = ((24 - h) + 9) * 3600
time.sleep(time_sleep)
elif io.input(pir_pin):
print("PIR ALARM")
send_gmail()
time.sleep(10) #cooldown to prevent email spew
else:
print "Waiting..."
time.sleep(0.5) #sleep and wait for movement
print m
print "Loop End"
# main
if time_elements[0] > '0' and time_elements[0] < '6': #Weekdays
if get_hour > 8 and get_hour < 17: #Hour Range
pir_init()
elif get_hour > 16:
print("Initialization at 9am...")
time_sleep = ((24 - get_hour) + 9) * 3600
time.sleep(time_sleep)
pir_init() #initiate sensor
elif get_hour < 9:
print("Initialization at 9am...")
time_sleep = (9 - get_hour) * 3600
time.sleep(time_sleep)
pir_init()
else:
#to be completed
print time_elements[0]
print "bad weekday"