Dockeransicht auf unraid

Einleitung und Motivation

Bisher habe ich meine Haussteuerung (hauptsächlich Zigbee-Devices mit Programmierung über Node-RED) auf einem Raspberry-400 (ein normaler RPi-4 war damals nicht zu bekommen) betrieben.
Aber irgendwie machte die Konfiguration immer Mucken, wenn sie mit einem plötzlichen Stromausfall konfrontiert war.
So super war der Einsatz auf SD-Karten halt nicht wirklich.

Andererseits hatte ich vor einiger Zeit einen Unraid-Server in Betrieb genommen, der ohnehin unausgelastet war und zusätzliche Aufgaben vertragen würde. Außerdem hängt der an einer USV.

 

Damit war einigermaßen klar, dass ich meine Haussteuerung auf diesen neuen Server umziehen will.

Was an Software benötigt wird:

* MQTT-Broker (Mosquitto)
* Zigbee2MQTT
* Node-RED
* eine exportierte Flow-Datei von der alten Installation

Der Vorteil der neuen Variante ist, dass die einzelnen Komponenten sich in Docker-Containern befinden und daher rasch installiert und gewartet werden können.

An Hardware wird von mir verwendet:

* Ein MiniPC „HP-Elitedesk 800 G3 Tiny“ (Intel i3-6100, 16GB RAM) (war 2nd-hand um günstiges Geld)
* Bootstick mit Unraid-OS (ja, das gehört so…)
* Daran hängen dann 2 Stk. 4GB-Festplatten, die schon vorhanden waren
* Ein Zigbee-Adapter „Zigbee 3.0 USB Dongle Plus“, siehe sonoff-zigbee-3-0-usb-dongle-plus-e
* Eine USV „EATON Ellipse ECO 650“

Also dann, gehen wir’s an…

Mosquitto installieren

Dazu eine Anleitung aus dem Netz:
how-to-install-an-mqtt-broker-mosquitto-on-unraid/

* In Unraid unter „APPS“ sucht man nach „Mosquitto“ und wählt die Containervorlage von „cmccambridge“

* Dockereinstellungen
** Port: 1883 (default belassen)
** Config directory: /mnt/user/appdata/mosquito (default belassen)

* Container starten
Er wird sich zwar gleich wieder beenden, aber dafür wird das File „mosquitto-unraid-default.conf“ angelegt.

* Konfigurationsdatei bearbeiten und die „Option 1“ aktivieren (unsichere Variante)
Dazu öffnet man das globale Terminal (icon rechts oben ‚>‘) und gibt dann folgende Kommandos ein:

----
nano /mnt/user/appdata/mosquitto/mosquitto-unraid-default.conf
// Die #-Zeichen bei der Option 1 entfernen
listener 1883
protocol mqtt
allow_anonymous true
// jetzt noch die Datei sichern und schließen
// Ctrl-o und <Enter> für Schreiben
// Ctrl-x für Beenden
----

* Den Docker Container „mosquitto“ starten
Damit ist die Datei vorbereitet und der Docker-Dienst sollte sich jetzt normal starten lassen.

Hinweis: im jetzigen Zustand kann jeder Client mit dem MQTT-Broker völlig ohne Passwort kommunzieren, was allerdings nicht empfehlenswert ist.
Daher wird in einem zweiten Schritt eine User-Passwort-Kombination erzeugt.
Den Schritt mit der _ungeschützten_ Variante ist notwendig, weil wir das Kommando `mosquitto_passwd` benötigen, das allerdings nur verfügbar ist, wenn mosquitto bereits läuft (wieder einmal Henne-Ei…)

* Username und Passwort erzeugen
Wieder im Terminal:

----
// Erzeuge eine leere Passwort-Datei, soferne sie noch nicht existiert
docker exec -it mosquitto touch /mosquitto/config/passwd
// oder alternativ
touch /mnt/user/appdata/mosquito/passwd
// Lege einen neuen User an.
// Das Kommando verlangt dann gleich nach dem zu verwendenden Passwort.
docker exec -it mosquitto mosquitto_passwd /mosquitto/config/passwd user_name
----

* Konfigurationsdatei nochmals bearbeiten und die „Option 2“ aktivieren (diesmal wollen wir das Passwort verwenden)
D.h. wieder auf der Commandozeile/Terminal die Konfigurationsdatei öffnen und editieren

----
nano /mnt/user/appdata/mosquitto/mosquitto-unraid-default.conf
// Die #-Zeichen bei der Option 1 wieder hinzufügen
# listener 1883
# protocol mqtt
# allow_anonymous true
// Dafür aber die #-Zeichen bei der Option 2 entfernen
listener 1883
protocol mqtt
password_file /mosquitto/config/passwd
// Wieder die Datei sichern und schließen
// Ctrl-o und <Enter> für Schreiben
// Ctrl-x für Beenden
----

* Jetzt den Mosquitto-Docker-Container neu starten und die Logs kontrollieren
Wenn die unterste Zeile folgendermaßen aussieht:

`1725780124: mosquitto version 2.0.18 running`

Gratulation an mich selbst… der erste Teil ist geschafft…

Hinweis an mich selbst…
Es erscheinen noch 2 Warnungen. Um das werde ich mich irgendwann (vielleicht) kümmern.

Jetzt aber weiter zu Schritt 2…

Zigbee2MQTT installieren

Jetzt wird der docker container „zigbee2mqtt“ von koenkk installiert.

Siehe folgende Links:
https://www.zigbee2mqtt.io/
https://hub.docker.com/r/koenkk/zigbee2mqtt/

Der schwierigste Teil ist, dass man aus dem container heraus, den USB-Funkstick ansprechen kann.
Dazu sieht man mittels Konsolenbefehl nach, wie dieser benannt ist.

----
ls -l /dev/serial/by-id

total 0
lrwxrwxrwx 1 root root 13 Sep 7 08:39 usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_18ccaa8057c9eb119662914f1d69213e-if00-port0
-> ../../ttyUSB0
----

Wichtig ist hier das „ttyUSB0“.

Einerseits muss man den Stick in den Docker-Einstellungen und andererseits (neben anderen Parametern) in der configuration.yaml-Datei eintragen.

----
root@togebox:/mnt/user/appdata/zigbee2mqtt# nano configuration.yaml
homeassistant: false
frontend: true
mqtt:
base_topic: zigbee2mqtt
server: mqtt://192.168.8.139
user: user1
password: user1pw
serial:
port: /dev/ttyUSB0
advanced:
network_key:
- 3
- 160
...
- 149
- 174
pan_id: 34097
ext_pan_id:
- 34
...
- 113
homeassistant_legacy_entity_attributes: false
legacy_api: false
legacy_availability_payload: false
device_options:
legacy: false
----

Jetzt nochmals den docker starten und dann die logs kontrollieren.

----
[2024-09-08 10:15:05] info: z2m: Connecting to MQTT server at mqtt://192.168.8.139
[2024-09-08 10:15:05] info: z2m: Connected to MQTT server
[2024-09-08 10:15:05] info: z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/bridge/state', payload '{"state":"online"}'
[2024-09-08 10:15:05] info: z2m: Started frontend on port 8080
[2024-09-08 10:15:05] info: z2m: Zigbee2MQTT started!
----

Der schwierigste Teil, nämlich den Zigbee-Adapter zum Laufen zu bringen, ist auch geschafft. Der Rest sollte eine ziemlich gemähte Wiese sein…

Also frohen Mutes auf zu Schritt 3…

Node-RED installieren

Docker container für nodered installieren
Das ist jetzt recht einfach. Man belässt einfach alle Standardwerte und startet dann das docker image ganz normal.

Flowdatei importieren
Da man nun mit vor einer leeren nodered Installation sitzt, muss man die exportierte Flowdatei importieren.

mqtt-broker node anpassen
Dann muss der mqtt-broker node auf die neue Gegebenheit angepasst werden:
Server: 192.168.8.139
Security: Username / Password

Manage Palette / Install
Einige der importierten nodes sind unbekannt und müssen daher zur Palette hinzugefügt werden.
In meinem Fall sind das:
* node-red-contrib-eztimer
* node-red-contrib-telegrambot
* node-red-contrib-wemo-emulator
* node-red-dashboard

UI-Links
Die Weboberflächen sind nun (in meinem Fall) unter folgenden Adressen aufrufbar:
* http://192.168.8.139:9442/#/ Zigbee2MQTT
* http://192.168.8.139:1880 Node-RED flows
* http://192.168.8.139:1880/ui Node-RED UI

Zur Werkzeugleiste springen