🎨 Node-RED + Home Assistant: расширенные автоматизации через API-ключ и MQTT
Ранее мы рассматривали установку на приставку Tanix w2 контейнеров для создания умного дома. И кажется, пора прояснить: «А зачем там Node-RED, если есть Home Assistant для автоматизаций?»
Да, это так, но Home Assistant достаточно для простых скриптов, и настройка их, как по мне, достаточно геморная. В то время как Node-RED предназначен для более сложных автоматизаций, в нём больше возможностей, и даже проще собирать схемы — всё через узлы, которые можно перетаскивать, соединять, прописывать код для сложных сценариев.
В статье рассмотрим: добавление Node-RED в боковую панель Home Assistant, получение долгосрочного токена доступа (API-ключа), установку библиотеки node-red-contrib-home-assistant-websocket, настройку соединения между Node-RED и Home Assistant, а также подключение MQTT-брокера для прямого общения с устройствами.
Содержание статьи
- 1Установка Home Assistant и Node-RED
- 2Добавление Node-RED в боковую панель HA
- 3Получение долгосрочного токена доступа (API-ключа)
- 4Установка библиотеки Home Assistant в Node-RED
- 5Настройка соединения Node-RED с Home Assistant
- 6Подключение MQTT в Node-RED
- 7Пример работы: включение света на 77% в фиолетовый цвет
1. Установка Home Assistant и Node-RED
Подробная инструкция по установке данных контейнеров была описана в статье про Tanix w2.
Кратко об установке:
- Home Assistant:
docker run -d --name homeassistant --restart=always --network=host -v ha_config:/config ghcr.io/home-assistant/home-assistant:stable - Node-RED:
docker run -d --name nodered --restart=always -p 1880:1880 -v nodered_data:/data nodered/node-red:latest
• Home Assistant доступен по адресу:
http://IP_сервера:8123• Node-RED доступен по адресу:
http://IP_сервера:1880
2. Добавление Node-RED в боковую панель HA
- Откройте Настройки в боковой панели Home Assistant
- Перейдите в раздел «Панели» (или «Dashboards»)
- Нажмите кнопку «Добавить панель»
- Выберите вариант «Веб-страница» (или «Web Page»)
- Задайте произвольное название, например «Node-RED»
- В поле «URL» укажите адрес, где живёт Node-RED:
http://IP_сервера:1880 - Нажмите «Создать» (или «Сохранить»)
3. Получение долгосрочного токена доступа (API-ключа)
Чтобы Node-RED мог управлять сущностями Home Assistant и получать их состояния, нам понадобится долгосрочный токен доступа (Long-Lived Access Token).
- Нажмите на своё имя пользователя в нижней части боковой панели Home Assistant
- В открывшемся окне перейдите на вкладку «Безопасность» (Security)
- Прокрутите страницу вниз до раздела «Долгосрочные токены доступа» (Long-Lived Access Tokens)
- Нажмите «Создать токен» (Create Token)
- Введите имя для токена, например «Node-RED»
- Нажмите «Создать» — система сгенерирует токен
- Скопируйте токен и сохраните его в надёжном месте — он показывается только один раз!
4. Установка библиотеки Home Assistant в Node-RED
Сначала нам нужно добавить узлы Home Assistant в Node-RED.
- Откройте веб-интерфейс Node-RED (
http://IP_сервера:1880) - Нажмите на меню в правом верхнем углу (три горизонтальные линии) → выберите «Управление палитрой» (Manage palette)
- Перейдите на вкладку «Установить» (Install)
- В поле поиска введите
node-red-contrib-home-assistant-websocket - Найдите пакет и нажмите кнопку «Установить»
5. Настройка соединения Node-RED с Home Assistant
Теперь настроим соединение между Node-RED и Home Assistant с помощью полученного токена.
- Перейдите на главный экран Node-RED
- Перетащите узел «events: all» (из категории Home Assistant) на рабочую область
- Дважды щёлкните по узлу, чтобы открыть его настройки
- Рядом с полем «Сервер» (Server) выберите «Добавить новый сервер…» и нажмите на значок карандаша ✏️
- Дайте конфигурации сервера имя, например «Home Assistant»
- НЕ УСТАНАВЛИВАЙТЕ флажок «Using the Home Assistant Add-on»
- В поле «Базовый URL» введите адрес доступа к Home Assistant:
http://IP_сервера:8123 - В поле «Токен доступа» (Access Token) вставьте токен, полученный ранее
- Нажмите «Добавить» (Add), а затем «Сохранить» (Save)
6. Подключение MQTT в Node-RED
Давайте также настроим соединение Node-RED с нашим MQTT-брокером, чтобы мы могли напрямую общаться с устройствами через MQTT без промежуточного слоя Home Assistant.
Эта настройка очень похожа на то, как мы настраивали подключение Home Assistant. Основное отличие в том, что MQTT поддерживается в Node-RED по умолчанию — дополнительный пакет устанавливать не нужно.
- В Node-RED перетащите узел «mqtt in» (или «mqtt out») на рабочую область
- Дважды щёлкните, чтобы открыть его настройки
- Рядом с полем «Сервер» выберите «Добавить новый сервер MQTT…» и нажмите на значок карандаша ✏️
- На вкладке «Соединение» (Connection) введите:
- Сервер: IP адрес вашего MQTT-брокера
- Порт:
1883 - Протокол: выберите
MQTT V5(или V3.1.1, если брокер старее)
- На вкладке «Безопасность» (Security) введите:
- Имя пользователя: логин для MQTT (например,
homeassistant) - Пароль: пароль пользователя MQTT
- Имя пользователя: логин для MQTT (например,
- Нажмите «Добавить», а затем «Сохранить»
- В поле «Тема» (Topic) для входящих сообщений можно ввести подстановочный знак
#, чтобы слушать все темы
7. Пример работы: включение света на 77% в фиолетовый цвет
Давайте соберём простой, но наглядный пример — по нажатию кнопки в Node-RED будем включать лампочку с яркостью 77% и фиолетовым цветом.
Узел 1: Inject (кнопка запуска)
- Перетащите узел Inject из категории «common» на рабочую область
- Настройки оставьте по умолчанию
Узел 2: Action (включение лампочки)
- Перетащите узел Action из категории «home assistant» на рабочую область
- Соедините выход Inject со входом Action
- Дважды щёлкните по узлу Action для настройки
| Поле | Значение |
|---|---|
| Server | Home Assistant (ваш настроенный сервер) |
| Action | light.turn_on |
| Targets | entity → выберите ваше световое устройство (например, «Кольцо 1») |
| Data | Выберите Merge context (или переключатель в положение «JSON») |
В поле Data (снизу) вставьте следующий JSON:
{
"brightness": 196,
"hs_color": [270, 100]
}
Запуск:
- Нажмите кнопку Deploy (красная кнопка в правом верхнем углу)
- Нажмите на серую кнопку слева от узла Inject
- Лампочка загорается фиолетовым цветом с яркостью 77%
Альтернативные форматы цвета (замените hs_color в JSON):
- RGB (красный, зелёный, синий):
{ "brightness": 196, "rgb_color": [128, 0, 255] }— фиолетовый через RGB - Hex (цветовая строка):
{ "brightness": 196, "color_name": "purple" }— по имени цвета - HSV (оттенок, насыщенность, значение):
{ "brightness": 196, "hs_color": [270, 100] }— тот же фиолетовый через HSV