Zigbee-kompatiblen CC2531 USB Stick flashen und mit Zigbee2mqtt einsetzen

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

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:

  1. Erstellen Sie ein Verzeichnis: $ sudo mkdir /opt/CC2531
  2. Wechseln Sie in dies Verzeichnis: $ cd /opt/CC2531
  3. Laden Sie die Firmware: $ sudo git clone https://github.com/dashesy/cc-tool.git
  4. Wechseln Sie in das neue Verzeichnis: $ cd cc-tool
  5. Führen Sie hier die beiden Skripte vorab der Kompilierung der Firmware aus:
    $ sudo ./bootstrap
    $ sudo ./configure
  6. Mit make wird die Firmware dann kompiliert: $ sudo make

Flashvorgang

Nun beginnt der eigentliche Flashvorgang des Sticks:

  1. Verbinden Sie den CC2531 USB Stick mit dem CC Debugger.
  2. Stecken Sie dafür das Downloader Kabel in beide Geräte ein.
  3. Danach stecken Sie den CC Debugger sowie auch den USB Stick in USB Ports am Rechner an.
  4. Entpacken Sie die Datei CC2531_DEFAULT_20190608.zip in das zuvor erstellte Verzeichnis /opt/CC2531.
  5. Abschließend wird der Stick geflasht: $ sudo ./cc-tool -e -w CC2531ZNP-Prod.hex
  6. 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:

  1. Node.js Repository einrichten: $ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
  2. Installation von Node.js: $ sudo apt install -y nodejs git make g++ gcc
  3. Überprüfen ob die korrekten Versionen installiert wurden:
    $ node --version # Ausgabe: v10.X
    $ npm --version # Ausgabe: 6.X
  4. Klonen Sie das git Repo und Erstellen Sie einen Speicherort: $ sudo git clone -b dev https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
  5. 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:

  1. Erstellen Sie eine systemctl Konfigurationsdatei:
    $ sudo vi /etc/systemd/system/zigbee2mqtt.service
  2. 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
  3. Speichern und schließen Sie die Datei.
  4. Danach kann der Dienst gestartet werden: $ sudo systemctl start zigbee2mqtt.service
  5. 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:

  1. Öffnen der Konfigurationsdatei: $ sudo vi /opt/zigbee2mqtt/data/configuration.yaml
  2. Setzen Sie den Wert bei permit_join auf true: permit_join: true
  3. 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

Einzelnachweise

  1. Zigbee2mqtt.io (github.com)


Foto Thomas-Krenn.AG.jpg

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.

Icon-Facebook.png Icon-Twitter.png Icon-Github.png Icon-Xing.png Icon-LinkedIn.png

Das könnte Sie auch interessieren

BiDi Transceiver
IPv6 deaktivieren
Link Aggregation und LACP Grundlagen