我有两个参数在数据库:启动和停止。它们的值可以是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)
更新版本。 确定相对于终点的当前位置。如果午夜过去,就定在明天结束
^{pr2}$
有两种情况:当前时间在给定时间之间(时钟方向)或外部(想象时钟周期):
输出
^{pr2}$更新:根据您的更新
这看起来更好,我唯一困惑的是你的
if datetime.now() < endTrig
条件。在如果我仍然误解了您,请更正我,但您当前的条件看起来像是:
您提到的状态必须是0或1。基于此,我希望你的条件看起来像:
^{pr2}$相关问题 更多 >
编程相关推荐