これは私の最初の投稿であり、Python での最初のプロジェクトです。さまざまな条件でハードウェア センサーを制御しようとしています。
- センサーが動きを感知したらメールを送ってスリープ
- elif 時間範囲が就業時間内でない場合は、午前 9 時までスリープします
- そうでなければ0.5秒間スリープしてセンサーを待つ
これまでのところ、最初の条件と最後の条件が機能しています。つまり、動きがない場合は、センサーがアクティブになるまで sleep(0.5) を繰り返します。
問題:時間が 9 時から 5 時の間ではない中間部分に問題があります。コードを 9 時前または 5 時以降に実行すると、意図したとおり午前 9 時に到着するまでスリープしますが、コードがすでに 9 時から 5 時の間に実行されている場合 (移動を待機している場合)、中間条件はトリガーされません。スリープ(0.5)でスタックします。
私はそれほど経験がありませんが、2 番目のプロセスが時間を追跡するのに役立つはずだという漠然とした考えがあります。助言がありますか?これがコードです。
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"