Zigbee Home Automation auf OpenBSD: Sonoff Dongle-M und openHAB
Zigbee über Ethernet, PoE-Setup und der erfolgreiche Z2M + openHAB Stack auf OpenBSD

In meinem letzten Post haben wir uns das Sniffing von Zigbee-Traffic mit dem älteren TI CC2531 angesehen. Während dieser Stick zum Lernen super ist, ist es jedoch nicht die Hardware, die man für die eigentliche Haussteuerung nutzen möchte. Mein CC2531 eignet sich hervorragend zum Sniffen, da er schon mit der Sniffer-Firmware daherkam – dafür habe ich ihn benutzt und werde ihn auch weiterhin so verwenden.
Meiner Neugier folgend, habe ich mir einen Sonoff Dongle Max auf eBay gekauft, um ihn als vollwertigen Zigbee-Coordinator einzusetzen. Im letzten Post konnte ich nur ein paar Zigbee- und andere 802.15.4-Geräte von Nachbarn sehen, aber wo bleibt da der Spaß? Das hat mich neugierig gemacht und mich dazu gebracht, meine eigene Hausautomatisierung zu starten!
Hardware: Der Sonoff Dongle Max

Sonoff Dongle Max
Der Sonoff Dongle Max ist ein vielseitiges Biest. Im Gegensatz zu den billigen USB-Sticks unterstützt diese Version:
- USB-Konnektivität
- Ethernet mit PoE (Power over Ethernet)
- WiFi
Die “Getting Started”-Dokumentation findet ihr hier.
Ist der Sonoff Dongle Max via USB verbunden, meldet er sich als serieller Port.
uslcom0 at uhub5 port 2 configuration 1 interface 0 "SONOFF SONOFF Dongle Max MG24" rev 2.00/1.00 addr 5
ucom0 at uslcom0 portno 0: usb1.1.00002.0Die “Smart IP” Kopfschmerzen
Eine kurze Warnung zu den Werkseinstellungen: Der Dongle nutzt “Smart IP”. Er merkt sich die allererste IP, die er per DHCP erhält, und klebt förmlich an ihr, selbst wenn der DHCP-Server später versucht, ein anderes statisches Lease zuzuweisen.
Falls ihr Probleme habt, das Gerät nach der Einrichtung eines statischen Leases zu erreichen, erinnert ihr euch hoffentlich an die ursprüngliche IP oder müsst euch mit dem internen WiFi-AP verbinden, um die Einstellungen manuell von “Smart IP” auf Standard-DHCP umzustellen.
Das hat mir einiges an Kopfzerbrechen bereitet ;)
Sobald das geklärt ist, könnt ihr euren Browser auf http://<Hostname oder IP-Adresse> richten, um zum Web-Frontend des Sonoff Dongle Max zu gelangen.
Verbindungsinformationen finden
Um openHAB oder Zigbee2MQTT zu konfigurieren, benötigt ihr die spezifischen Port-Strings aus dem Web-Interface des Dongles. Navigiert im Menü links zu Z2M&ZHA -> Zigbee2MQTT. Dort könnt ihr die Sektionen USB Connection und TCP Connection ausklappen, um die exakten Pfade und Portnummern für eure Konfigurationsdateien zu erhalten.

Zigbee2MQTT Verbindungsinformationen im Sonoff Web UI
/dev/cuaU0 oder ähnlich. Bei der TCP-Verbindung stellt sicher, dass ihr den richtigen Hostnamen verwendet oder bleibt bei der IP-Adresse.Einrichtung von openHAB auf OpenBSD
Die Installation von openHAB auf OpenBSD ist dank der verfügbaren Pakete unkompliziert. Sobald die Pakete installiert sind, muss nur noch der Dienst gestartet werden.
pkg_add -i openhab%5 openhab-addons%5
rcctl start openhabNachdem der Dienst gestartet ist, öffnet http://localhost:8080 (oder die IP eures Servers) im Browser. Ihr werdet vom Setup-Assistenten begrüßt, wo ihr euren ersten Administrator-Account erstellt. Sobald ihr eingeloggt seid, ist der erste Schritt der Weg zu Settings > Add-ons, um das Zigbee Binding zu installieren.
Erster Versuch: Der direkte Weg über das Zigbee Binding
Nach dem Login war mein erster Instinkt, es einfach zu halten und das native Binding zu nutzen:
- Gehe zu Settings > Add-ons und installiere das Zigbee Binding.
- Navigiere zu Settings > Things, klicke auf das blaue + und wähle das Zigbee Binding.
- Wähle Ember Coordinator aus der Liste (der richtige Treiber für den Sonoff Dongle-M).
- In der Konfiguration setzte ich den Port auf:
tcp://10.0.0.210:6638.
Zusätzlich konfigurierte ich die Baudrate auf 115200 und Flow Control auf None. Doch selbst nach dem Speichern blieb das Thing hartnäckig offline.
Um zu sehen, was unter der Haube passierte, erhöhte ich das Log-Level in der Karaf-Konsole:
# Verbindung zu Karaf (Standard-Passwort: habopen)
ssh -p 8101 openhab@localhost
log:set DEBUG org.openhab.binding.zigbee
log:set DEBUG com.zsmartsystems.zigbeeDas Log offenbarte das Problem:
[DEBUG] [nding.zigbee.serial.ZigBeeSerialPort] - Connecting to serial port [tcp://10.0.0.210:6638] at 115200 baud...
[DEBUG] [nding.zigbee.serial.ZigBeeSerialPort] - No communication ports found, cannot connect to [tcp://10.0.0.210:6638]
[ERROR] [zigbee.dongle.ember.ZigBeeDongleEzsp] - EZSP Dongle: Unable to open serial portEin Blick in das README des OpenBSD-Ports gab einen entscheidenden Hinweis zum Java-Seriell-Zugriff:
“The example of passing
-Dgnu.io.rxtx.SerialPortsuses the rxtx library, which is currently unsupported on OpenBSD. However, 100% Java implementations such as PureJavaComm and jSerialComm are known to work.”
Das README bezieht sich auf physische serielle Ports, nicht auf TCP. Da die TCP-Methode jedoch sofort fehlschlug und ich den Hinweis auf die fehlende rxtx-Unterstützung sah, habe ich einen lokalen seriellen Anschluss gar nicht erst versucht. Zeit für einen robusteren architektonischen Ansatz.
Der Gewinner-Stack: Zigbee2MQTT + Mosquitto
Anstelle einer direkten Verbindung wechselte ich zu einem entkoppelten Stack: Sonoff (TCP) <-> Zigbee2MQTT <-> Mosquitto (MQTT) <-> openHAB.
1. Tools installieren
pkg_add -i mosquitto zigbee2mqtt2. Zigbee2MQTT konfigurieren
Editiert eure /etc/zigbee2mqtt/configuration.yaml. Beachtet die Einstellung adapter: ember, die für den MG24-Chip im Dongle-M erforderlich ist.
version: 5
homeassistant:
enabled: true
frontend:
enabled: true
host: 127.0.0.1
port: 8081
mqtt:
base_topic: zigbee2mqtt
server: mqtt://localhost
serial:
port: tcp://10.0.0.210:6638
baudrate: 115200
adapter: ember
disable_led: false
rtscts: false
advanced:
channel: 25
log_level: debug
log_directory: /var/log/zigbee2mqtt
log_file: zigbee2mqtt_%TIMESTAMP%.log
log_rotation: true
log_output:
- file
network_key: GENERATE
pan_id: GENERATE
ext_pan_id: GENERATE
availability:
enabled: trueWenn ihr kein PoE zur Verfügung habt oder den Dongle lieber direkt über USB anschließen wollt, ändert eure serial:-Konfiguration wie folgt:
serial:
port: /dev/cuaU0
adapter: ember
baudrate: 115200
disable_led: false
rtscts: falseWenn ihr die USB-Verbindung nutzt, muss der Benutzer _z2m die Berechtigung haben, auf das serielle Funkgerät (typischerweise /dev/cuaU0) zuzugreifen. Unter OpenBSD macht ihr das, indem ihr den Benutzer zur Gruppe dialer hinzufügt:
usermod -G dialer _z2mMosquitto konfigurieren
Für eine einfache lokale Installation ist die Standardkonfiguration ausreichend; es sind keine unmittelbaren Änderungen erforderlich, um loszulegen.
3. Dienste starten
rcctl start mosquitto
rcctl start zigbee2mqttDas Zigbee2MQTT Frontend
Da wir das frontend in der Konfigurationsdatei aktiviert haben, könnt ihr euer Netzwerk direkt über den Browser verwalten. Standardmäßig ist es unter http://127.0.0.1:8081 erreichbar. Dieses Interface ist unglaublich hilfreich beim Koppeln neuer Geräte, zur Ansicht der Netzwerkkarte und zur Überwachung des Status eurer Sensoren.

Das Zigbee2MQTT Web Frontend
Integration in openHAB
Sobald Zigbee2MQTT läuft, ist die Integration nahtlos:
- Installiere das MQTT Binding in openHAB.
- Füge ein neues MQTT Broker Thing hinzu, das auf
127.0.0.1zeigt. - Da wir
homeassistant: truein Z2M aktiviert haben, sollten eure Geräte automatisch in der openHAB Inbox erscheinen, sobald sie gekoppelt werden!
Bonus: Sniffing des neuen Netzwerks
Auch wenn ich das System jetzt produktiv nutze, will der “Sniffer” in mir immer noch die Pakete sehen. Um den Traffic eures neuen Netzwerks in Wireshark zu entschlüsseln, benötigt ihr den Network Key.
Beim ersten Start aktualisiert Zigbee2MQTT den GENERATE-String in eurer /etc/zigbee2mqtt/configuration.yaml, was dann etwa so aussieht:
network_key:
- 104
- 73
- 101
- 15
- 20
- 56
- 102
- 28
- 132
- 77
- 211
- 116
- 109
- 134
- 9
- 20Behandelt euren Network Key wie euer sensibelstes Passwort. Wenn jemand diesen Key erhält und sich in physischer Reichweite eures Hauses befindet, kann er:
- Den gesamten Traffic entschlüsseln: Jedes Sensor-Ereignis, jeden Schaltzustand und jedes Datenpaket im Netzwerk mitlesen.
- Befehle einschleusen: Eure Lichter, Schlösser oder andere Zigbee-Geräte ohne Erlaubnis fernsteuern.
- Passiv sniffen: Da Zigbee ein Mesh-Protokoll ist, muss man nicht einmal mit dem WLAN verbunden sein; ein einfacher USB-Sniffer reicht aus.
Nutzt diesen Key nur für eure eigene private Fehlersuche in Wireshark und postet ihn niemals in einem öffentlichen Blog oder Forum!
# Euer Key aus der configuration.yaml
# - 104 - 73 - 101 - 15 - 20 ...
printf '%02x' 104 73 101 15 20 56 102 28 132 77 211 116 109 134 9 20 && echo
# Output: 6849650f1438661c844dd3746d860914Mit meinem TI CC 2531 kann ich nun whsniff nutzen (welches es erst heute in den OpenBSD-Ports-Tree geschafft hat), um IEEE802.15.4-Traffic in Wireshark einzuspeisen:
sudo pkg_add -i whsniff wireshark
sudo whsniff -c 25 | wireshark -k -i -Sobald Wireshark läuft, nehmt den Output-String von oben und fügt ihn unter Wireshark -> Preferences -> Protocols -> Zigbee -> Keys hinzu. Jetzt könnt ihr eure Home-Automation-Befehle im Klartext durch die Luft fliegen sehen!

Entschlüsselten Zigbee-Traffic in Wireshark sniffen
0x0000 gesendet werden. In der Zigbee-Welt ist dies die standardisierte Kurzadresse für den Network Coordinator (in meinem Fall der Sonoff Dongle Max).Damit kann ich meine Befehle beobachten – diesmal zu meinen eigenen Bedingungen!
Fazit
Diesen Stack auf OpenBSD zum Laufen zu bringen, war eine kleine Herausforderung, aber eine lohnende. Zum Abschluss dieses initialen Setups erinnert mich ein Abschnitt in der openHAB Einleitung daran, was wirklich zählt:
What You Need to Know Before You Start
When home automation just seems to work, it is always the result of hard work. Home automation is fascinating and requires a considerable investment of your time. Here are some key considerations especially for new users. To be successful, you will need to:
- Start slowly and proceed one step at a time
- Be prepared to learn
- Remain flexible in how you want to achieve your goal
- Celebrate all the small successes
Genau das tue ich hier, und wahrscheinlich auch in einer Reihe von folgenden Beiträgen. Dass der Coordinator mit dem Stack auf OpenBSD spricht, ist ein bedeutender erster Schritt und ein Erfolg für mich – einer, den ich definitiv feiern werde.
Die Dokumentation lässt uns zudem mit einer letzten Warnung zurück:
“Lastly, be prepared to start a new hobby: home automation.”
Das ist zweifellos wahr, aber zum Glück überschneidet es sich bei mir stark mit meinen anderen Hobbys, was es schließlich zu einer sehr natürlichen Erweiterung macht!
Bleibt dran – die Sensoren sind bereits unterwegs.