it:iot:nodered

Toto je starší verze dokumentu!


Node RED

Nodered jsem instaloval v dockeru pomoci IOTstack. Instalace v dockeru má nějaká omezení - zejména co se týče nodu exec. Proto je velmi užitečné prostudovat dokumentaci k IOTstack k Node-RED.

Při rozběhnutí sériového portu v Noderedu jsem měl několik problémů. Nejprve mi Nodered psal, že se nepodařilo k /dev/ttyUSB0 připojit. To jsem vyřešil editací docker-compose.yml:

services:
  nodered:
    container_name: nodered
    build:
      context: ./services/nodered/.
      args:
      - DOCKERHUB_TAG=latest
      - EXTRA_PACKAGES=
    restart: unless-stopped
    user: "0"
    environment:
    - TZ=Etc/UTC
    ports:
    - "1880:1880"
    volumes:
    - ./volumes/nodered/data:/data
    - ./volumes/nodered/ssh:/root/.ssh
    - /var/run/docker.sock:/var/run/docker.sock
    - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
    devices:
    - "/dev/ttyUSB0:/dev/ttyAMA0"
    - "/dev/vcio:/dev/vcio"
    - "/dev/gpiomem:/dev/gpiomem"

Púvodně bylo v devices tohle: /dev/ttyAMA0:/dev/ttyAMA0. Do Noderedu jsem chtěl ale posílat ttyUSB0, tak jsem to změnil na /dev/ttyUSB0:/dev/ttyAMA0 a v dockeru budu přistupovat k zařízení /dev/ttyAMA0.

Další problém, který se objevil byl, že když jsem nastavil nodered, tak havaroval s hlášením segmentatin fault vždycky, když se měl připojit k /dev/ttyAMA0. Takže se docker neustále restartoval.

V této diskusi jsem našel pomoc.

Nejprve jsem se připojil do dockeru s noderedem.

docker exec -it nodered bash

Dále jsem zkusil vytvořil soubor test.js s tímto obsahem:

const { SerialPort } = require("serialport");
var port = new SerialPort({path: '/dev/ttyAMA0', baudRate: 115200});

A otestovat spuštění:

bash-5.1# node test.js

Problém se pořád projevoval. Když jsem podle doporučení provedl rebuild pluginů, testovací příkaz prošel a modul opravdu začal fungovat.

bash-5.1# npm rebuild --build-from-source

Najednou v logu noderedu vidím namísto segfault tohle:

3 Jan 16:50:22 - [info] [serialconfig:2268525fcaad5010] serial port /dev/ttyAMA0 opened at 115200 baud 8N1

K vyčítání dat z mého zařízení na sériovém portu z Noderedu mi posloužil tento návod.

Takto vypadá jednoduché propojení v Noderedu:

A takto jsem musel nakonfigurovat sériovou linku pro mé zařízení:

Samotnou zprávu pak posílám v json formátu:

Tutoriál popisuje jak vytvořit grafickou nástěnku pro Node RED.

Při zabezpečení jsem čerpal z manuálu Securing Node-Red with SSL and Username Authentication.

Nejprve je potřeba vytvořit certifikáty. Protože jsem nechtěl vytvářet další certifikační autoritu, využil jsem certifikáty, které mi připravil skript v dokumentu Mosquitto.

Skript mi vytvořil certifikát server-key.pem a server-cert.pem.

Poté jsem editoval konfigurační soubor settings.js pro Node RED ve kterém jsem zadal absolutní cesty k certifikátům a zapnul vyžadování HTTPS. Bez absolutních cest nemohl Node RED najít certifikáty:

https: function() {
     // This function should return the options object, or a Promise
     // that resolves to the options object
     return {
         key: require("fs").readFileSync('/data/server-key.pem'),
         cert: require("fs").readFileSync('/data/server-cert.pem')
     }
},
 
requireHttps: true,

Nejprve jsem si vygeneroval nové zaheshované heslo:

docker exec -it nodered bash
bash-5.1# node-red-admin hash-pw
Password:
$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.

Poté v souboru settings.js odkomentuju následující řádky a nahradím hash hesla:

adminAuth: {
    type: "credentials",
    users: [{
        username: "admin",
        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
        permissions: "*"
    }]
},
  • it/iot/nodered.1672872850.txt.gz
  • Poslední úprava: 2023/01/04 22:54
  • autor: Petr Nosek