【发布时间】:2015-04-16 01:17:49
【问题描述】:
我在 DB 中有 2 个参数:启动和停止。它们的值可以是例如 07:00-23:00 或 23:00-07:00 (07后开始,23后停止或23后开始,07后停止)
在那个时候,一个状态必须是0或1,比如说它是LED
如何创建不会在午夜前后出现混乱的统一逻辑控制器?
我的糟糕实施(不会工作)如下。实际上,我已经尝试了很多变化,但最终还是回到了我现在的位置。..
if curtime >= vv_time_trig1 and curtime <= vv_time_trig2:
logger.info("turning socket on")
logger.debug("#1")
#check current status
#if current is 0
#turn socket on
if vvstatus == 0:
logger.debug("current status off, turning socket on")
GPIO.output(25, GPIO.HIGH)
#check current status
#if current is already 1
#do nothing
elif vvstatus == 1:
logger.info("skiping. already on")
#unhandeled current status
else:
logger.critical("unhandeled vvstatus!")
logger.critical("turning socket off")
GPIO.output(25, GPIO.LOW)
#if current time is before start
#turn off
elif curtime <= vv_time_trig1 and curtime >= vv_time_trig2:
logger.info("turning socket off")
logger.debug("#2")
#check current status
#if current is 1
#turn socket off
if vvstatus == 1:
logger.debug("current status on, turning socket off")
GPIO.output(25, GPIO.LOW)
#check current status
#if current is already 0
#do nothing
elif vvstatus == 0:
logger.info("skiping. already off")
#unhandeled current status
else:
logger.critical("unhandeled vvstatus!")
logger.critical("turning socket off")
GPIO.output(25, GPIO.LOW)
#if current time is after stop
#turn off
elif curtime >= vv_time_trig2:
logger.info("turning socket off")
logger.debug("#3")
#check current status
#if current is 1
#turn socket off
if vvstatus == 1:
logger.debug("current status: %s, turning socket off", vvstatus)
GPIO.output(25, GPIO.LOW)
#check current status
#if current is already 0
#do nothing
elif vvstatus == 0:
logger.info("skiping. already on")
#unhandeled current status
else:
logger.critical("unhandeled vvstatus!")
logger.critical("turning socket off")
GPIO.output(25, GPIO.LOW)
#if current time is before stop
#turn off
elif curtime <= vv_time_trig2 and curtime <= vv_time_trig1:
logger.info("turning socket on")
logger.debug("#4")
#check current status
#if current is 0
#turn socket on
if vvstatus == 0:
logger.debug("current status off, turning socket on")
GPIO.output(25, GPIO.HIGH)
#check current status
#if current is already 1
#do nothing
elif vvstatus == 1:
logger.info("skiping. already on")
#unhandeled current status
else:
logger.critical("unhandeled vvstatus!")
logger.critical("turning socket off")
GPIO.output(25, GPIO.LOW)
更新版本。 确定当前相对于终点的时间位置。如果午夜过去,end 将设置为明天
n1 = datetime.now()
startTrig = datetime(n1.year, n1.month, n1.day, 23, 00, 0)
logger.debug("start: %s",startTrig)
n = datetime.now()
endTrig = datetime(n.year, n.month, n.day, 07, 00, 0)
logger.debug("end: %s",endTrig)
if startTrig > endTrig:
logger.debug("start > stop")
endTrig += timedelta(days=1)
logger.debug("new stop trig: %s",endTrig)
if datetime.now() < endTrig:
if curStatus == 1:
logger.debug("socket %s already on. doing nothing.")
elif curStatus == 0:
logger.debug("socket %s sould be on. flipping switch")
flipSocketStatus(bcmNo,bcmDir)
else:
logger.critical("unhandeled socket %s current status %s",socName,curStatus)
if curStatus == 1:
logger.critical("shutting socket %s down",socName)
GPIO.output(bcmNo, GPIO.LOW)
elif curStatus == 0:
logger.warn("socket %s already off",socName)
else:
logger.critical("unhandeled current status for pin: %s",bcmNo)
logger.critical("forcing socket %s down",socName)
GPIO.output(bcmNo, GPIO.LOW)
else:
logger.critical("unhandeled start-stop rules")
【问题讨论】:
-
无关:内部不要使用本地时间,尽快转换为UTC,here's an example of why。
-
谢谢你的提示,我知道发生了什么。
标签: python time triggers range