Установка Node-RED на контроллер Wiren Board вручную

From Wiren Board
This is the approved revision of this page, as well as being the most recent.
Other languages:


Это устаревший способ установки. Начиная с релиза testing (на базе Debian Trixie) Node-RED устанавливается на контроллер готовым пакетом wb-node-red одной командой — см. основную инструкцию.

Описание

На этой странице описана ручная установка Node-RED на контроллер через npm. Пакет wb-node-red работает только на релизах на базе Debian Trixie, поэтому на более ранних релизах устанавливайте Node-RED по этой инструкции.

Если нужна версия Node-RED свежее той, что ставится через npm, используйте установку в Docker.

Установка

Чтобы не потерять установленный софт и его данные, обновляйте ПО контроллера только через менеджер пакетов apt. Подробнее читайте в статье Программное обеспечение Wiren Board.

Встроенный флеш-накопитель контроллера разбит на разделы и для пользователя отведён самый большой из них, который монтируется в папку /mnt/data. Нужно учесть эту особенность при установке программ, а также при обновлении прошивки контроллера.

Копируйте команды из инструкции, вставляйте их в консоль контроллера с помощью клавиш Shift+Insert и запускайте клавишей Enter. В случае ошибок, внимательно читайте вывод, там будут инструкции и подсказки.

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

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

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

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

Если потребуется обновить версию 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 && systemctl start nodered

Проверьте статус сервиса командой, в выводе должна быть строчка Active: active (running):

# systemctl status nodered
● 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

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

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

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

Настройка доступа к интерфейсу Node-RED

При первом запуске Node-RED доступ к веб-интерфейсу не ограничен. Если вам необходимо контролировать, какие действия могут выполнять пользователи в интерфейсе Node-RED, то необходимо настроить уровень доступа следующим образом:

  1. В консоли контроллера запустить команду
    node-red admin hash-pw
    
  2. Далее ввести пароль, нажать Enter. Система выдаст хеш введенного пароля. Его необходимо скопировать и использовать далее.
  3. В консоли контроллера запустить команду
    nano /root/.node-red/settings.js
    
    Откроется текстовый редактор.
  4. Найти блок adminAuth:
    //adminAuth: {
    //    type: "credentials",
    //    users: [{
    //        username: "admin",
    //        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcx>
    //        permissions: "*"
    //    }]
    //},
  1. Раскомментировать его.
    adminAuth: {
        type: "credentials",
        users: [{
            username: "admin",
            password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcx>
            permissions: "*"
        }]
    },
  1. В поле username ввести имя пользователя. В поле password ввести ранее скопированный хеш пароля.
    Пример настройки:
        adminAuth: {
            type: "credentials",
            users: [{
                username: "wirenboard",
                password: "$2y$08$EODPHZ9o5pXn2uOj8EPyTOxfpKbdmJWSZupINKuQZAz/pZ1v0lay6",
                permissions: "*"
            }]
        },
    
    Если значение permissions установлено на "*", это означает, что пользователь имеет полный доступ ко всем функциям и возможностям интерфейса Node-RED.
  2. Сохранить изменения с помощью Ctrl+O.
  3. Перезапустить Node-RED командой
    systemctl restart nodered
    

Если необходимо настроить еще один уровень доступа, то повторить действия из пунктов 1 — 3. Далее также в вышеуказанный блок добавить параметры для еще одного пользователя с указанием прав доступа. Сохранить изменения и перезапустить Node-RED.

Пример настройки:

    adminAuth: {
        type: "credentials",
        users: [{
            username: "wirenboard",
            password: "$2y$08$EODPHZ9o5pXn2uOj8EPyTOxfpKbdmJWSZupINKuQZAz/pZ1v0lay6",
            permissions: "*"
        },
            {
            username: "user",
            password: "$2y$08$xaV6PiE0Pq5tRzZPndY7wOOY0ybBdK9aygscSxiu4qoLAA7Tc8yza",
            permissions: "read"
        }]
    },

Значения для permissions могут быть следующими:

  • "read": разрешает только чтение;
  • "write": разрешает запись (например, изменение потоков);
  • "delete": разрешает удаление;
  • "deploy": разрешает развертывание изменений;
  • "*": полный доступ ко всем функциям и возможностям.

Решение проблем

Иногда, если во флоу есть ошибка, то веб-интерфейс Node-RED может перестать загружаться, в этом случае нужно проверить логи сервиса nodered.

Если в логах будет видна ошибка во флоу, то:

  1. Подключиться к контроллеру по SSH.
  2. Остановить службу, если она запущена:
    systemctl stop nodered
    
  3. Запустить Node-RED в безопасном режиме:
    node-red --safe
    
  4. Установить проблему и остановить запущенный в безопасном режиме Node-RED.
  5. Снова запустить сервис:
    systemctl start nodered
    

Если вы ставили Node-RED в docker, воспользуйтесь инструкцией на странице Установка Node-RED в docker.

Удаление

Если вы переходите на пакет wb-node-red — не удаляйте каталог ~/.node-red, пока не перенесёте флоу по инструкции.

Если вам больше не нужен Node-RED, то его можно удалить:

  1. Остановите, отключите и удалите сервис:
    systemctl stop nodered && systemctl disable nodered && rm /etc/systemd/system/nodered.service
    
  2. Удалите сам Node-RED:
    npm -g remove node-red && npm -g remove node-red-admin && rm -R ~/.node-red
    

Node.js, тоже можно удалить, но убедитесь, что у вас не установлены другие программы, которые его используют, например, zigbee2mqtt. Чтобы удалить node.js, выполните команду:

apt remove nodejs