7

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_temperatureis20 Celsiustarget_temperatureis21 Celsius设置can_heat为的给定情况下true,我的 UI 会说 Thermostat 正在加热,而实际上并非如此。

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

是否有另一种或更好的方法来计算加热和冷却状态?

4

4 回答 4

4

截至 2015 年 5 月,Nest API 现在正式报告hvac_state属性。该值将是“加热”、“冷却”或“关闭”之一。

数据模型中的新字段: hvac_state。您将使用 hvac_state 来了解家庭 HVAC 系统是否正在加热、冷却或关闭。

于 2015-06-12T10:40:54.197 回答
2

查看 API,他们没有提供任何方法来识别恒温器是否真的在加热。您可以识别的最接近的是您当前所写的内容。

如果设备本身能够显示其正在加热或冷却,则它们必须具有不同的代码或不同的方法(例如内部电子设备)来识别它。

于 2014-10-16T23:50:58.590 回答
0

遗憾的是你是对的——API 没有透露这些信息。

我的应用程序中,我实现了与您相同的逻辑,并且注意到边缘情况的相同问题。我怀疑当环境温度仅超出目标温度一度或更少时,它可能存在时间因素。

于 2014-10-27T13:04:08.083 回答
-1

您需要跟踪 Heat On/off 的状态才能正确计算。我以 1 hz 监控 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;

注意:temp_current并且temp_setpoint是从 REST http 帖子返回的。祝你好运!

于 2014-12-26T22:32:15.913 回答