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_temperature равно 20 Celsius, а target_temperature равно 21 Celsius с can_heat, установленным на true, мой пользовательский интерфейс скажет, что термостат нагревается, хотя на самом деле это не так.

Вероятно, это связано с тем, что целевая температура и температура окружающей среды слишком близки, но я не знаю, каков порог.

Есть ли другой или лучший способ определить состояния нагрева и охлаждения?


person Rachid Finge Jr    schedule 16.10.2014    source источник


Ответы (4)


По состоянию на май 2015 года Nest API теперь официально сообщает о свойстве hvac_state. Значение будет одним из «нагрев», «охлаждение» или «выключено».

Новые поля в модели данных: hvac_state. Вы будете использовать hvac_state, чтобы узнать, активно ли домашняя система HVAC нагревает, охлаждает или выключена.

person Dal Hundal    schedule 12.06.2015
comment
Вы действительно смогли прочитать это hvac_state? В моем реальном термостате (версия ПО 4.5.1) это поле отсутствует и не указывается как часть структуры данных термостата. - person RawMean; 12.10.2015
comment
Да, я использовал его на своем настоящем термостате - мой тоже на v4.5.1 - person Dal Hundal; 12.10.2015

Глядя на API, они не предоставляют никакого способа определить, действительно ли термостат нагревается. Самое близкое, что вы можете определить, - это то, что вы написали в данный момент.

Если само устройство способно отображать нагрев или охлаждение, у них должен быть другой код или другие методы (например, внутренняя электроника) для его идентификации.

person DoubleYou    schedule 16.10.2014
comment
Не уверен, какова политика SO в отношении моего следующего предложения: в этой ситуации я предлагаю связаться с разработчиками с вопросом, как они это делают ... - person DoubleYou; 17.10.2014
comment
Я думаю, что это часть стратегии Nest по передаче достаточного контроля разработчикам, чтобы они могли возиться, но недостаточного для создания приложений-замен - когда вы не можете просматривать или редактировать расписание, или читать текущее состояние, или получать какую-либо поддержку API. от самих Nest, вы довольно безобидны. - person thesimm; 17.10.2014

К сожалению, вы правы - API не раскрывает эту информацию.

В моем приложении я реализовал ту же логику, что и вы, и заметил ту же проблему в крайних случаях. Я подозреваю, что здесь может быть элемент времени, когда температура окружающей среды выходит за пределы заданной температуры всего на градус или меньше.

person Richard Ev    schedule 27.10.2014

Для правильного расчета необходимо отслеживать состояние включения / выключения нагрева. Я отслеживаю NEST с частотой 1 Гц и сохраняю последнее состояние (включено или выключено) как переменную. как только у вас будет эта информация, вы можете использовать следующую логику, и она будет точной:

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 возвращаются из HTTP-сообщения REST. Удачи!

person Ryan    schedule 26.12.2014