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.
problém se seriovým portem
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:
vytvoření Node RED Dashboard
Tutoriál popisuje jak vytvořit grafickou nástěnku pro Node RED.
zabezpečení Node RED
Při zabezpečení jsem čerpal z manuálu Securing Node-Red with SSL and Username Authentication.
Komunikace přes SSL
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,
Přihlašování admina do editoru
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: "*" }] },
Restartuju kontejner a při startu se mi už ke konfiguraci načítá přihlašovací obrazovka.



