Zigbee-kompatiblen CC2531 USB Stick flashen und mit Zigbee2mqtt einsetzen
Zigbee ist eine Spezifikation und beschreibt ein Framework für drahtlose Netzwerke. Es wird bei Netzwerken mit geringem Datenaufkommen, zum Beispiel bei der Hausautomation, bei Sensornetzwerken und in der Lichttechnik, verwendet. ZigBee baut auf dem Standard IEEE 802.15.4 auf und erweitert dessen Funktionalität insbesondere um die Möglichkeit des Routings und des sicheren Schlüsselaustausches. In diesem Artikel zeigen wir, wie Sie einen CC2531 USB Stick flashen können, um ihn anschließend mittels Zigbee2mqtt zur Kommunikation mit Zigbee-kompatiblen Geräten verwenden zu können.
Erforderliche Komponenten
Die nachfolgenden Komponenten sind für den Flashvorgang des CC2531 Sticks erfoderlich:
- CC Debugger
- CC2531 USB Stick
- Downloader Kabel für CC2531
- Ubuntu 18.04 LTS
- Benutzer mit Root-Rechten
Vorbereitung
Unter Ubuntu 18.04 müssen vorab noch die folgenden Pakete installiert werden:
$ sudo apt install dh-autoreconf libusb-1.0 libboost-all-dev git curl mosquitto mosquitto-clients
Flashen des CC2351 USB Sticks
Dieser Abschnitt zeigt die Vorbereitungsmaßnahmen und den anschließenden Flashvorgang des CC2351 USB Sticks.
Vorbereitungen
Vorab des Flashvorgangs müssen noch einige Vorbereitungsmaßnahmen getroffen werden:
- Erstellen Sie ein Verzeichnis:
$ sudo mkdir /opt/CC2531
- Wechseln Sie in dies Verzeichnis:
$ cd /opt/CC2531
- Laden Sie die Firmware:
$ sudo git clone https://github.com/dashesy/cc-tool.git
- Wechseln Sie in das neue Verzeichnis:
$ cd cc-tool
- Führen Sie hier die beiden Skripte vorab der Kompilierung der Firmware aus:
$ sudo ./bootstrap
$ sudo ./configure
- Mit make wird die Firmware dann kompiliert:
$ sudo make
Flashvorgang
Nun beginnt der eigentliche Flashvorgang des Sticks:
- Verbinden Sie den CC2531 USB Stick mit dem CC Debugger.
- Stecken Sie dafür das Downloader Kabel in beide Geräte ein.
- Danach stecken Sie den CC Debugger sowie auch den USB Stick in USB Ports am Rechner an.
- Entpacken Sie die Datei CC2531_DEFAULT_20190608.zip in das zuvor erstellte Verzeichnis /opt/CC2531.
- Abschließend wird der Stick geflasht:
$ sudo ./cc-tool -e -w CC2531ZNP-Prod.hex
- Der USB Stick ist nun geflasht und die beiden Geräte können entfernt werden.
Zigbee2mqtt
Nachdem nun die erforderlichen Hardware vorbereitet wurde, geht es in diesem Abschnitt um die Einrichtung von Zigbee2mqtt. Diese Software ermöglich ihnen, die Zigbee Geräte ohne Herstellereigene Bridge oder Gateway zu verwenden.[1]
Überprüfen ob der Stick korrekt erkannt wird
Stecken Sie den geflashten CC2531 Stick wieder ein und prüfen Sie ob dieser korrekt erkannt wurde.
- Durch Prüfen des Kernel Ring Buffers:
$ dmesg | grep tty
- Ausgabe von ls:
$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 May 16 19:15 /dev/ttyACM0 # <-- CC2531 on /dev/ttyACM0
- Nach der ID suchen:
$ ls -l /dev/serial/by-id
total 0
lrwxrwxrwx. 1 root root 13 Oct 19 19:26 usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018ED3DDF-if00 -> ../../ttyACM0
Installation von Zigbee2mqtt
Zur Installation von Zigbee2mqtt führen Sie nun die folgenden Schritte aus:
- Node.js Repository einrichten:
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
- Installation von Node.js:
$ sudo apt install -y nodejs git make g++ gcc
- Überprüfen ob die korrekten Versionen installiert wurden:
$ node --version # Ausgabe: v10.X
$ npm --version # Ausgabe: 6.X
- Klonen Sie das git Repo und Erstellen Sie einen Speicherort:
$ sudo git clone -b dev https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
- Installieren der Dependencies:
$ cd /opt/zigbee2mqtt
$ sudo npm install
Zigbee2mqtt starten
Sie können nun Zigbee2mqtt starten:
$ npm start
Die Ausgabe sollte wie folgt aussehen:
> zigbee2mqtt@1.6.0 start /opt/zigbee2mqtt
> node index.js
zigbee2mqtt:info 2019-10-28T11:15:11: Logging to directory: '/opt/zigbee2mqtt/data/log/2019-10-28.12-15-10'
zigbee2mqtt:info 2019-10-28T11:15:11: Starting zigbee2mqtt version 1.6.0 (commit #ec5064b)
zigbee2mqtt:info 2019-10-28T11:15:11: Starting zigbee-herdsman...
zigbee2mqtt:info 2019-10-28T11:15:12: zigbee-herdsman started
zigbee2mqtt:info 2019-10-28T11:15:12: Coordinator firmware version: '{"type":"zStack12","meta":{"transportrev":2,"product":0,"majorrel":2,"minorrel":6,"maintrel":3,"revision":20190608}}'
zigbee2mqtt:info 2019-10-28T11:15:12: Currently 5 devices are joined:
zigbee2mqtt:info 2019-10-28T11:15:12: 0x7cb03eaa00b27b47 (0x7cb03eaa00b27b47): AB3257001NJ - OSRAM Smart+ plug (Router)
zigbee2mqtt:info 2019-10-28T11:15:12: CONTACT_SENSOR (0x005043c903242322): HEIMAN-M1 - HEIMAN Door sensor (EndDevice)
zigbee2mqtt:info 2019-10-28T11:15:12: MOTION_SENSOR_TABLE (0x000d6f00110879da): AC01353010G - OSRAM SMART+ Motion Sensor (EndDevice)
zigbee2mqtt:info 2019-10-28T11:15:12: LAMP_TABLE (0x7cb03eaa0a05cd2c): AC03641 - OSRAM LIGHTIFY LED Classic A60 clear (Router)
zigbee2mqtt:info 2019-10-28T11:15:12: LAMP_ROOM (0x7cb03eaa0a0599ce): AC03641 - OSRAM LIGHTIFY LED Classic A60 clear (Router)
zigbee2mqtt:warn 2019-10-28T11:15:12: `permit_join` set to `true` in configuration.yaml.
zigbee2mqtt:warn 2019-10-28T11:15:12: Allowing new devices to join.
zigbee2mqtt:warn 2019-10-28T11:15:12: Set `permit_join` to `false` once you joined all devices.
zigbee2mqtt:info 2019-10-28T11:15:12: Zigbee: allowing new devices to join.
zigbee2mqtt:info 2019-10-28T11:15:12: Connecting to MQTT server at mqtt://localhost
zigbee2mqtt:info 2019-10-28T11:15:13: Connected to MQTT server
zigbee2mqtt:info 2019-10-28T11:15:13: MQTT publish: topic 'zigbee2mqtt/bridge/state', payload 'online'
zigbee2mqtt:error 2019-10-28T11:15:13: '0x7cb03eaa00b27b47' does not exist, skipping publish
zigbee2mqtt:info 2019-10-28T11:15:13: MQTT publish: topic 'zigbee2mqtt/CONTACT_SENSOR', payload '{"contact":true,"tamper":false,"battery_low":false,"linkquality":0}'
zigbee2mqtt:info 2019-10-28T11:15:13: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":false,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
zigbee2mqtt:info 2019-10-28T11:15:13: MQTT publish: topic 'zigbee2mqtt/LAMP_TABLE', payload '{"state":"OFF"}'
zigbee2mqtt:info 2019-10-28T11:15:13: MQTT publish: topic 'zigbee2mqtt/LAMP_ROOM', payload '{"state":"OFF"}'
zigbee2mqtt:info 2019-10-28T11:15:13: MQTT publish: topic 'zigbee2mqtt/bridge/config', payload '{"version":"1.6.0","commit":"ec5064b","coordinator":{"type":"zStack12","meta":{"transportrev":2,"product":0,"majorrel":2,"minorrel":6,"maintrel":3,"revision":20190608}},"log_level":"info","permit_join":true}'
Zigbee2mqtt als Systemd Service
Sie können Zigbee2mqtt auch als Systemd Service einrichten:
- Erstellen Sie eine systemctl Konfigurationsdatei:
$ sudo vi /etc/systemd/system/zigbee2mqtt.service
- Fügen Sie diefolgende Zeilen in die Datei ein:
- [Unit]
- Description=zigbee2mqtt
- After=network.target
- [Service]
- ExecStart=/usr/bin/npm start
- WorkingDirectory=/opt/zigbee2mqtt
- StandardOutput=inherit
- StandardError=inherit
- Restart=always
- [Install]
- WantedBy=multi-user.target
- Speichern und schließen Sie die Datei.
- Danach kann der Dienst gestartet werden:
$ sudo systemctl start zigbee2mqtt.service
- Prüfen der Funktion:
$ sudo systemctl status zigbee2mqtt.service
Der Output sollte wie folgt aussehen:
● zigbee2mqtt.service - zigbee2mqtt
Loaded: loaded (/etc/systemd/system/zigbee2mqtt.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-10-28 10:26:12 CET; 1h 45min ago
Main PID: 1855 (npm)
Tasks: 23 (limit: 4915)
CGroup: /system.slice/zigbee2mqtt.service
├─1855 npm
├─1913 sh -c node index.js
└─1914 node index.js
Okt 28 12:09:46 IoT-Produktronika npm[1855]: zigbee2mqtt:info 2019-10-28T11:09:46: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":false,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
Okt 28 12:10:41 IoT-Produktronika npm[1855]: zigbee2mqtt:info 2019-10-28T11:10:41: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":false,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
Okt 28 12:10:42 IoT-Produktronika npm[1855]: zigbee2mqtt:info 2019-10-28T11:10:42: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":true,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
Okt 28 12:10:43 IoT-Produktronika npm[1855]: zigbee2mqtt:info 2019-10-28T11:10:43: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":false,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
Okt 28 12:10:44 IoT-Produktronika npm[1855]: zigbee2mqtt:info 2019-10-28T11:10:44: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":true,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
Okt 28 12:10:45 IoT-Produktronika npm[1855]: zigbee2mqtt:info 2019-10-28T11:10:45: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":false,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
Okt 28 12:10:46 IoT-Produktronika npm[1855]: zigbee2mqtt:info 2019-10-28T11:10:46: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":true,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
Okt 28 12:10:52 IoT-Produktronika npm[1855]: zigbee2mqtt:info 2019-10-28T11:10:52: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":true,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
Okt 28 12:11:54 IoT-Produktronika npm[1855]: zigbee2mqtt:info 2019-10-28T11:11:54: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":true,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
Okt 28 12:12:00 IoT-Produktronika npm[1855]: zigbee2mqtt:info 2019-10-28T11:12:00: MQTT publish: topic 'zigbee2mqtt/MOTION_SENSOR_TABLE', payload '{"occupancy":false,"tamper":true,"battery_low":false,"linkquality":0,"temperature":26.39}'
Autostart des Services
Um den Daemon automatisch beim Systemstart zu starten, führen Sie nun den folgenden Befehl aus:
$ sudo systemctl enable zigbee2mqtt.service
Betreiben des Netzwerks
Über die Konfigurationsdatei configuration.yaml können nun die Einstellungen vorgenommen werden. Sie enthält eine Liste der im Netz bekannten Geräte.
Neue Geräte dem Netzwerk hinzufügen
Um neue Geräte hinzuzufügen, müssen Sie in der configuration.yaml einen Parameter anpassen:
- Öffnen der Konfigurationsdatei:
$ sudo vi /opt/zigbee2mqtt/data/configuration.yaml
- Setzen Sie den Wert bei permit_join auf true:
permit_join: true
- Nachdem alle Geräte dem Netzwerk beigetreten sind, muss
permit_join: false
gesetzt werden, um das Beitreten weitere Geräte zu verhindern.
Nachrichten einsehen
Nachrichten, die über das Netzwerk übertragen werden können mit dem folgenden Befehl gelesen werden:
$ mosquitto_sub -t ‘#‘ -v
Nachrichten über das Netzwerk schicken
Nachrichten können Sie nach dem folgenden Muster über das Netzwerk verschicken:
$ mosquitto_pub -m '<PAYLOAD>' -t '<path/to/topic>'
Beispiel Konfiguration
Die nachfolgend abgebildete Konfiguration zeigt eine funktionale Konfiguration mit einer integrierten Lampe.
homeassistant: false
permit_join: true
mqtt:
base_topic: zigbee2mqtt
server: 'mqtt://127.0.0.1'
serial:
port: /dev/ttyACM0
devices:
'0x7cb03eaa0a0599ce':
friendly_name: 'LAMP_ROOM'
retain: false
Beispiel Lampe einschalten
Dieses Beispiel zeigt, wie Sie die konfigurierte Lampe einschalten können:
mosquitto_pub -m "ON" -t 'zigbee2mqtt/LAMP_ROOM/set/state'
Beispiel Lampe ausschalten
Die Lampe können Sie auch wieder ausschalten:
mosquitto_pub -m "OFF" -t 'zigbee2mqtt/LAMP_ROOM/set/state'
Weitere Informationen
- What is Zigbee? (zigbee.org)
- ZigBee (wikipedia.org)
Einzelnachweise
- ↑ Zigbee2mqtt.io (github.com)
Autor: Thomas-Krenn.AG
Bei der Thomas-Krenn.AG achten wir auf den bestmöglichen Service. Um dem gerecht zu werden, haben wir unser Thomas-Krenn Wiki ins Leben gerufen. Hier teilen wir unser Wissen mit Ihnen und informieren Sie über Grundlagen und Aktuelles aus der IT-Welt. Ihnen gefällt unsere Wissenskultur und Sie wollen Teil des Teams werden? Besuchen Sie unsere Stellenangebote.