Node-RED: различия между версиями

Материал из Wiren Board
(не показаны 102 промежуточные версии 7 участников)
Строка 1: Строка 1:
<languages/><translate>
{{DISPLAYTITLE:Wiren Board 6: Node-RED}}
<!--T:19-->
[[Файл:Node-red.PNG|500px|thumb|right| Node-RED на WB6]]
{{DISPLAYTITLE:Установка Node-RED на контроллер Wiren Board}}
[[Файл:Installing node-red-contrib-wirenboard.PNG|500px|thumb|right| Установка WB Nodes на контроллер Wiren Board]]
[[Файл:Node-red.PNG|500px|thumb|right| Node-RED на контроллере Wiren Board]]


== Описание == <!--T:20-->
== Описание ==  
{{YouTube
Node-RED — это инструмент визуального программирования. Работает на платформе Node.js.
|link= https://youtu.be/cKQmU4LZo4c
|text= Видеоурок по Node-RED на Wiren Board от SetPoint
}}
Node-RED — это инструмент визуального программирования, основанный на Node.js и который разрабатывается и поддерживается открытым сообществом.


<!--T:21-->
Более подробное описание, инструкции и примеры использования можно найти на сайте [https://nodered.org/ nodered.org]
Подробное описание, инструкции и примеры использования можно найти на сайте [https://nodered.org/ nodered.org], а поддержку сообщества в телеграм-канале [https://t.me/SprutAI_NodeRED Node-RED].


<!--T:22-->
== Установка ==
{{Wbincludes:Installing Software In Console}}
Для установки Node-RED на Wiren board 6 подключитесь к контроллеру по [[SSH]] и введите в консоль несколько команд.


== Установка ==  <!--T:23-->
Настраиваем репозиторий Node JS:


{{Wbincludes:Installing Software In Console Catalog And Update}}
<syntaxhighlight lang="bash">
curl -sL https://deb.nodesource.com/setup_12.x | bash -
</syntaxhighlight>


{{Wbincludes:Installing Software In Console}}
Устанавливаем необходимые компоненты:


<!--T:24-->
Установите необходимые компоненты:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
apt update && apt install -y nodejs git make g++ gcc build-essential
apt install -y nodejs git make g++ gcc build-essential
</syntaxhighlight>
</syntaxhighlight>


<!--T:25-->
Запускаем установку Node-RED:
Запустите установку Node-RED:
 
:<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
npm install -g --unsafe-perm node-red
npm install -g --unsafe-perm node-red
</syntaxhighlight>
</syntaxhighlight>


<!--T:26-->
== Создание Сервиса ==
Если потребуется обновить версию Node-RED, выполните команду установки ещё раз.


В релизах wb-2207 и старее устаревшая версия NodeJS, поэтому свежий Node-RED можно поставить только в docker — [[Node-RED_docker|инструкция по установке Node-RED в docker]].
Также в docker следует устанавливать если требуется версия более новая чем из пакетов.
== Создание сервиса == <!--T:27-->
<!--T:28-->
Для автозапуска Node-RED необходимо настроить сервис. Для этого в папке <code>/etc/systemd/system/</code> создайте файл <code>nodered.service</code>:
Для автозапуска Node-RED необходимо настроить сервис. Для этого в папке <code>/etc/systemd/system/</code> создайте файл <code>nodered.service</code>:


<!--T:29-->
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
nano /etc/systemd/system/nodered.service
nano /etc/systemd/system/nodered.service
</syntaxhighlight>
</syntaxhighlight>


<!--T:30-->
Затем вставьте в этот файл строки:
Затем вставьте в этот файл строки:
<pre>
<pre>
Строка 58: Строка 43:
Wants=network.target
Wants=network.target


<!--T:31-->
[Service]
[Service]
Type=simple
Type=simple
Строка 65: Строка 49:
WorkingDirectory=/home
WorkingDirectory=/home


<!--T:32-->
Nice=5
Nice=5
Environment="NODE_OPTIONS=--max_old_space_size=256"
Environment="NODE_OPTIONS=--max_old_space_size=256"
Строка 73: Строка 56:
SyslogIdentifier=Node-RED
SyslogIdentifier=Node-RED


<!--T:33-->
[Install]
[Install]
WantedBy=multi-user.target
WantedBy=multi-user.target
</pre>
</pre>


<!--T:34-->
Сохраните изменения и закройте файл. Теперь для включения сервиса нужно ввести команду:
Сохраните изменения и закройте файл. Теперь включите сервис и запустите его командой:


<!--T:35-->
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
systemctl enable nodered && systemctl start nodered
systemctl enable nodered.service
</syntaxhighlight>
</syntaxhighlight>


<!--T:36-->
== Запуск ==
Проверьте статус сервиса командой, в выводе должна быть строчка <code>Active: active (running)</code>:
После создания и настройки сервиса nodered его нужно запустить, для этого выполните команду:
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
# systemctl status nodered
service nodered start
● nodered.service - Node-RED graphical event wiring tool
  Loaded: loaded (/etc/systemd/system/nodered.service; enabled; vendor preset: enabled)
  Active: active (running) since Fri 2021-12-03 06:32:25 UTC; 24s ago
Main PID: 2757 (node)
  CGroup: /system.slice/nodered.service
          └─2757 node /usr/bin/node-red --max_old_space_size=256
 
<!--T:37-->
Dec 03 06:32:25 wirenboard-AWQBNTYP systemd[1]: Started Node-RED graphical event wiring tool.
Dec 03 06:32:36 wirenboard-AWQBNTYP Node-RED[2757]: 3 Dec 06:32:36 - [info]
Dec 03 06:32:36 wirenboard-AWQBNTYP Node-RED[2757]: Welcome to Node-RED
Dec 03 06:32:36 wirenboard-AWQBNTYP Node-RED[2757]: ===================
Dec 03 06:32:36 wirenboard-AWQBNTYP Node-RED[2757]: 3 Dec 06:32:36 - [info] Node-RED version: v2.1.4
Dec 03 06:32:36 wirenboard-AWQBNTYP Node-RED[2757]: 3 Dec 06:32:36 - [info] Node.js  version: v12.19.0
Dec 03 06:32:36 wirenboard-AWQBNTYP Node-RED[2757]: 3 Dec 06:32:36 - [info] Linux 5.10.35-wb6 arm LE
Dec 03 06:32:41 wirenboard-AWQBNTYP Node-RED[2757]: 3 Dec 06:32:41 - [info] Loading palette nodes
</syntaxhighlight>
</syntaxhighlight>


== Удаление == <!--T:38-->
==Веб-интерфейс Node-Red==
Если вам больше не нужен Node-RED, то его можно удалить:
# Остановите, отключите и удалите сервис:
#:<syntaxhighlight lang="bash">
systemctl stop nodered && systemctl disable nodered && rm /etc/systemd/system/nodered.service
</syntaxhighlight>
# Удалите сам Node-RED:
#:<syntaxhighlight lang="bash">
npm -g remove node-red && npm -g remove node-red-admin && rm -R ~/.node-red
</syntaxhighlight>
 
<!--T:39-->
Node.js, тоже можно удалить, но убедитесь, что у вас не установлены другие програмы, которые его используют, например, zigbee2mqtt. Чтобы удалить node.js, выполните команду:
:<syntaxhighlight lang="bash">
apt remove nodejs
</syntaxhighlight>
 
==Веб-интерфейс Node-RED== <!--T:40-->
После запуска сервиса откройте браузер и введите адрес своего контроллера в сети и порт 1880.  
После запуска сервиса откройте браузер и введите адрес своего контроллера в сети и порт 1880.  
Например: http://192.168.42.1:1880
Например: http://192.168.42.1:1880


<!--T:41-->
Инструкции по работе c Node-RED можно найти на [https://nodered.org/docs/getting-started/ сайте nodered.org]
Инструкции по работе c Node-RED можно найти на [https://nodered.org/docs/getting-started/ сайте nodered.org]


== Ноды ''mqtt in'' и ''mqtt out'' (рекомендуется) == <!--T:49-->
== WB Nodes ==  
=== Настройка подключения ===
Для упрощения взаимодействия Node-RED с WB пользователь [https://support.wirenboard.com/t/node-red-contrib-wirenboard/2019 Andrej_Popov] написал модуль <code>node-red-contrib-wirenboard</code>.
[[Image: NodeRed_mqtt_nodes.jpg |300px|thumb|right| Ноды MQTT в Node-Red ]]
Для работы по MQTT используются ноды '''mqtt in''' и  '''mqtt out'''. Также вам понадобятся адреса топиков, взять их можно в веб-интерфейсе контроллера на странице [[Wiren Board Web Interface#mqtt-channels |MQTT-каналы]].
 
<!--T:50-->
Для настройки MQTT-соединения в Node-RED выполните следующие действия:
#Перетащите ноду '''mqtt in''' в рабочую область.
#Войдите в конфигурацию ноды и нажмите на '''Карандаш''' напротив поля '''Server'''.
#На вкладке '''Connecting''' задайте адрес брокера и номер порта.
#:В поле '''Name''' введите любое имя сервера.
#:На вкладке '''Security''' можно указать Имя пользователя и Пароль для подключения к брокеру. Если в качестве брокера выступает контроллер Wiren Board, это поле нужно оставить пустым.
#После заполнения всех полей нажмите кнопку '''Update'''. Созданный брокер теперь можно использовать для настройки всех подключений.
#Выберите созданные брокер из списка в поле '''Server'''.
#Введите адрес mqtt-топика в поле '''Topic'''.
#Нажмите кнопку '''Done'''.
 
<!--T:51-->
По такому же принципу настраивается нода '''mqtt out'''.
<gallery mode="packed" heights="150px" caption="Настройка MQTT-брокера (Server)>
Image: NodeRed_mqtt2.jpg | Вкладка ''Connecting''
Image: NodeRed_mqtt3.jpg  | Вкладка ''Security''
</gallery>
 
=== Отправка команд === <!--T:52-->
Для отправки команды контроллеру по MQTT используется нода '''mqtt out'''. При этом в поле '''Topic''' указывается адрес mqtt-топика контроллера, в который необходимо записать параметр. Нужно учитывать, что в конце адреса ноды '''mqtt out''' нужно написать <code>/on</code>, иначе параметр в топик не запишется. Например, <code>/devices/wb-mrgbw-d-fw3_129/controls/RGB Strip/on</code>. Подробнее читайте на странице [[MQTT | MQTT]].
<gallery mode="packed" heights="150px" caption="Настройка нод для работы с MQTT">
Image: NodeRed_mqtt4.jpg | Пример настройки ноды '''mqtt in'''
Image: mqtt_out_no.jpg  | Пример настройки ноды '''mqtt out'''
Image: NodeRed_mqtt1.jpg | Обмен данными через MQTT в Node-Red
</gallery>
Для отправки параметра в ноду '''mqtt out'''  можно использовать ноду '''inject'''.
#Перетащите ноду '''inject''' в рабочую область.
#Подключите ее ко входу ноды '''mqtt out'''.
#Зайдите в настройки ноды '''inject''' и задайте ''Имя'' ноды, ''Тип переменной'' и ее ''Значение''. Нажмите кнопку '''Done'''.
<gallery mode="packed" heights="130px">
Image: Inject1.jpg | Пример настроек ноды '''inject''' для управления дискретным параметром
Image: Inject2.jpg | Поле настройки периодов повторения отправки ноды '''inject'''
</gallery>
<gallery mode="packed" heights="100px">
Image: Node_inject.jpg | Пример использования ноды '''inject'''
</gallery>
 
<!--T:53-->
После настройки ввода и вывода можно обрабатывать данные внутри Node-RED и настроить использование сторонних сервисов, например, [[Node-RED_Alice | Умный дом с Алисой]].
 
<!--T:54-->
<gallery mode="packed" heights="150px">
Image: NodeRed_mqtt5.jpg | Пример управления с помощью Алисы
</gallery>
 
== WB Nodes (решение сообщества) ==  <!--T:42-->
 
[[Файл:Installing node-red-contrib-wirenboard.PNG|500px|thumb|right| Установка WB Nodes на контроллер Wiren Board]]
[[Image: nr+wb-settings.png |600px|thumb|right|Настройка соединения с контроллером Wiren Board]]
Чтобы упростить взаимодействие Node-RED с контроллером Wiren Board, пользователь [https://support.wirenboard.com/t/node-red-contrib-wirenboard/2019 Andrej_Popov] написал модуль <code>node-red-contrib-wirenboard</code>.
 
=== Установка === <!--T:43-->
Установим его через веб-интерфейс Node-RED:
{{Node-RED Installing plugin
|search= wirenboard
|name= node-red-contrib-wirenboard
}}
 
После установки, в левой панели появится секция Wiren Board.
 
=== Настройка === <!--T:44-->
После того как вы установили WB Nodes, вам нужно настроить соединение с MQTT-брокером контроллера Wiren Board:
# Добавьте в рабочую область ноду '''WB-input''', которая находится в левой панели, в секции '''Wiren Board'''.
# Дважды кликните на ней, откроется окно '''Edit in node'''.
# Найдите в нём поле '''Server''' и нажмите на кнопку с карандашом. Откроется окно '''Add new wirenboard-server config node'''.
# Заполните поля '''Name''', '''Host''' и '''MQTT Port'''. Если Node-RED установлен на контроллере — в поле Host пропишите <code>localhost</code>. В поле '''Name''' укажите произвольное имя, а в поле '''MQTT Port''' — 1883.
# Сохраните настройки сервера нажатием на кнопку '''Done'''.
# Закройте окно '''Edit in node''' нажатием на '''Cancel'''.
{{note|info| После настройки подключения, примените настройку сервера нажатием кнопки '''Deploy''' справа вверху. Только после этого будет доступен список каналов контроллера Wiren Board.}}
 
<!--T:45-->
Вы настроили WB Nodes и можете писать автоматизации с использованием Node-RED.
 
=== Проверка настроек === <!--T:46-->
Чтобы проверить правильность настроек:
# Добавьте в рабочую область любую ноду из группы Wiren Board, например, '''WB-input'''.
# Дважды кликните на ноде '''WB-input''', откроется окно '''Edit in node'''.
# В окне '''Edit in node''' нажмите кнопку '''Refresh Device List'''.
 
<!--T:47-->
Если соединение настроено верно, то в выпадающем списке поля '''Сhannel''' появится список доступных для использования каналов.
 
=== Примеры === <!--T:48-->
В комплекте с WB-Nodes есть примеры для [[Node-RED Apple HomeKit | Apple HomeKit]] и Яндекс.Алисы, найти их можно в '''Menu''' → '''Import''' → '''Examples'''.
<gallery mode="packed" heights="200px" caption="Примеры из комплекта WB-Nodes">
Image: WB-Nodes Examples 1.png | Список примеров
Image: WB-Nodes Examples 2.png | Пример в рабочей области
</gallery>
 
=== Решение проблем ===
Иногда, если во флоу есть ошибка, то веб-интерфейс Node-RED может перестать загружаться, в этом случае нужно проверить  логи сервиса nodered.
 
Если в логах будет видна ошибка во флоу, то:
# Подключиться к контроллеру по [[SSH]].
# Остановить службу, если она запущена:
#: <syntaxhighlight lang="bash">
systemctl stop nodered
</syntaxhighlight>
# Запустить Node-RED в безопасном режиме:
#: <syntaxhighlight lang="bash">
node-red --safe
</syntaxhighlight>
# Установить проблему и остановить запущенный в безопасном режиме Node-RED.
# Снова запустить сервис:
#: <syntaxhighlight lang="bash">
systemctl start nodered
</syntaxhighlight>
 
Если вы ставили Node-RED в docker, воспользуйтесь инструкцией на странице [[Node-RED_docker|Установка Node-RED в docker]].


== Примеры использования == <!--T:55-->
Установим его через веб-интерфейс Node-Red:
Примеры использования Node-RED с WB-Nodes на контроллерах Wiren Board:
# [[#Веб-интерфейс Node-Red | Зайдите в веб-интерфейс Node-Red]].
* [[Node-RED_Telegram | Настройка Telegram-бота]].
# В правом верхнем углу вызовите меню.
* [[Node-RED_Alice | Настройка Алисы на контроллере Wiren Board]].
# Выберите пункт '''Настройки''' (Settings).
* [[Node-RED Apple HomeKit | Настройка Apple HomeKit на контроллере Wiren Board]].
# В открывшемся окне выберите вкладку '''Палитра''' (Palette).
* [[Node-RED Dashboards|Создание панелей (Dashboards) в Node-RED]].
# Перейдите на вкладку '''Установка''' (Install), введите в поле поиска '''wirenboard''' и нажмите на клавиатуре Enter.
* [https://youtu.be/cKQmU4LZo4c Видео от нашего партнёра: Wiren Board + Node-RED]
# Будет найдено два пакета, установите пакет с названием '''node-red-contrib-wirenboard'''.
</translate>
# Закройте окно с настройками. Установка WB Nodes завершена.
* [https://habr.com/ru/company/wirenboard/blog/689098/ Умный дом на Wiren Board и Node-RED: четыре полезных сценария без программирования]
* [https://habr.com/ru/company/wirenboard/blog/689826/ Умный дом на Wiren Board и Node-RED: ещё три полезных сценария без программирования]
* [https://habr.com/ru/company/wirenboard/blog/713274/ Работаем с Zigbee-устройствами через Zigbee2mqtt и Node-RED]

Версия 15:20, 29 июля 2021

Node-RED на WB6
Установка WB Nodes на контроллер Wiren Board

Описание

Node-RED — это инструмент визуального программирования. Работает на платформе Node.js.

Более подробное описание, инструкции и примеры использования можно найти на сайте nodered.org

Установка

Для установки Node-RED на Wiren board 6 подключитесь к контроллеру по SSH и введите в консоль несколько команд.

Настраиваем репозиторий Node JS:

curl -sL https://deb.nodesource.com/setup_12.x | bash -

Устанавливаем необходимые компоненты:

apt install -y nodejs git make g++ gcc build-essential

Запускаем установку Node-RED:

npm install -g --unsafe-perm node-red

Создание Сервиса

Для автозапуска Node-RED необходимо настроить сервис. Для этого в папке /etc/systemd/system/ создайте файл nodered.service:

nano /etc/systemd/system/nodered.service

Затем вставьте в этот файл строки:

[Unit]
Description=Node-RED graphical event wiring tool
Wants=network.target

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/home

Nice=5
Environment="NODE_OPTIONS=--max_old_space_size=256"
ExecStart=/usr/bin/env node-red $NODE_OPTIONS $NODE_RED_OPTIONS
KillSignal=SIGINT
Restart=on-failure
SyslogIdentifier=Node-RED

[Install]
WantedBy=multi-user.target

Сохраните изменения и закройте файл. Теперь для включения сервиса нужно ввести команду:

systemctl enable nodered.service

Запуск

После создания и настройки сервиса nodered его нужно запустить, для этого выполните команду:

service nodered start

Веб-интерфейс Node-Red

После запуска сервиса откройте браузер и введите адрес своего контроллера в сети и порт 1880. Например: http://192.168.42.1:1880

Инструкции по работе c Node-RED можно найти на сайте nodered.org

WB Nodes

Для упрощения взаимодействия Node-RED с WB пользователь Andrej_Popov написал модуль node-red-contrib-wirenboard.

Установим его через веб-интерфейс Node-Red:

  1. Зайдите в веб-интерфейс Node-Red.
  2. В правом верхнем углу вызовите меню.
  3. Выберите пункт Настройки (Settings).
  4. В открывшемся окне выберите вкладку Палитра (Palette).
  5. Перейдите на вкладку Установка (Install), введите в поле поиска wirenboard и нажмите на клавиатуре Enter.
  6. Будет найдено два пакета, установите пакет с названием node-red-contrib-wirenboard.
  7. Закройте окно с настройками. Установка WB Nodes завершена.