Node-RED + Home Assistant: Визуальная автоматизация умного дома без единой строчки кода

Подключаем Node-RED к Home Assistant и создаём наглядные сценарии автоматизации без написания большого объёма кода.
Приветствую всех, кто увлечён созданием своего умного дома! Если вы, как и я, уже познакомились с мощью Home Assistant и оценили его гибкость, то наверняка сталкивались с ситуацией, когда логика автоматизации в YAML становится слишком громоздкой. Цепочки условий condition:, триггеры trigger: и действия action: в редакторе автоматизаций — это здорово, но что если хочется чего-то более наглядного, где всю логику можно увидеть одним взглядом? А что если хочется быстро прототипировать сложные сценарии, которые реагируют на погоду, время, состояние устройств и ваше местоположение одновременно?
Именно здесь на сцену выходит Node-RED — инструмент визуального программирования, который превращает создание автоматизаций в сборку схемы из готовых блоков. В этой статье я подробно расскажу, как подружить Node-RED с Home Assistant, чтобы вы могли вывести автоматизацию своего дома на новый уровень. Мы пройдём путь от установки до создания вашего первого сложного сценария.
Почему Node-RED? Зачем это нужно
Home Assistant — это отличный «мозговой центр», который объединяет все устройства и предоставляет единый интерфейс. Его встроенный редактор автоматизаций мощный, но имеет свои ограничения в наглядности и скорости разработки для сложных логических цепочек.
Node-RED решает эти проблемы. Представьте его как визуальную среду, где: * Ноды (блоки) — это готовые функции: получить состояние устройства, включить свет, отправить уведомление, обработать JSON, сделать HTTP-запрос. * Потоки — это полотно, где вы соединяете ноды между собой, определяя поток данных и логику. * Связи — это провода, по которым данные (сообщения) перетекают от одной ноды к другой.
Преимущества такого подхода: * Наглядность: Вся логика сценария видна на одном экране. Легко понять, как работает автоматизация, даже если вы писали её полгода назад. * Простота отладки: Вы можете в реальном времени видеть, какие данные проходят через каждую ноду, и быстро находить ошибки. * Огромная библиотека нод: Сообщество создало тысячи нод для работы с MQTT, Telegram, погодными сервисами, базами данных (как в статье про домашнюю метеостанцию с графиками), API и многим другим. * Прототипирование: Создать и проверить идею можно за считанные минуты, просто перетаскивая блоки.
В связке Home Assistant выступает как источник данных и исполнитель команд, а Node-RED — как мощный движок логики и сценариев. Это идеальный симбиоз.
Установка Node-RED: выбираем способ
Существует несколько способов установить Node-RED. Я рассмотрю два самых популярных для среды Home Assistant.
Способ 1: Надстройка (Add-on) для Home Assistant OS или Supervised
Это самый простой и интегрированный путь, если вы используете Home Assistant OS (например, на Raspberry Pi) или Supervised-установку.
- В панели управления Home Assistant перейдите в раздел Настройки -> Надстройки.
- В правом нижнем углу нажмите кнопку Магазин надстроек.
- Найдите надстройку "Node-RED" от сообщества (часто она уже в избранном).
- Нажмите на неё и затем Установить. Дождитесь окончания загрузки.
-
Перед запуском важно зайти в конфигурацию надстройки. Часто нужно добавить несколько ключевых параметров в поле
config:json { "credential_secret": "придумайте_свой_сложный_ключ_здесь", "dark_mode": true, "ssl": false, "certfile": "fullchain.pem", "keyfile": "privkey.pem", "require_ssl": false, "http_node": { "username": "user", "password": "pass" }, "http_static": { "username": "user", "password": "pass" }, "i_like_to_be_pwned": false, "leave_front_door_open": false }*credential_secret: Обязательно задайте свой уникальный ключ! Он используется для шифрования паролей в потоках. *dark_mode: На вкус и цвет. * Параметрыssl,certfile,keyfile: Включайте (true) и настраивайте только если у вас есть SSL-сертификат (например, от Let's Encrypt через надстройку Nginx Proxy Manager). Для начала оставьтеfalse. * Параметрыusername/password: Задайте логин и пароль для доступа к интерфейсу Node-RED. Это важно для безопасности! *leave_front_door_open: Всегда оставляйтеfalse, если не хотите, чтобы Node-RED был доступен без пароля из локальной сети. -
Сохраните конфигурацию, запустите надстройку, нажав "Запуск", а затем "Открыть веб-интерфейс".
Типичная ошибка: Пропуск настройки credential_secret и паролей. Это может привести к уязвимости и проблемам при обновлении.
Способ 2: Установка в Docker (для любых систем, включая Ubuntu на сервере)
Если ваш Home Assistant работает в Docker или на отдельном сервере (например, на том же одноплатнике, где крутится ваш приватный DNS-сервер Pi-hole + Unbound), этот способ для вас.
Создайте файл docker-compose.yml:
version: '3.8'
services:
node-red:
image: nodered/node-red:latest
container_name: node-red
restart: unless-stopped
user: "1000:1000" # Замените на ваши UID:GID (узнать можно командой `id`)
ports:
- "1880:1880" # Порт для веб-интерфейса
environment:
- TZ=Europe/Moscow # Укажите свою временную зону
- NODE_RED_CREDENTIAL_SECRET=придумайте_свой_сложный_ключ_здесь
volumes:
- ./node-red-dаta:/data # Папка для хранения данных и потоков
- /etc/localtime:/etc/localtime:ro # Синхронизация времени с хостом
networks:
- homeassistant_network # Подключите к той же сети, что и Home Assistant
networks:
homeassistant_network:
external: true # Предполагается, что сеть уже создана для Home Assistant
Комментарии к командам:
* user: "1000:1000" — запуск от имени вашего пользователя, чтобы избежать проблем с правами на файлы.
* NODE_RED_CREDENTIAL_SECRET — аналог credential_secret из надстройки.
* volumes — маппинг папки /data контейнера в локальную папку ./node-red-data для сохранения данных.
Запустите контейнер, находясь в папке с docker-compose.yml:
docker-compose up -d
После этого Node-RED будет доступен по адресу http://ваш_сервер:1880.
Первый запуск и настройка интеграции с Home Assistant
- Откройте веб-интерфейс Node-RED (
http://homeassistant.local:1880для надстройки илиhttp://ваш_сервер:1880для Docker). - Вы увидите чистое рабочее поле — поток (flow).
- Слева — палитра нод. Нам нужна нода "home assistant". Если её нет, её необходимо установить.
- В верхнем меню выберите Управление палитрой (три строки -> Управление палитрой).
- Перейдите на вкладку "Установка", найдите
node-red-contrib-home-assistant-websocketи нажмите "Установить". Это официальный пакет нод для связи по WebSocket API.
Настройка сервера Home Assistant
После установки нод в палитре появится группа "home assistant".
- Перетащите на рабочее поле любую ноду из этой группы, например, "events: state".
- Дважды щёлкните по ней, чтобы открыть настройки. Рядом с полем "Server" нажмите на карандаш (иконку редактирования).
- Нажмите "Add new home-assistant-server".
- Заполните поля:
- Name: Любое удобное имя, например, "My HA".
- Base URL: URL вашего Home Assistant, например,
http://homeassistant.local:8123(для надстройки) илиhttp://ваш_внутренний_ip:8123. Важно: Если используете SSL (HTTPS), укажитеhttps://. - Access Token: Это ключ доступа. Чтобы получить его, откройте Home Assistant, перейдите в свой профиль (внизу левой панели), прокрутите вниз до раздела "Токены долгосрочного доступа" и создайте новый токен. Скопируйте его и вставьте в это поле.
- Нажмите "Update", а затем "Add".
Типичная ошибка: Неверный Base URL. Если Home Assistant и Node-RED в одной системе (как надстройка), часто срабатывает http://homeassistant.local:8123. Если в разных Docker-сетях, используйте внутренний IP-адрес контейнера или хоста. Проблемы с подключением — первое, что нужно проверять.
Создаём первую автоматизацию: "Вечерний режим"
Давайте создадим полезный сценарий: когда вечером (после заката) кто-то приходит домой (датчик присутствия срабатывает), включается свет в прихожей и коридоре на 50%, но только если в гостиной темно (чтобы не слепить, если там уже кто-то есть).
Шаг 1: Слушаем события
- Из палитры "home assistant" перетащите ноду "events: state". Это триггер, который срабатывает при изменении состояния сущности.
- Настройте её:
- Server: Выберите созданный сервер.
- Entity ID: Выберите датчик присутствия, например,
binary_sensor.front_door_presence. - If State: Выберите
is. Рядом в поле введитеon(илиhomeв зависимости от датчика). - Остальное можно оставить по умолчанию. Эта нода будет выдавать сообщение каждый раз, когда датчик переходит в состояние "on".
Шаг 2: Проверяем время (после заката)
- Из палитры "home assistant" перетащите ноду "current state". Она получает текущее состояние сущности.
- Настройте её:
- Entity ID:
sun.sun. - Property:
state.
- Entity ID:
- Из палитры "function" перетащите ноду "switch". Она будет направлять поток в зависимости от условия.
- Настройте правила (правила):
- Property:
msg.payload. - Rules: Первое правило:
==, значениеbelow_horizon. Это означает "после заката". Второе правило оставьте по умолчанию (otherwise).
- Property:
- Соедините ноды: выход "events: state" -> вход "current state". Выход "current state" -> вход "switch".
Шаг 3: Проверяем освещённость в гостиной
- Перетащите ещё одну ноду "current state".
- Настройте: Entity ID — датчик освещённости в гостиной, например,
sensor.living_room_lux. - Перетащите ноду "function" -> "range".
- Настройте её: Установите нижний и верхний пределы, например, от
0до10(люкс). Это означает "темно". - Соедините: Выход первого правила ноды "switch" (закат) -> вход новой ноды "current state". Выход "current state" -> вход "range".
Шаг 4: Включаем свет
- Перетащите ноду "call service" из палитры Home Assistant.
- Настройте:
- Domain:
light. - Service:
turn_on. - Entity ID: Выберите свет в прихожей, например,
light.entrance. - Data: Вставьте JSON-объект для установки яркости:
{"brightness_pct": 50}.
- Domain:
- Соедините выход ноды "range" (если темно) -> вход ноды "call service".
- Совет: Скопируйте эту ноду (Ctrl+C, Ctrl+V), чтобы создать вторую такую же для света в коридоре (
light.hallway).
Шаг 5: Развёртываем и тестируем
- Нажмите красную кнопку "Развернуть" (Deploy) в правом верхнем углу. Теперь ваш поток активен.
- Чтобы проверить, щёлкните правой кнопкой мыши на ноде "events: state" и выберите "Отладка" (Debug). Рядом с рабочей областью откроется вкладка "Отладка".
- Симулируйте событие: подойдите к двери, чтобы сработал датчик присутствия (или вручную измените состояние сущности в Home Assistant).
- Во вкладке "Отладка" вы увидите сообщения, проходящие через ноды. Это позволит понять, на каком шаге логика прерывается, если что-то не работает.
Проверка результата: Вечером, после захода солнца, при срабатывании датчика у двери, в прихожей и коридоре должен плавно включиться свет на 50% яркости. Если в гостиной уже горит свет (датчик освещённости показывает >10 люкс), ничего происходить не должно.
Продвинутый пример: Уведомление в Telegram об открытом окне
Допустим, у вас есть датчик открытия окна и вы ушли из дома. Если окно открыто дольше 10 минут, пока вас нет, придёт уведомление в Telegram.
- Триггер: Нода "events: state" для датчика окна (
binary_sensor.kitchen_window), где состояниеison(открыто). - Проверка присутствия: Параллельно нода "current state" для трекера вашего телефона (
device_tracker.your_phone). Нода "switch" проверяет, что состояниеnot_home. - Логическое "И": Используйте ноду "function" -> "join" (режим
AND) или сгруппируйте условия, чтобы поток шёл дальше только если оба условия истинны (окно открыто И вас нет дома). - Таймер: Нода "function" -> "delay". Настройте её на задержку в 10 минут. Установите опцию "Drop intermediate messages" — это важно, чтобы при каждом новом событии (например, вы всё ещё отсутствуете) таймер перезапускался.
- Действие: Нода "call service". Здесь можно использовать сервис
notify.telegram(если у вас настроена интеграция Telegram в HA) или универсальную нодуnode-red-contrib-chatbotдля прямого подключения к Telegram API. - В Data сервиса укажите сообщение:
{"message":"⚠️ Кухонное окно открыто уже более 10 минут, а вас нет дома!"}.
Оптимизация и лучшие практики
- Именуйте ноды: Дважды щёлкните на заголовке любой ноды, чтобы дать ей понятное имя (например, "Датчик: Открытие кухонного окна"). Это спасает при анализе сложных потоков.
- Используйте подпотоки (Subflows): Если у вас повторяется одинаковая логика (например, проверка "день/ночь"), вынесите её в отдельный подпоток. Это как функция в программировании.
- Комментируйте: Добавляйте ноды "comment" из палитры, чтобы описывать участки потока.
- Резервное копирование: Потоки хранятся в файле
flows.jsonв папке данных Node-RED (/dataдля надстройки,./node-red-dataдля Docker). Регулярно копируйте этот файл. Также используйте функцию "Экспорт" в меню проекта. - Безопасность: Никогда не оставляйте
leave_front_door_open: trueв продакшене. Используйте сложные пароли и токены. Если ваш Node-RED доступен из интернета (через безопасный портал WireGuard VPN — это идеально), обязательно
Понравилась статья?
Поставьте лайк и сохраните полезный материал в закладки.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Home Assistant: А есть ли аналоги?
Xiaomi Miot Auto в Home Assistant: установка, настройка и подключение устройств Xiaomi
Matter и Thread в Home Assistant: новый стандарт умного дома 2024
LocalTuya. Перепрошивка розеток Tuya: Как отвязать розетку от облака.
Sonoff Zigbee 3.0 USB Dongle Plus в Home Assistant: настройка ZHA и Zigbee2MQTT
Второй координатор Zigbee2MQTT: зачем нужен и как настроить