Docker часть 9: Node-Red

Сегодня мы поговорим о Node-RED, продолжая изучать Docker. Это необычный и наглядный инструмент, который позволяет соединять блоки между собой, создавая приложения, похожие на конструктор. Он идеально подходит для автоматизации процессов, работы с интернетом вещей (IoT) или быстрого создания простых API.

Запуск Node-RED в Docker — это типичная ситуация, когда контейнеризация демонстрирует все свои преимущества. Вам не нужно волноваться о зависимостях или вручную настраивать окружение. Вы создаете готовую к работе среду визуального программирования, которую можно в любой момент перенести, обновить или удалить.

В этой статье мы разберем, как правильно запустить Node-RED в контейнере, как сохранить ваши потоки (flow), чтобы они не пропали после перезагрузки, и как подключить к нему полезные плагины. Это будет простой и полезный шаг в процессе создания ваших первых автоматизированных решений.

Установка 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 и брокер Mosquitto работают, поскольку наша автоматизация Node-RED зависит от Home Assistant и может выполнять определенные задачи с помощью MQTT.

Запускам новый контейнер 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.

В этом разделе цикла Docker мы рассмотрим, как запустить Node-RED, который является удобным инструментом для визуального программирования, особенно полезным для автоматизированных и умных домовых проектов. С помощью контейнеров Docker его можно быстро развернуть, настроить и подключить к различным приложениям, не заботясь об установке зависимостей. Если вы хотите быстро собрать свой рабочий процесс без лишних проблем, это идеальное решение. Он автономен, стабилен и легко масштабируется.

Настройка Home Assistant

Боковая панель

Чтобы облегчить доступ, добавляем iframe в боковую панель. Откройте файл configuration.yaml и добавьте новый блок.

panel_iframe: [...] nodered: title: Node-RED icon: mdi:lan url: "http://<ip>:1880/" require_admin: true

Значок Node-RED появится на боковой панели после перезапуска Home Assistant из меню «Панель разрабoтчика».

Токен доступа

Давайте возьмем долгосрочный токен доступа, чтобы настроить это соединение.

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

Во всплывающем окне выберите «Создать токен» и введите имя токена, например, Node-RED. Наконец, чтобы вы не могли открыть токен доступа впоследствии, скопируйте и вставьте его в безопасное место.

Настройка Node-RED

Сначала нам нужно добавить узлы помощника дома в Node-RED.

  1. Откройте меню в правом верхнем углу и нажмите «Управление палитрой», чтобы получить обзор доступных и установленных узлов.
  2. Откройте вкладку «Установить».
  3. Найдите и установите node-red-contrib-home-assistant-websocket.

Далее нам нужно настроить Node-RED и Home Assistant.

  1. Перейдите на главный экран и перетащите узел events: all на доску.
  2. Дважды щелкните узел, чтобы открыть его конфигурацию.
  3. Выберите «Добавить новый сервер…» рядом с «Сервер» и щелкните значок карандаша.
  4. Дайте конфигурации сервера имя (например, Home Assistant).
  5. НЕ устанавливайте флажок Using the Home Assistant Add-on.
  6. Рядом с базовым URL введите адрес, который вы используете для доступа к Home Assistant http://<ip>:8123
  7. Введите токен доступа, который мы получили от Home Assistant ранее.
  8. Нажмите «Добавить», а после чего «Сохранить»

Отныне мы можем общаться с помощником дома Node-RED. Мы можем следить за изменениями состояния и вызвать услуги Home Assistant и интеграций HA.

MQTT и Node-RED

Кроме того, мы должны настроить связь между Node-RED и нашим брокером MQTT, чтобы мы могли напрямую общаться с устройствами с помощью MQTT от Node-RED.

Эта настройка очень похожа на настройки подключения помощника дома. Основное отличие состоит в том, что MQTT поддерживается по умолчанию, поэтому нам не нужно добавлять пакет.

  1. Добавьте узел MQTT.
  2. Дважды щелкните, чтобы открыть его конфигурацию.
  3. На вкладке «Соединение» введите адрес сервера (<ip>) и порт (1883) нашего брокера, а также выберите протокол MQTT V5.
  4. На вкладке «Безопасность» введите имя пользователя и пароль только что созданного пользователя MQTT.
  5. Нажмите «Добавить», а после чего «Сохранить». Обратите внимание, что вам может потребоваться ввести тему MQTT для прослушивания, просто введите подстановочный знак #.

После завершения этой части мы можем создавать самые захватывающие и визуально привлекательные потоки автоматизации и общаться напрямую с нашим MQTT-брокером без посредников.

Пример работы

В части 7 мы подключали кнопку через Zigbee2MQTT. Теперь мы можем получить событие из всех события. Для этого добавьте узел отладки. Состояние дебага должно измениться, если вы нажмете на кнопки. Если все было сделано правильно, ваша конфигурация Node-Red полностью работает.

Итоговая структура проекта

home-assistant ├── .env ├── docker-compose.yaml ├── esphome ├── fileeditor ├── homeassistant ├── mosquitto ├── nodered │   └── ... ├── portainer └── zigbee2mqtt

Таким образом, мы обнаружили Node-RED внутри Docker-контейнера. Это один из самых ярких примеров удобства контейнеризации. Мы получили готовый к использованию инструмент всего одной команды, а не ручную установку Node.js, настройки зависимостей и сервисов.

Главный вывод состоит в том, что мы не только запустили редактор, но и создали для него переносимую и управляемую среду. Теперь наши настройки, потоки и рабочее пространство надежно хранятся на хостовой машине в смонтированном томе. Это означает, что контейнер можно останавливать, обновлять или даже переносить на другой сервер без потери результатов работы.

Таким образом, использование Docker превращает Node-RED из простого инструмента для прототипирования в устойчивую часть инфраструктуры. Он легко интегрируется в более сложные системы с помощью Docker Compose и может быть масштабирован при необходимости. Наконец, вы экономите время не на установке, а на создании полезной автоматизации.

Поделиться с друзьями
Алексей Волков

Инженер систем автоматизации. Более 8 лет проектирую и внедряю системы умного дома для жилых и коммерческих объектов.

Оцените автора
Добавить комментарий