我在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)
更新后的版本。确定相对于终点的当前位置。如果午夜过去,则将结束日期设置为明天
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")
有两种情况:当前时间在给定时间(顺时针)或外部(想象时钟圈)之间:
#!/usr/bin/env python
from datetime import datetime
def in_between(now, start, end):
if start < end: # e.g., "07:00-23:00"
return start <= now < end
elif end < start: # e.g., "23:00-07:00"
return start <= now or now < end
else: # start == end
return True # consider it 24 hour interval
now = datetime.now().time()
for date_range in ["07:00-23:00", "23:00-07:00"]:
start, end = [datetime.strptime(s, "%H:%M").time()
for s in date_range.split("-")]
not_ = '' if in_between(now, start, end) else 'not '
print("{now:%H:%M} is {not_}in between {date_range}".format(**vars()))
02:26 is not in between 07:00-23:00
02:26 is in between 23:00-07:00
我试图验证一个逗号分隔的数字列表1-384唯一(不重复)。 即。 1, 2, 3, 5, 6, 7, 9有效 1-3, 5-7, 9有效 2,2,6无效 2,无效 1, 2, 3, 4, 15, 6, 7, 385无效,因为最后一个数字大于384 我尝试了以下RegEx模式,但还不够:
主要内容:标签属性,JSF验证整数范围实例标签用于验证特定范围内的长值。 以下代码显示如何使用标记 - 标签属性 属性 说明 minimum 在可选范围内最小长度值 maximum 在可选范围内最大长度值 JSF验证整数范围实例 打开 NetBeans IDE 创建一个Web工程:ValidateIntRange,其目录结构如下所示 - 创建以下文件代码,文件:index.xhtml 的代码内容如下所示 - 文件:result.xhtml
如何为两个数字的范围设置验证。我想将第一个数字的最大值设置为第二个数字的值,将第二个数字的最小值设置为第一个numb的值。这是我的js代码: 和超文本标记语言: 请帮忙谢谢
主要内容:标签属性,JSF验证整数范围实例标签用于验证一个浮点()值的范围。 以下代码显示如何使用标记 标签属性 属性 说明 minimum 在可选范围内最小长度值 maximum 在可选范围内最大长度值 JSF验证整数范围实例 打开 NetBeans IDE 创建一个Web工程:ValidateDoubleValueRange,其目录结构如下所示 - 创建以下文件代码,文件:index.xhtml 的代码内容如下所示 - 文件:resu
问题内容: 我最近开始学习python3。 在 python 2 中,可以使用函数来分配列表元素。 如使用功能时在 python 3 中一样 为什么会这样呢? python为什么要进行此更改? 是恩赐还是祸根? 问题答案: Python 3 在很多地方使用了 迭代器 ,而 python 2 使用了 列表 。文档给出了详细的解释,包括对的更改。 优点是,如果您使用大范围的迭代器或映射, Python
问题内容: 大家好,我想知道在尝试使用以下代码解析日期时是否可以处理Date异常: 好吧,如果“ dateRelease”的格式类型不正确,则会引发ParseException,但我想知道是否有人写成“ 40/03/2010”-错了日期,月份或年份的范围。实际上,当发送无效日期时,SimpleDateFormat只会使用默认数字创建一个新的Date。 我是否必须使用正则表达式创建我自己的方法来处理