HowTo: Zigbee – Einen Sonoff zigbee 3.0 USB Dongle Plus für zigbee2mqtt vorbereiten

Damit Ihr mithilfe von zigbee2mqtt auch Zigbee-Sensoren bzw. Aktoren zur Steuerung Eures SmartHome nutzen könnt benötigt Ihr einen Zigbee-Adapter.

Dieser ist die Schnittstelle zwischen Zigbee-Gerät und SmartHome-System (z.B. NodeRed) und ist oft in Form eines einfachen USB-Sticks inkl. Antenne erhältlich.

Einer dieser Zigbee fähigen USB Sticks ist der „Sonoff zigbee 3.0 USB Dongle Plus“.

Dieser ist mit dem sehr leistungsfähigen CC2652P IC ausgestattet und unterstützt somit den Zigbee 3.0 Standard und bis zu 50 direkt (also ohne den Umweg über einen weiteren Router) angeschlossene Sensoren bzw. Aktoren.

Damit dieser Zigbee USB Stick mit zigbee2mqtt kommunizieren kann muss er zunächst jedoch mit der passenden Firmware bestückt werden.

Wie das funktioniert habe ich im folgenden Artikel beschrieben


Sicherheitshinweise

Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/

Affiliatelinks/Werbelinks

Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂 


Voraussetzungen

Hilfreiche Artikel:
Bevor ihr mit diesem Artikel startet solltet ihr einen RaspberryPi soweit vorbereitet haben, dass dieser über das Netzwerk erreichbar und per SSH Steuerbar ist. Außerdem sollte natürlich zigbee2mqtt bereits installiert sein.

Die folgenden Artikel beschreiben was zu tun ist um den RaspberryPi soweit vorzubereiten.

In der folgenden Listen findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.

Benötigtes Werkzeug:

NumberLink
1xSchraubendreher Set  Bei Amazon kaufen
1xSD Kartenleser  Bei Amazon kaufen

Benötigtes Material:

NumberLink
1xSONOFF Zigbee 3.0 USB Dongle Plus  Bei Amazon kaufen
1xUSB Verlängerungskabel  Bei Amazon kaufen
1x Raspberry Pi  Bei Amazon kaufen
1x Raspberry Pi Netzteil  Bei Amazon kaufen
1x Raspberry Pi Gehäuse  Bei Amazon kaufen
1x Micro SD Karte 64GB  Bei Amazon kaufen


Software zum flashen herunterladen

Damit Ihr den Zigbee USB-Stick mit der passenden Firmware flashen könnt müsst Ihr zunächst die passende Software herunterladen. Diese hilft später dabei die eigentliche Firmware auf den USB-Stick zu kopieren.

Öffnet dazu die Webseite von Texas Instruments (dies ist der Hersteller des verwendeten ICs und der dazugehörigen Flash-Software) unter folgendem Link.

Klickt dann dort auf den Download Button…

…und auf der folgenden Seite auf den

„Download options“-Button

im Abschnitt

„FLASH-PROGRAMMER-2“.

In dem sich öffnenden Fenster solltet Ihr dann die Option

„Windows Installer for SmartRF Flash Programmer“

auswählen.

An dieser Stelle müsst Ihr Euch mit einem TI-Account verifizieren.

Dieser Account kann kostenlos erstellt werden. Folgt dazu einfach dem Link unter

„Register now“.

Danach solltet Ihr zur gezeigten Ansicht weitergeleitet werden. Hier könnt Ihr durch einen weiteren klick auf den gezeigten Downloadbutton…

… den Download der Software starten.

Die heruntergeladene Software müsst Ihr nun noch installieren.

Wie man bei der Installation eines Programms unter Windows vorgehen kann habe ich in dem folgenden Artikel beschrieben.

Während der Installation kann es vorkommen, dass das Gezeigte Fenster angezeigt wird. Dies ist lediglich ein Hinweis, dass zusätzliche Treiber installiert werden und kann mit einen Klick auf „Installieren“ bestätigt werden.

Nachdem der Installationsvorgang abgeschlossen ist, könnt Ihr die Software direkt starten.


Korrekte Firmware herunterladen

Bevor es aber mit dem Flashvorgang losgehen kann, müsst Ihr zunächst noch die korrekte Firmware Version herunterladen. Diese ist von dem verwendeten Chip und der gewünschten Konfiguration abhängig. In den meisten Fällen könnt Ihr jedoch die untern verlinkte Firmware verwenden.

Unter dem folgenden Link findet Ihr eine Übersicht der verfügbaren Firmware Versionen und der zugehörigen Hardware.

Die jeweils aktuelle Firmware Version ist hier auch verlinkt.

Alternativ ist unter folgendem Link die aktuelle Firmware Version verlinkt.


Bootloader des USB-Sticks aktivieren

Nun ist nur noch ein letzter Schritt notwendig um den USB-Stick auf den Flashvorgang vorzubereiten. Damit dieser in mit der neuen Firmware bestückt werden kann, müsst Ihr den Bootloader aktivieren. Dies ist ein kleiner Programmbestandteil der aktuell auf dem USB-Stick installieren Firmware, welcher dabei hilft die neue Firmware auf den USB-Stick zu übertragen.

Um den Bootloader zu aktivieren hat der Hersteller des USB-Sticks ein python-Skript zur Verfügung gestellt, welches ich (leicht modifiziert) im folgenden GIT repository hochgeladen habe. Ich habe dabei lediglich die chinesischen Debug-Nachrichten auf Englisch übersetzt. Die Handhabung sollte also noch etwas leichter sein als auf den Screenshots zu sehen.

Spätestens jetzt solltet Ihr den Zigbee USB-Stick an Euren Computer anschließen.

Navigiert also in das oben verlinkte GIT repository und kopiert Euch das python-Skript uartLog.py auf Euren Computer.

Wie Ihr Dateien aus einem GIT repository herunterladen könnt habe ich anhand eines Beispiels in dem folgenden Artikel beschrieben.

Nachdem Ihr das Skript heruntergeladen habt könnt Ihr es starten. Öffnet dazu eine Eingabeaufforderung, navigiert zum Speicherort des Skripts und führt den folgenden Befehl aus.

python uartLog.py

Ggf. müsst Ihr zum erfolgreichen Start die pySerial und/oder gevent Bibliothek installieren. Dazu müsst Ihr die folgenden Befehle ausführen.

pip install pyserial

pip install gevent

Das Skript führt nun ein paar einfache Schritte aus und listet dann alle verbundenen COM-Ports auf. Hier kann es passieren, dass mehr als ein COM-Port gefunden werden. In diesem Fall müsst Ihr den COM-Port der zu Eurem Zigbee USB-Stick gehört angeben.

Sollt Euer USB-Stick dort nicht erkannt werden müsst ihr eventuell zunächst den passenden Treiber installieren. Den Treiber findet Ihr unter folgendem Link. (Danke an Christopher für den Hinweis. 🙂 )

In diesem Beispiel erkennt Ihr den korrekten COM Port an der Zeile die mit dem Eintrag

„Silicon Labs CP210x USB to UART Bridge“
also COM14

Sollten bei Euch mehrere Geräte mit diesem Eintrag vorhanden sein ist es am einfachsten wenn Ihr alle anderen Geräte zunächst vom Computer trennt, das Skript neu startet und dann fortfahrt.

In jedem Fall müsst Ihr aber die Nummer des zugehörigen COM Ports eingeben und mit Enter bestätigen.

In dem hier gezeigten Beispiel also „14“ für COM14.

Das Skript führt dann alle notwendigen Schritte aus um den Bootloader auf Eurem USB-Stick zu aktivieren.

Wichtig: Ab jetzt dürft Ihr den USB-Stick nicht mehr von Eurem Computer trennen. Falls doch müsst Ihr das Skript erneut ausführen um den Bootloader wieder zu aktivieren.


Flashvorgang starten

Nun könnt Ihr (endlich) mit dem Flashvorgang starten. Startet dazu – falls noch nicht geschehen – die zuvor Installierte Software

  • SmartRF Flash Programmer 2

In der gezeigten Ansicht solltet Ihr in der oberen linken Ecke wieder Euren Zigbee USB-Stick auswählen. Ihr erkennt diesen wieder an dem Eintrag

„Silicon Labs CP210x USB to UART Bridge“

Wählt hier dann den Eintrag „Unknown“ darunter aus.

Danach solltet Ihr den auf dem Zigbee USB-Stick verwendeten IC auswählen. In diesem Fall ist das der

CC2652P

Wählt den entsprechenden Eintrag in der Liste unten Links aus.

Dieser Schritt ist optional:

Falls Ihr von einem anderen Zigbee Stick migriert und direkt eine bekannte MAC Adresse auf den USB-Stick übertragen wollt, müsst Ihr in den Reiter

MAC Address

wechseln.

Dieser Schritt ist optional:

Tragt die Gewünschte MAC Adresse dann in das Textfeld bei „Secondary Address“ ein. Achtung: Im Bild ist das falsche Textfeld markiert! Das korrekte Textfeld ist das mit der Beschriftung „Secondary Address“.

Weitere Infos dazu findet Ihr auch in dem Artikel

Die zu flashende Firmware könnt Ihr dann durch einen Klick auf den Button

Browse

auswählen.

Die Firmware habt ihr in einem der vorherigen Schritte heruntergeladen.

Der Pfad zu der ausgewählten Firmware wird dann in dem markierten Textfeld angezeigt.

Nun könnt Ihr den Flashvorgang starten.

Setzt dazu die Häkchen wie gezeigt und klickt auf den markierten Pfeil-Button.

Der Flashvorgang startet nun und dessen Fortschritt wird im unteren Bereich angezeigt.

Sobald dieser erfolgreich abgeschlossen ist wird hier die Meldung

Success!

angezeigt.


Konfigurationsdatei von zigbee2mqtt aktualisieren

Damit zigbee2mqtt weiß unter welcher Adresse es den neuen Zigbee USB-Stick ansprechen kann müsst Ihr nun noch die Konfigurationsdatei von zigbee2mqtt korrekt konfigurieren.

Damit dies funktioniert solltet Ihr jetzt Euren Zigbee USB-Stick mit dem Raspberry Pi verbinden auf dem zigbee2mqtt installiert ist.

Mit dem folgenden Befehl könnt Ihr nun die angeschlossenen Zigbee USB-Sticks auflisten.

ls /dev/serial/by-id/

In dem gezeigten Beispiel ist lediglich ein USB-Stick verbunden, weshalb hier auch nur ein Eintrag angezeigt wird.

Falls dort mehrere Einträge vorhanden sind solltet Ihr den Eintrag mit dem Identifikationsstring für den „Sonoff Zigbee 3.0 USB Dongle Plus“ auswählen.

Kopiert hier die komplette Zeile also:

  • /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_aa2513a6c419ec11abc477e5f01c6278-if00-port0

und speichert sie zum Beispiel in einer Textdatei um sie später in die Konfigurationsdatei einfügen zu können.

Öffnet nun die Konfigurationsdatei von zigbee2mqtt durch Eingabe des folgenden Befehls.

sudo nano /opt/zigbee2mqtt/data/configuration.yaml

Löscht nun ggf. einen bereits vorhandenen Eintrag an der markierten Stelle im Abschnitt „port:“.

Die zuvor kopierte Adresse zu Eurem Zigbee USB-Stick müsst Ihr nun wie im Beispiel zu sehen in die Konfigurationsdatei einfügen.

Achtet dabei auf die korrekte Einrückung und dass unter der Kategorie „port:“ nur ein Eintrag vorhanden ist.

Speichert die Änderungen in der Konfigurationsdatei nun durch

  • STRG-X, Y und Enter


zigbee2mqtt neu starten um die Änderungen zu übernehmen

Um die Änderungen der Konfigurationsdatei zu übernehmen solltet Ihr nun noch Eure zigbee2mqtt Installation neu starten.

Dazu müsst ihr lediglich den folgenden Befehl ausführen.

sudo systemctl restart zigbee2mqtt

Zigbee2mqtt sollte nun neu starten und der konfigurierte Zigbee USB-Stick verfügbar sein. Wie Ihr nun Zigbee-Sensoren oder Aktoren hinzufügen und zigbee2mqtt über ein einfaches Dashboard administrieren könnt habe ich in den folgenden Artikeln beschrieben.

In der folgenden Kategorie habe ich außerdem weitere Zigbee-Geräte aufgelistet welche sich mit dem dort angebotenen NodeRed code ansteuern bzw. auslesen lassen.


Weitere Artikel zum Thema

Weitere Artikel zum Thema Zigbee bzw. zigbee2mqtt habe ich in der folgenden Kategorie zusammengefasst. Dort findet Ihr auch Artikel zu diversen Zigbee Geräten und wie diese aus NodeRed angesteuert werden können.

Externe Links:


Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂

P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂

Buy Me a Coffee at ko-fi.com

19 Kommentare

  1. Hi!
    Ersteinmal vielen Dank für diesen Artikel! Ich wollte heute auch meinen Sonoff Stick auf Zigbee2MQTT umstellen und war mit dem Firmware-Upgrade ein wenig überfordert. Dank deiner Anleitung ging alles super einfach! Ich würde allerdings noch hinzufügen, dass es u.U. nötig sein kann die Treiber für den Stick zu installieren bevor dieser vom Python-Skript als serielles Gerät erkannt wird. Die Treiber hab ich hier heruntergeladen: https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers

      1. Moin,
        der Driver muss aber schon beim Aktivieren ds Bootloaders da sein. Windows erkennt sonst das ganze Gerät nicht als COM-Port.

        Gruß

  2. Hi Fabian,
    danke für die richtig gute und ausführliche Anleitung.
    Hat mir sehr geholfen meine beiden Sonoffs zu flashen.
    Blöderweise dachte ich mir direkt beim zweiten Stick mit der Option „Disable Bootloader“ im Flash Programmer den Bootloader dauerhaft zu deaktivieren.
    Leider mit dem Ergebnis daß ich jetzt gar nichts mehr draufflashen kann. 🙁
    Hast Du vielleicht eine Idee wie ich da trotzdem noch ne Firmware flashen kann?
    Danke Dir
    Gruß
    Andre

    1. Hi Andre,
      oh das ist mir bisher noch nicht passiert, deswegen kann ich dir keinen (100%igen) tipp geben.
      Ich würde allerdings mal folgendes ausprobieren.
      Wenn du das Gehäuse von dem USB Stick entfernst könnte auf der Platine ein Taster verbaut sein. Wenn du diesen gedrückt hälst während du den USB Stick in den USB-Anschluss steckst und ca. eine Sekunde nach dem Einstecken losläasst, sollte der Bootlader auch aktiviert werden.
      Das sollte so eigentlich klappen. Habe es aber wie gesagt noch nie ausprobiert. :/
      Beste Grüße
      Fabian

  3. Hi Christopher,
    herzlichen Dank für die Anleitung! Hat fast alles perfekt geklappt.
    Nur die ieee bekomme ich ums Verr.. nicht geflasht. Ich gehe exakt nach deinen Bildern vor. Als ieee hätte ich gern die meines alten Sticks. Also trage ich die bei Mac Address wie im Bild ein und flashe dann die aktuelle Firmware. Die ist auch perfekt geflasht nur eben die ieee nicht.
    Kann es sein, dass sich die nicht per Bootloader flashen läßt? Oder hast du sonst eine Idee, was sein könnte?

    Gruß
    Reiner

    1. Hi Reiner,
      oh ich sehe gerade, dass ich hier einen blöden Fehler gemacht habe.
      Trag deine IEEE bitte mal in das Feld bei „Secondary Address“ -> „IEEE 802.15.4 MAC address“ ein. Dann müsste es klappen.
      Werde versuchen das im Artikel zu korrigieren. Sorry für die Umstände!
      Beste Grüße
      Fabian

  4. Hi. I got the follwing feedback

    Zigbee2MQTT:info 2022-02-04 12:48:28: Logging to console and directory: ‚C:\zigbee2mqtt\data\log\2022-02-04.12-48-26‘ filename: log.txt
    Zigbee2MQTT:info 2022-02-04 12:48:29: Starting Zigbee2MQTT version 1.23.0 (commit #unknown)
    Zigbee2MQTT:info 2022-02-04 12:48:29: Starting zigbee-herdsman (0.14.10)
    Zigbee2MQTT:error 2022-02-04 12:48:59: Error while starting zigbee-herdsman
    Zigbee2MQTT:error 2022-02-04 12:48:59: Failed to start zigbee
    Zigbee2MQTT:error 2022-02-04 12:48:59: Check https://www.zigbee2mqtt.io/guide/installation/20_zigbee2mqtt-fails-to-start.html for possible solutions
    Zigbee2MQTT:error 2022-02-04 12:48:59: Exiting…
    Zigbee2MQTT:error 2022-02-04 12:48:59: Error: AREQ – SYS – resetInd after 30000ms
    at Timeout._onTimeout (C:\zigbee2mqtt\node_modules\zigbee-herdsman\src\utils\waitress.ts:64:35)
    at listOnTimeout (node:internal/timers:557:17)
    at processTimers (node:internal/timers:500:7)

    Do you have any idea for this problem?

  5. Das Python-Script hat leider nicht funktioniert bei mir (auch wenn es die gleiche Ausgabe hatte wir hier beschrieben). Die Flasher-Software konnte das Gerät nicht erkennen.

    Das Gehäuse aufschrauben und dem Boot-Button beim Einstöpseln des Sticks gedrückt halten hat jedoch schließlich geklappt!

  6. Hallo, vielen Dank für deine informative Beschreibung.
    Ich habe ein Problem und zwar command zeigt mir „no modul name gevent “
    was soll ich hier machen
    danke

    1. Hi Jamal,
      dann fehlt noch eine Bibliothek. Versuch mal sie zu installieren mit dem Befehl „pip install gevent“. Danach dann das Skript nochmal ausführen. 🙂
      Beste Grüße
      Fabian

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.