這是我在Python中的第一篇文章和第一個項目。我試圖通過控制一些條件硬件傳感器:我該如何連續檢查一段時間內的小時?
- 如果傳感器感知移動,發送電子郵件和睡眠
- elif的時間範圍爲不工作小時,然後睡覺,直到上午9點
- 其他睡眠半秒,等待傳感器
到目前爲止,第一條件和最後一個條件的工作。也就是說,如果沒有移動,重複睡眠(0.5)直到傳感器激活。
Issue:我在中間部分遇到問題,時間不在9-5之間。如果我在9或5之前運行代碼,它會一直睡到9am達到預期的程度,但是如果代碼已經在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"
您的代碼示例中有很多縮進問題,我只指出它是因爲您說這是您的第一個Python項目,所以我想讓你有機會在人們提供實際邏輯幫助之前給你一個清理格式的機會 –
也可以通過在頂部添加'from datetime import datetime'和'datetime.now()。 ().hour' –
我假設這是基於這個設備和代碼? http://learn.adafruit.com/adafruits-raspberry-pi-lesson-12-sensing-movement/software –