Nest Thermostat设备将在屏幕上显示,如果它正在冷却'或者加热'。如何通过Nest API获取此状态?
hvac_mode
属性似乎只是简单地显示用户的恒温器能够控制什么,并且在发生制冷或加热时不会发生变化。
目前,我使用的是一个简单但不完美的逻辑:
if (can_cool && target_temperature < ambient_temperature) --> isCooling
if (can_heat && target_temperature > ambient_temperature) --> isHeating
else --> isDoingNothing
不完美,我的意思是我遇到过这种逻辑错误的情况。例如,在ambient_temperature
为20 Celsius
且target_temperature
为21 Celsius
且can_heat
设置为true
的特定情况下,我的用户界面将为说温控器正在加热,而它实际上并不是。
这可能是因为目标和环境温度太近,但我不知道阈值是多少。
是否有其他或更好的方法来确定加热和冷却状态?
答案 0 :(得分:4)
截至2015年5月,Nest API现在正式报告 hvac_state 属性。该值将是“加热”,“冷却”或“关闭”之一。
数据模型中的新字段: hvac_state 。 您将使用hvac_state来了解家用HVAC系统是否正在主动加热,冷却或关闭。
答案 1 :(得分:2)
查看API,他们没有提供任何方法来确定恒温器是否实际加热。您最接近识别的是您目前所写的内容。
如果设备本身能够显示加热或冷却,则必须使用不同的代码或不同的方法(例如内部电子设备)来识别它。
答案 2 :(得分:0)
遗憾的是,你正确 - API没有透露这些信息。
在my application中,我实现了与您相同的逻辑,并注意到边缘情况下的相同问题。我怀疑当环境温度刚好超出目标温度一度或更低时,可能会有时间因素。
答案 3 :(得分:-1)
您需要跟踪Heat On / off的状态才能正确计算。我以1赫兹监视NEST并将最后一个状态(开或关)存储为变量。获得此信息后,您可以使用以下逻辑,这将是准确的:
if lastStatus.Contains("Off"))
{
if (temp_current < temp_setpoint)
status = "Heat On";
else
status = "Heat Off";
}
else if (lastStatus.Contains("On"))
{
if (temp_current > temp_setpoint)
status = "Heat Off";
else
status = "Heat On";
}
// Do the work....
lastStatus=status;
注意:从REST http帖子返回temp_current
和temp_setpoint
。
祝你好运!