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.