Для чего нужен виджет
virtualThermostat используется как единая точка управления температурой.
- Для котла, теплого пола или реле виджет работает как обычный термостат через Node-RED.
- Для кондиционера виджет может использовать обучаемый IR-профиль, но внешний вид рабочего термостата остается тем же.
- Виджет не заменяет автоматику Node-RED, а дает пользователю удобное отображение и ручную настройку.
Как устроена работа
Роли разделены так:
- Рабочий виджет показывает состояние и отправляет команды
set_modeиset_temperature. - Узел Node-RED
thermostatхранит текущий режим, уставку и решает, когда включать и выключать исполнитель. - Узел
db-writerвозвращает состояние обратно в виджет. - IR-профиль хранит обученные коды кондиционера и ограничивает выбор только теми режимами и температурами, которые реально обучены.
thermostat
и использует только режимы off, heat и cool. Дополнительные IR-состояния
обучаются и тестируются в свойствах.
Быстрый старт
- Добавьте на рабочее поле пиктограмму virtualThermostat.
- Откройте свойства виджета.
- Заполните Device SN. Это основной идентификатор связи виджета с Node-RED.
- При необходимости задайте диапазон температур, шаг, размеры виджета и режим отображения
heat,coolилиboth. - В Node-RED создайте узел
thermostatс тем жеdeviceSN. - Подключите выход 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]
Пример для котла
- Добавьте
virtualThermostatсDevice SN = boiler_room_thermostat. - В Node-RED создайте
thermostatс тем жеdeviceSN. - Подайте температуру с датчика на вход термостата как
topic=temperature. - Выход 1 подключите к
actuator, который включает и выключает котел. - Выход 2 подключите к
db-writerдля синхронизации рабочего виджета.
В этом режиме пользователь на рабочем поле меняет только уставку и режим, а сам алгоритм поддержания температуры выполняет Node-RED.
Пример для кондиционера через IR
Для кондиционера используется тот же рабочий виджет, но дополнительно настраивается обучаемый IR-профиль.
Готовую связку с virtualSchedule, day/night уставками и IR-передатчиком смотрите на странице Пример термостата кондиционера ZS06.
- Откройте свойства
virtualThermostat. - Разверните блок Управление кондиционером через IR.
- В поле Имя профиля введите новое имя и нажмите Создать профиль, либо выберите профиль в списке Профиль.
- Укажите IR-передатчик, например ZS06.
- Задайте список режимов и температур, которые нужно обучить.
- При необходимости используйте Сохранить профиль, Удалить профиль, Экспорт профиля и Импорт профиля.
- Обучите и сохраните коды для всех нужных состояний.
- После сохранения профиль привязывается к этому термостату.
После привязки профиля рабочий виджет:
- не меняет свой внешний вид;
- показывает только обученные режимы
coolиheat; - разрешает выбирать только обученные температуры;
- по-прежнему работает совместно с Node-RED через
set_modeиset_temperature.
Как обучить IR-профиль
- Откройте свойства термостата и разверните блок IR.
- Создайте профиль или выберите уже существующий.
- В спадающем меню выберите серийный номер IR-передатчика.
- Нажмите Включить режим обучения.
- У нужного состояния нажмите Получить код.
- Сразу после этого нажмите одну кнопку на пульте кондиционера.
- После получения кода режим обучения выключится автоматически.
- Нажмите Тест, и если кондиционер правильно воспримет полученный код, то нажмите Сохранить.
- Кнопка Тест остается доступной и после сохранения, чтобы можно было повторно проверить код.
- Повторите для всех температур и режимов, которые должны быть доступны пользователю.
Для кондиционера рекомендуется заранее определить рабочую матрицу состояний: например набор температур для 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-профиль.