🔌 Z-Wave JS UI als externer Z-Wave Server für ioBroker
Stand: 2026-Februar
📡 Was ist Z-Wave?
Z-Wave ist ein drahtloser Funkstandard für Smart-Home-Anwendungen und arbeitet in Europa im lizenzfreien SRD-Band bei 868,4 MHz. Der Standard wurde speziell für die Hausautomation entwickelt und ist auf geringe Leistungsaufnahme sowie hohe Zuverlässigkeit ausgelegt.
Durch die niedrigere Frequenz im Vergleich zu z.B. Zigbee (2,4 GHz) eignet sich Z-Wave besonders gut für den Einsatz in Wohnungen und Häusern, da Wände und Decken in der Regel besser durchdrungen werden.
Die Geräte bilden ein vermaschtes (Mesh-)Netzwerk. Netzbetriebene Teilnehmer fungieren als Repeater und leiten Funktelegramme weiter. Dadurch erhöht sich die Reichweite und Stabilität des Gesamtnetzes.
Z-Wave ist ein zertifizierter Standard. Jedes Gerät muss eine offizielle Zertifizierung durchlaufen. Dadurch ist die herstellerübergreifende Interoperabilität in der Praxis meist zuverlässiger als bei z.B. Zigbee-Geräten.
Typische Einsatzbereiche
- Licht
- Heizung
- Rollläden
- Sensoren
- Sicherheitsgeräte
👍 Z-Wave – Pro
- Sehr geringer Energieverbrauch
- Betrieb im SRD-Band (EU: 868,4 MHz) mit guter Durchdringung in Wohnungen
- Geroutetes Mesh-Netzwerk für netzbetriebene Geräte
- Gut geeignet für batteriebetriebene Geräte
- Große Geräteauswahl durch viele Hersteller
- Verschlüsselte Kommunikation bei sicherheitsrelevanten Geräten (S0 / S2)
👎 Z-Wave – Contra
- Inclusion und vollständiges Interview können – besonders bei batteriebetriebenen Geräten – Zeit benötigen
- Gerätepreise häufig höher als bei anderen Funkstandards
- Nachträgliches Inkludieren/Exkludieren fest verbauter Geräte ist aufwendig
- Netzwerkinformationen werden im Z-Wave Controller gespeichert und sind nicht Bestandteil eines ioBroker Backups
- Bei Defekt oder Austausch des Controllers ist ein vorher erstelltes NVM-Backup zwingend erforderlich (z.B. über Z-Way oder zwave-js-ui)
🔁 Hinweis zu ioBroker Adaptern
Der Adapter ioBroker.zwave2 wird seit längerer Zeit nicht mehr weiterentwickelt (Release 3.1.0 on Sept. 2023).
Diese Anleitung dient als Vorbereitung für den Einsatz des Adapters ioBroker.zwavews
Hinweis: Der Adapter ioBroker.zwavews befindet sich zum Zeitpunkt dieser Anleitung noch im Beta-Status.
Hier wird ausschließlich die Installation und Konfiguration von Z-Wave JS UI beschrieben, welche Voraussetzung für ioBroker.zwavews ist.
Die Umstellung vom bisherigen ioBroker.zwave2 Adapter mit bestehenden Skripten und Visualisierungen kann Zeit in Anspruch nehmen. Dies betrifft insbesondere angepasste Datenpunkte und individuelle Logiken.
Im Zuge der Umstellung empfiehlt es sich, die Datenpunkte neu zu strukturieren und konsequent Aliase zu verwenden. Dadurch wird die Wartung vereinfacht und zukünftige Änderungen oder Updates lassen sich sauberer umsetzen.
⚠️ Achtung – Backup
Im ioBroker Backup sind keine Z-Wave Geräte enthalten.
ioBroker sichert ausschließlich:
- eigene Objekte
- Adapter-Einstellungen
- Datenbanken
Die Z-Wave Netzwerkinformationen (Node-IDs, Security Keys, Routing, Inclusion-Status usw.) befinden sich immer im Z-Wave Controller bzw. im verwendeten Z-Wave Server.
Bei Verwendung von Z-Way
Mit Z-Way for Raspberry Pi Z-Way Repository kann ein NVM-Backup des Gateways mit allen inkludierten Z-Wave Geräten erstellt werden.
Bei Verwendung von Z-Wave JS / zwave-js-ui
- Das Z-Wave Netzwerk läuft im Z-Wave JS Server, nicht in ioBroker
- ioBroker greift ausschließlich über eine WebSocket-Verbindung (ws://IP:Port) auf die Daten zu
- Das Controller-Backup muss in zwave-js-ui erstellt werden
Das NVM (Non-Volatile Memory) Backup sichert:
- inkludierte Geräte (Nodes)
- Node-IDs
- Security Keys (S0 / S2)
- Netzwerktopologie (Routing-Informationen)
- Home-ID und Controller-Rolle
Das Backup befindet sich in zwave-js-ui unter:
Settings → Backup → Controller (NVM) Backup
Backup-Schalter aktivieren. Nach dem Aktivieren erscheint darunter die Möglichkeit, ein Backup zu erzeugen bzw. herunterzuladen.
- STORE → Backup (optional, betrifft nur UI-Daten)
- Controller (NVM) Backup
- Restore erscheint erst, wenn mindestens ein NVM-Backup vorhanden ist
Ohne ein solches Controller-Backup können inkludierte Geräte bei einem Hardwaredefekt oder einem Stick-Tausch nicht wiederhergestellt werden.
Fazit
Ein ioBroker Backup ersetzt niemals ein Z-Wave Controller-Backup – unabhängig davon, ob Z-Way oder Z-Wave JS verwendet wird.
🔄 MQTT oder Websocket (ioBroker.zwavews)
MQTT
- Überträgt Status- und Set-Werte
- Plattformunabhängig nutzbar
- Geeignet für gemischte Umgebungen
- Keine Controller-Verwaltung
Websocket (ioBroker.zwavews)
- Direkte Anbindung an die Z-Wave JS API
- Vollständige Integration in ioBroker
- Ermöglicht Controller-Funktionen
- Weniger Konfigurationsaufwand im reinen ioBroker-Setup
⚠️ Wichtig
Inkludieren (Inclusion/Exclusion) geht nicht über MQTT.
Das geht nur über:
- Z-Way (z-wave.me)
- ioBroker.zwave2
- Webinterface von zwave-js-ui
- Websocket-API (also über ioBroker.zwavews)
🟢 Z-Wave JS UI nativ auf EndeavourOS ARM headless mit ioBroker
Z-Wave JS UI als Vorbereitung für ioBroker.zwavews
Voraussetzungen für ioBroker
- Eine laufende zwave-js-ui Umgebung
- Aktivierte WS (Websocket) Kommunikation
- Installation und Konfiguration des Adapters ioBroker.zwavews
ℹ️ Hinweis
- Das Webinterface läuft standardmäßig auf Port 8091
- Der Websocket-Server für ioBroker.zwavews läuft standardmäßig auf Port 3000
📋 Voraussetzungen
System
- Raspberry Pi 4 oder 5
- EndeavourOS ARM (headless)
- ioBroker nativ installiert unter /opt/iobroker
- NodeJS LTS 22 (nodejs-lts-jod) wie von ioBroker empfohlen
- Funktionierender Z-Wave Controller
- USB-Stick (z.B.
/dev/ttyACM0oder/dev/ttyUSB0) - oder RaZberry 7 (z.B.
/dev/ttyAMA0)
- USB-Stick (z.B.
- SSH-Zugriff
⚙️ Wichtige Systemkonfiguration bei RaZberry 7
Die Konfiguration erfolgte bereits bei: "ioBroker auf Pi 4 mit EndeavourOS → Schritt 7: Vorbereitung für ioBroker"
Dort muss folgendes gesetzt sein:
/boot/config.txt
enable_uart=1
dtoverlay=disable-bt
/boot/cmdline.txt
Falls vorhanden, entfernen:
console=serial0,115200
🔎 System prüfen
node -v
npm -v
Bei USB-Stick:
ls -l /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
Bei RaZberry 7 (GPIO):
ls -l /dev/serial* /dev/ttyAMA* 2>/dev/null
meine Ausgabe:
crw-rw---- 1 root uucp 204, 64 10. Feb 18:42 /dev/ttyAMA0
Gerät gehört Gruppe uucp und nur root und Mitglieder der Gruppe uucp dürfen zugreifen.
In zwave-js-ui verwendest du später:
/dev/ttyAMA0
🚀 Installation
Z-Wave JS UI lokal in eigenes Verzeichnis installieren
Für eine bessere Übersicht nutze ich den Ordner /opt, da sich dort auch iobroker und pihole befinden.
sudo mkdir -p /opt/zwave-js-ui
cd /opt/zwave-js-ui
npm init -y
npm install zwave-js-ui
Ohne Versionsangabe wird die aktuell als latest markierte Version installiert.
Service-User mit eigenem Home-Verzeichnis anlegen und Rechte setzen
sudo useradd -r -m -d /opt/zwave-js-ui -s /usr/bin/nologin zwave
sudo usermod -aG uucp zwave
sudo chown -R zwave:zwave /opt/zwave-js-ui
Prüfen mit:
id zwave
Meine Ausgabe:
uid=963(zwave) gid=962(zwave) Gruppen=962(zwave),986(uucp)
systemd Service anlegen
sudo nano /etc/systemd/system/zwave-js-ui.service
Inhalt:
[Unit]
Description=Z-Wave JS UI
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/zwave-js-ui
ExecStart=/usr/bin/node --preserve-symlinks /opt/zwave-js-ui/node_modules/zwave-js-ui/server/bin/www.js
Restart=on-failure
User=zwave
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
Store-Verzeichnis im richtigen Pfad anlegen (damit kein mkdir im falschen Kontext scheitert):
sudo mkdir -p /opt/zwave-js-ui/node_modules/zwave-js-ui/store
Rechte anpassen, Service laden, aktivieren, starten:
sudo chown -R zwave:zwave /opt/zwave-js-ui
sudo systemctl daemon-reload
sudo systemctl enable zwave-js-ui
sudo systemctl start zwave-js-ui
Status prüfen und Ports:
systemctl status zwave-js-ui
sudo ss -tulpn | grep -E '8091|3000'
Port 3000 ist noch nicht offen, weil der Websocket-Server noch nicht aktiviert ist (kommt später im Webinterface).
🌐 Webinterface öffnen
http://<IP-deines-Pi>:8091
bei mir ist das:
http://192.168.0.164:8091
🔌 Serielles Device konfigurieren
Im Webinterface:
Settings → MQTT Gateway
Das MQTT Gateway wird für ioBroker.zwavews nicht benötigt und kann deaktiviert bleiben. Die Kommunikation mit ioBroker erfolgt ausschließlich über Websocket.
Settings → Z-Wave → Serial Port
In meinem Beispiel:
/dev/ttyAMA0
Zusätzlich konfigurieren:
- Bei einer Neuinstallation die Security Keys generieren lassen
- Bei einem Upgrade von ioBroker.zwave2 die dort verwendeten Security Keys übernehmen
- Bei meinem Upgrade mussten die „Security Keys (Long Range)“ neu generiert werden, da ioBroker.zwave2 diese nicht unterstützt
- Default Radio Configuration: Europe
Websocket für ioBroker.zwavews aktivieren
Im Webinterface:
Settings → Home Assistant
- Websocket Server aktivieren
- Server Host leer lassen (bindet auf allen Interfaces)
- Standard-Port 3000 verwenden
- DNS Discovery deaktivieren (bei fester IP und manueller URL im Adapter nicht erforderlich)
Speichern.
Du wirst gefragt, ob der Z-Wave JS driver neu starten soll: YES
Alternativ:
sudo systemctl restart zwave-js-ui
Wichtig
Ein Z-Wave Controller ist ein serielles Gerät. Der Port kann in der Regel nur von einem Prozess exklusiv geöffnet werden (Lock). Während du zwave-js-ui einrichtest, muss zwave2 deaktiviert bleiben. Später ersetzt zwave-js-ui den zwave2 Adapter vollständig.
Diese URL im ioBroker.zwavews Adapter eintragen:
ws://<IP-deines-Pi>:3000
Nach dem Speichern prüfen:
sudo ss -tulpn | grep 3000
💡 Tipp:
Die Einstellungen der zwave-js-ui Oberfläche können über Import / Export gesichert und wiederhergestellt werden.
🔄 Update von Z-Wave JS UI
Update installieren und kontrollieren:
sudo -u zwave npm update --prefix /opt/zwave-js-ui
Dienst neu starten:
sudo systemctl restart zwave-js-ui
Version prüfen (optional):
cd /opt/zwave-js-ui
sudo -u zwave npm list zwave-js-ui
Ergebnis:
zwave-js-ui@1.0.0 /opt/zwave-js-ui
└── zwave-js-ui@11.11.0
🗑 Z-Wave JS UI sauber deinstallieren
Service stoppen und deaktivieren
sudo systemctl stop zwave-js-ui
sudo systemctl disable zwave-js-ui
Status prüfen:
systemctl status zwave-js-ui
systemd Service-Datei löschen
sudo rm /etc/systemd/system/zwave-js-ui.service
sudo systemctl daemon-reload
Lokale npm-Installation entfernen
Da die Installation unter /opt/zwave-js-ui erfolgt ist, gibt es keine globale npm-Installation.
sudo rm -rf /opt/zwave-js-ui
Service-User entfernen
sudo userdel zwave
Optional prüfen:
id zwave
Prüfen, ob noch Ports belegt sind (optional)
sudo ss -tulpn | grep -E '8091|3000'
Es darf kein Listener mehr angezeigt werden.
Ergebnis
Entfernt sind:
- systemd-Service
- Installationsverzeichnis /opt/zwave-js-ui (inkl. node_modules und Daten)
- Service-User zwave