Nest API:什么时候恒温器加热'或者'冷却'?

时间:2014-10-16 22:56:41

标签: nest-api

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_temperature20 Celsiustarget_temperature21 Celsiuscan_heat设置为true的特定情况下,我的用户界面将为说温控器正在加热,而它实际上并不是。

这可能是因为目标和环境温度太近,但我不知道阈值是多少。

是否有其他或更好的方法来确定加热和冷却状态?

4 个答案:

答案 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_currenttemp_setpoint。 祝你好运!