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. Jen pro úplnost. Node RED i Mosquitto mi běží na jednom serveru. Proto si mohu dovolit použít stejné certifikáty. Pokud by každá služba běžela na jiném serveru, musel bych vygenerovat nové certifikáty pro konkrétní IP adresu.
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.