我正在开发一个脚本,该脚本利用我制作的功能来控制Raspberry Pi 3上8通道继电器板的继电器。该功能有效,并调用该功能有效。我正在尝试开发此脚本,以便当当前时间等于另一个时间(例如1区开始时间)时,继电器会根据代码中另一部分接收到的状态打开/关闭。
我已经测试过了,但这次不等于部分,一切正常。当我添加这种级别的复杂性时,我似乎遇到了一些问题。这是我的代码示例:
while True:
from datetime import datetime
import time
import smbus
ValveStatus='00000001' #0 is closed, 1 is open.
R1_1,R2_1,R3_1,R4_1,R5_1,R6_1,R7_1,R8_1=list(map(int, ValveStatus))
currenttime=datetime.today().strftime('%Y-%m-%d %H:%M:%S')
Z1S_Timestamp='2018-07-09 10:25:11'
if(currenttime==Z1S_Timestamp):
if(R8_1==1):
SetRelayState(BoardOne,8,"ON")
else:
SetRelayState(BoardOne,8,"OFF")
无论我更改了多少次代码,这种计时方法都无法使用。它永远不会进入回路,因此继电器永远不会断开。有没有比仅仅具有if语句更好的方法呢?我可以编辑它,但是继电器仍需要在开始时间前后打开。我认为留出1或2分钟的间隔是可以的,因为计时完全相等就不必100%了。
会是这样的:
currenttime= '2018-07-09 12:53:55' #hard coding just for example purposes
if('2018-07-09 12:52:55' <= currenttime <= '2018-07-09 12:54:55'):
do the things
是更有效/正确/ Python正确的方法吗?
答案 0 :(得分:0)
当然-我会做相反的事情-将所有时间都转换为datetime()
个对象,并使用它们进行比较:
TIME_MARGIN = datetime.timedelta(seconds=120) # use a margin of 2 minutes
time_compare = datetime.datetime(2018, 7, 9, 12, 52, 55)
current_time = datetime.datetime.now()
if (time_compare - TIME_MARGIN) < current_time < (time_compare + TIME_MARGIN):
#do something