我正在研制一种自动调温器,它可以根据一天中的时间自动关闭。在
这是我的恒温器功能:
def thermostat(ac_on, acPower, temp_inside, Temp_desired):
if temp_inside > Temp_desired:
ac_on = True
if temp_inside < Temp_desired:
ac_on = False
ac_heatflow = acPower if ac_on == True else 0
return ac_heatflow, ac_on
Temp_desired
是一个设置的整数值,temp_inside
是与Temp_desired
(现在每隔几秒钟)比较的变化的室内温度值,看看空调(a/C)是“开”还是“关”。ac_heatflow
是空调打开时的用电量,acPower
是在功能之外分配的a/C功率值。在
我现在的问题是,我现在想给我的恒温器增加一个时间元件,在这里空调可以被编程为关闭。例如,空调一整天都正常工作,但是从早上8:00到10:00必须关闭,从下午3:00到下午5:45必须关闭,因此在这些时间间隔内,ac_on = False
,但是在这些时间间隔之外,恒温器将恢复到原来的方法,根据室温来确定空调是否开/关。在
上述时间间隔在函数中使用时以秒为单位,因此上午8:00为28800,上午10:00--36000,下午3:00--gt;54000,下午5:45--63900。在
这就是我一直在尝试的:
^{pr2}$start
是间隔的开始时间,end
是间隔结束时间,t
现在是以秒为单位的。在24小时内每隔几秒就要计算一次温度,一天是86400秒,所以start
和{start = 1000
和{
if t >= start or t <= end:
ac_on = False
else:
if temp_inside > Temp_desired + 2:
ac_on = True
if temp_inside < Temp_desired:
ac_on = False
ac_heatflow = 400 if ac_on == True else 0
return ac_heatflow, ac_on
但这会将ac_heatflow
的所有值设置为0。在
我不确定如何对函数进行编码,以便编程时也能考虑到一天中的时间。也许这是一个嵌套的循环问题,或者它需要一个单独的函数来集中定义时间间隔,并将这些赋值输入到恒温器函数中。在
问题出在表达式
t >= start or t <= end
。首先什么是开始和结束?您在这种情况下描述了两个时间段,但您只向函数传递了一个潜在时间段的参数?在假设}。如果}仍然大于100,所以这个表达式的计算结果仍然是true(这就是为什么{}总是为False的原因)。基本上不管
start=100
和{t
在开始之前,那么说t=5
。那么t
仍然小于700,所以这个陈述是正确的。或者,如果t
在结束之后,比如t=705
,那么{t
的值是多少,这个语句都是真的。我想你想要的是t >= start and t <= end
。在尽管我仍然对您描述的两个时间段有点困惑,但是可以传入4个参数,start1、end1、start2和end2,然后使用:
if (t >= start1 and t <= end1) or (t >= start2 and t <= end2):
关键是使用pythons
datetime
库。一些提示:ac_on
的先验值,因此不需要传入它。在datetime
库在函数体中找到当前时间因为您已经习惯了pythons条件赋值,所以只要稍加重构,我们就可以变得更加简洁和python。在
同一函数的更简洁、更易读、更具python风格的版本如下:
^{pr2}$这两个功能都经过测试,运行良好。在
相关问题 更多 >
编程相关推荐