Docker часть 9: Node-Red
В этой части 9 мы добавим Node-RED, который даст нам наглядный и многофункциональный метод автоматизации. С его помощью можно более наглядно делать автоматизации Home Assistant. Но это не означает, что надо все бросать и переходить на этот инструмент. В первую очередь изучите официальный сайт. И решите для себя надо оно или нет.
Установка Node-RED контейнера
Расширяем наш docker-compose.yaml
конфигом для контейнера Node-RED.
services:
[...]
nodered:
container_name: nodered
image: nodered/node-red
restart: unless-stopped
ports:
- "1880:1880/tcp"
environment:
- TZ=Europe/Moscow
volumes:
- ./nodered/data:/data
depends_on:
- homeassistant
- mosquitto
Поскольку наша автоматизация Node-RED зависит от Home Assistant, и мы можем делать некоторые вещи через MQTT, мы хотим убедиться, что наш HA Container и брокер Mosquitto работают.
Запускам новый контейнер docker compose up -d
.
Права доступа к файлам
После запуска у нас в контейнере будут появляться ошибки к файлам.
Error: EACCES: permission denied, copyfile '/usr/src/node-red/node_modules/node-red/settings.js' -> '/data/settings.js'
Это связано с тем, как работает сопоставление пользователей внутри и снаружи контейнера Docker.
Наш том Docker для каталога данных был создан (и принадлежит) нашему пользователю root
с идентификатором uid=0 gid=0
. Пользователь nodered
внутри контейнера, которому принадлежит каталог /data
, однако имеет разные идентификаторы: 1000:1000
(uid:gid). Мы можем исправить это, изменив владельца тома Docker на пользователя с идентификатором 1000:1000
, запустив sudo chown -R 1000:1000 ./nodered/data
.
Docker должен заметить изменение разрешений и перезапустить контейнер. Если нет, заново создайте контейнер из интерфейса Portainer.
Теперь мы можем открыть интерфейс Node-RED по адресу http://<ip>:1880
.
Настройка Home Assistant
Боковая панель
Как и ранее добавляем iframe в боковую панель, для более удобного доступа. Переходим в configuration.yaml
и добавляем новый блок.
panel_iframe:
[...]
nodered:
title: Node-RED
icon: mdi:lan
url: "http://<ip>:1880/"
require_admin: true
Перезапустите Home Assistant через меню «Панель разработчика», и на боковой панели появится значок Node-RED.
Токен доступа
Чтобы настроить это соединение, нам понадобится долгосрочный токен доступа, так что давайте возьмем его.
Нажмите на свое имя пользователя в нижней части боковой панели Home Assistant и прокрутите страницу профиля вниз, пока не увидите раздел Долгосрочные токены доступа.
Нажмите «Создать токен» и введите имя (например, Node-RED) для токена во всплывающем окне. Наконец, скопируйте токен доступа и вставьте его в безопасное место, так как впоследствии вы не сможете открыть токен.
Настройка Node-RED
Сначала нам нужно добавить узлы Home Assistant в Node-RED.
- Откройте меню в правом верхнем углу и нажмите «Управление палитрой», чтобы получить обзор доступных и установленных узлов.
- Откройте вкладку «Установить».
- Найдите и установите
node-red-contrib-home-assistant-websocket
.
Далее нам нужно настроить соединение между Node-RED и Home Assistant.
- Перейдите на главный экран и перетащите узел
events: all
на доску. - Дважды щелкните узел, чтобы открыть его конфигурацию.
- Выберите «Добавить новый сервер…» рядом с «Сервер» и щелкните значок карандаша.
- Дайте конфигурации сервера имя (например, Home Assistant).
- НЕ устанавливайте флажок
Using the Home Assistant Add-on
. - Рядом с базовым URL введите адрес, который вы используете для доступа к Home Assistant
http://<ip>:8123
- Введите токен доступа, который мы получили от Home Assistant ранее.
- Нажмите «Добавить», а после чего «Сохранить»
Отныне мы сможем общаться с Home Assistant от Node-RED. Мы можем прослушивать изменения состояния и вызывать службы, предоставляемые Home Assistant и интеграциями HA.
MQTT и Node-RED
Давайте также настроим соединение Node-RED с нашим брокером MQTT, чтобы мы могли напрямую общаться с устройствами через MQTT от Node-RED.
Эта настройка очень похожа на то, как мы настраиваем подключение Home Assistant. Основное отличие в том, что нам не нужно добавлять пакет, так как MQTT поддерживается по умолчанию.
- Добавьте узел MQTT.
- Дважды щелкните, чтобы открыть его конфигурацию.
- На вкладке «Соединение» введите адрес сервера (
<ip>
) и порт (1883
) нашего брокера, а также выберите протоколMQTT V5
. - На вкладке «Безопасность» введите имя пользователя и пароль только что созданного пользователя MQTT.
- Нажмите «Добавить», а после чего «Сохранить». Обратите внимание, что вам может потребоваться ввести тему MQTT для прослушивания, просто введите подстановочный знак
#
.
Выполнив эту часть, мы теперь можем настроить самые захватывающие и визуально приятные потоки автоматизации и общаться напрямую с нашим MQTT-брокером без промежуточного слоя.
Пример работы
Ранее в части 7 мы подключали кнопку через Zigbee2MQTT, давайте достанем событие из events: all
. Для этого добавим узел debug. После чего нажмем на кнопки и состояние дебага должно измениться. Если все прошло успешно, то ваша конфигурация Node-Red является полностью рабочей.
Итоговая структура проекта
home-assistant
├── .env
├── docker-compose.yaml
├── esphome
├── fileeditor
├── homeassistant
├── mosquitto
├── nodered
│ └── ...
├── portainer
└── zigbee2mqtt