virtualThermostat

Термостат для отопления, охлаждения и кондиционера с IR-профилем
virtualThermostat — это виджет для управления отоплением и охлаждением на рабочем поле RealIoT. Он показывает текущую и целевую температуру, режим работы и позволяет менять уставку и режим прямо из интерфейса.

Для чего нужен виджет

virtualThermostat используется как единая точка управления температурой.

  • Для котла, теплого пола или реле виджет работает как обычный термостат через Node-RED.
  • Для кондиционера виджет может использовать обучаемый IR-профиль, но внешний вид рабочего термостата остается тем же.
  • Виджет не заменяет автоматику Node-RED, а дает пользователю удобное отображение и ручную настройку.
Виджет термостата в режиме нагрева
Виджет термостата в режиме нагрева
Виджет термостата в режиме охлаждения
Виджет термостата в режиме охлаждения

Как устроена работа

Роли разделены так:

  • Рабочий виджет показывает состояние и отправляет команды set_mode и set_temperature.
  • Узел Node-RED thermostat хранит текущий режим, уставку и решает, когда включать и выключать исполнитель.
  • Узел db-writer возвращает состояние обратно в виджет.
  • IR-профиль хранит обученные коды кондиционера и ограничивает выбор только теми режимами и температурами, которые реально обучены.
Рабочий виджет не отправляет IR-коды напрямую. Для кондиционера он работает через thermostat и использует только режимы off, heat и cool. Дополнительные IR-состояния обучаются и тестируются в свойствах.

Быстрый старт

  1. Добавьте на рабочее поле пиктограмму virtualThermostat.
  2. Откройте свойства виджета.
  3. Заполните Device SN. Это основной идентификатор связи виджета с Node-RED.
  4. При необходимости задайте диапазон температур, шаг, размеры виджета и режим отображения heat, cool или both.
  5. В Node-RED создайте узел thermostat с тем же deviceSN.
  6. Подключите выход 2 термостата к db-writer с тем же deviceSN.

Основные свойства

Параметр Назначение
Название Имя виджета на рабочем поле.
Описание Пояснение для пользователя.
Device SN Связь между виджетом, thermostat и db-writer. Во всех трех местах значение должно совпадать.
Стартовая t° Начальная уставка. Дальше она меняется из виджета и Node-RED.
Min t° / Max t° Допустимый диапазон уставки.
Step Шаг изменения температуры.
Режим отображения Какие режимы показывать на рабочем виджете: только нагрев, только охлаждение или оба режима.
Масштаб содержимого Внутренний масштаб отрисовки содержимого виджета.
Ширина / высота Размер виджета на рабочем поле. По умолчанию используется размер 280×400.
Панель свойств
Панель свойств виртуального термостата

Управление на рабочем поле

  • Кнопки + и - меняют целевую температуру.
  • Точку на дуге можно перетаскивать мышью или пальцем, чтобы менять уставку.
  • Кнопки Выкл, Охл и Нагрев переключают режим работы.
  • В режиме кондиционера с IR-профилем виджет разрешает только обученные температуры и режимы.
  • Если состояние не обучено, виджет не отправит неподдерживаемую команду.

Работа с Node-RED

Какие команды отправляет виджет

Виджет отправляет в термостатный канал только стандартные команды:

{"topic":"set_temperature","payload":24}
{"topic":"set_mode","payload":"cool"}

MQTT-топик для этих команд:

realiot/thermostat/command/<deviceSN>

Что должен делать узел thermostat

  • Принимать текущую температуру от датчика через msg.topic = "temperature".
  • Хранить текущий режим off, heat или cool.
  • Сравнивать текущую температуру с уставкой и выдавать на выход 1 команду on или off.
  • Передавать на выход 2 полное состояние термостата для обновления виджета.

Какие поля нужно писать обратно в виджет

thermostatMode
thermostatAction
thermostatTargetTemp
thermostatCurrentTemp
thermostatHeaterActive

Типовая схема

[датчик температуры] -> [thermostat] -> выход 1 -> [исполнитель]
                                     |
                                     -> выход 2 -> [db-writer]

Пример для котла

  1. Добавьте virtualThermostat с Device SN = boiler_room_thermostat.
  2. В Node-RED создайте thermostat с тем же deviceSN.
  3. Подайте температуру с датчика на вход термостата как topic=temperature.
  4. Выход 1 подключите к actuator, который включает и выключает котел.
  5. Выход 2 подключите к db-writer для синхронизации рабочего виджета.

В этом режиме пользователь на рабочем поле меняет только уставку и режим, а сам алгоритм поддержания температуры выполняет Node-RED.

Пример для кондиционера через IR

Для кондиционера используется тот же рабочий виджет, но дополнительно настраивается обучаемый IR-профиль.

Готовую связку с virtualSchedule, day/night уставками и IR-передатчиком смотрите на странице Пример термостата кондиционера ZS06.

  1. Откройте свойства virtualThermostat.
  2. Разверните блок Управление кондиционером через IR.
  3. В поле Имя профиля введите новое имя и нажмите Создать профиль, либо выберите профиль в списке Профиль.
  4. Укажите IR-передатчик, например ZS06.
  5. Задайте список режимов и температур, которые нужно обучить.
  6. При необходимости используйте Сохранить профиль, Удалить профиль, Экспорт профиля и Импорт профиля.
  7. Обучите и сохраните коды для всех нужных состояний.
  8. После сохранения профиль привязывается к этому термостату.

После привязки профиля рабочий виджет:

  • не меняет свой внешний вид;
  • показывает только обученные режимы cool и heat;
  • разрешает выбирать только обученные температуры;
  • по-прежнему работает совместно с Node-RED через set_mode и set_temperature.
Панель свойств
Панель свойств виртуального термостата

Как обучить IR-профиль

  1. Откройте свойства термостата и разверните блок IR.
  2. Создайте профиль или выберите уже существующий.
  3. В спадающем меню выберите серийный номер IR-передатчика.
  4. Нажмите Включить режим обучения.
  5. У нужного состояния нажмите Получить код.
  6. Сразу после этого нажмите одну кнопку на пульте кондиционера.
  7. После получения кода режим обучения выключится автоматически.
  8. Нажмите Тест, и если кондиционер правильно воспримет полученный код, то нажмите Сохранить.
  9. Кнопка Тест остается доступной и после сохранения, чтобы можно было повторно проверить код.
  10. Повторите для всех температур и режимов, которые должны быть доступны пользователю.

Для кондиционера рекомендуется заранее определить рабочую матрицу состояний: например набор температур для cool, набор для heat и отдельное состояние off.

Node-RED для кондиционера

Логика остается такой же, как для котла: Node-RED отвечает за поддержание температуры, а виджет отвечает за отображение и изменение уставки и режима.

  • Режим cool означает, что автоматика должна охлаждать помещение.
  • Режим heat означает, что автоматика должна греть помещение.
  • Режим off означает остановку регулирования.

На выходе 1 узла thermostat вы по-прежнему получаете только on и off. Это команда исполнительному механизму, а не полный климатический снимок.

Если исполнительным механизмом является кондиционер через IR, поток Node-RED должен учитывать два набора данных:

  • текущий режим и уставку термостата;
  • сигнал on или off с выхода 1.

Практически это означает: при on поток должен отправлять в кондиционер обученное состояние, соответствующее текущему режиму и целевой температуре, а при off отправлять обученное состояние выключения. Сам рабочий виджет IR-коды не отправляет.

Что важно помнить

  • Device SN у виджета, thermostat и db-writer должен совпадать.
  • Без db-writer виджет не будет получать актуальное состояние обратно из Node-RED.
  • Для кондиционера используется тот же виджет, что и для термостата, но с дополнительным обучаемым IR-профилем.
  • Если у IR-профиля не обучено нужное состояние, виджет не даст выбрать его на рабочем поле.
  • Дополнительные состояния вроде осушения и вентиляции настраиваются и тестируются в свойствах, а не на основном рабочем виджете.
  • Имя профиля сохраняется в том виде, в котором вы его ввели. Автоматические суффиксы к имени не добавляются.

Частые вопросы

Почему выбран режим heat или cool, а на выходе 1 идет off?

Потому что режим и команда исполнителю — это разные вещи. Режим определяет алгоритм работы, а off на выходе 1 означает, что в текущий момент включать исполнитель не нужно.

Почему виджет не дает выбрать некоторую температуру для кондиционера?

Потому что для IR-профиля на рабочем поле доступны только реально обученные температуры.

Где обучать и тестировать IR-коды?

В свойствах самого virtualThermostat, в блоке Управление кондиционером через IR.

Почему для кондиционера на рабочем виджете нет кнопок осушения и вентиляции?

Потому что рабочий виджет синхронизирован с логикой thermostat и использует только режимы off, heat и cool. Дополнительные IR-состояния настраиваются в профиле и используются в потоке Node-RED.

Можно ли использовать один и тот же виджет и для котла, и для кондиционера?

Да. Базовый интерфейс один и тот же. Для кондиционера дополнительно подключается обучаемый IR-профиль.

← Назад к справке