Die chinesischen Smart-Home Produkte von Xiaomi überzeugen durch Ihre Kompaktheit, haben ein ansprechendes Design und vor allem der Preis machen Sie sehr attraktiv.
- Kernproblem: China Cloud
- Alternatives Gateway
- Nodejs und Xiaomi Modul im Terminal installieren
- Xiaomi Modul in Fhem einbinden und Brücke anlegen
Um die Komponenten unter Fhem nutzen zu können, ist eigentlich ein Gateway von Xiaomi nötig. Mittels App können dann Komponenten mit dem Gateway gepairt und in Fhem genutzt werden. Das hört sich gut an – ist es bis auf einige Ausnahmen auch, denn:
- Die besagte App verlangt so ziemlich Vollzugriff auf euer Smartphone
- Die Übersetzung der App ist unzureichend
- Alle Aktionen laufen über einen chinesischen (Cloud-)Server
- Das Gateway hat zwar ganz nette Zusatzfunktionen, allerdings ist es nicht für den westlichen Markt angepasst – daher sind die meisten Funktionen leider nicht nutzbar (Radio z.B.)
- Das Gateway benötigt eine Steckdose (und einen Adapter, um überhaupt in einer Schuko-Steckdose genutzt werden zu können)
- Das Gateway hat kein CE-Kennzeichen und darf somit in Europa (eigentlich) nicht verwendet werden.
Alles in Allem sind das alles keine K.O. Kriterien für das Gateway – aber es geht auch anders und „anders“ ist immer einen näheren Blick wert.
Grundlage für das folgende Tutorial ist dieser Beitrag aus dem Fhem Forum von Oskar Neumann.
Hier wird mit Hilfe eines ZigBee Sticks, der passenden Firmware, Nodejs, MQTT und einem Fhem Modul ein alternatives Gateway geschaffen. Die Devices kommunizieren dann mit dem Zigbee-Stick (Pairing notwendig), der die übermittelten Daten der Sensoren – Fhem via MQTT bereitstellt. Die einzelnen Geräte werden dabei per Autocreate angelegt. Diese Lösung funktioniert sehr zuverlässig!
Wie man dem Beitrag entnehmen kann werden einige Teile gebraucht:
- CC2531 USB Stick
- CC Debugger
- Adapterkabel
Ich hab mir diese Teile direkt (über Ebay) aus China bestellt. Die Lieferzeit ist natürlich ziemlich lang, allerdings hatte ich in der Zwischenzeit noch das Gateway in Benutzung und konnte mich umfangreich mit dem Modul von Oskar Neumann auseinandersetzen.
Der CC Debugger und das Adapterkabel werden ausschließlich dazu gebraucht, um die Firmware auf den Stick zu schreiben. Man sollte versuchen sich die Teile irgendwo auszuleihen – das erspart viel Warterei auf die Post aus China und spart natürlich ein paar Taler.
Gern könnt Ihr mir euren Stick auch zusenden und ich flashe die Firmware auf euren Stick – dazu bitte Kontakt aufnehmen.
CC2531 Stick Flashen unter Windows
Hat man alles parat liegen, kann man mit dem Flashen des Sticks beginnen. Dazu wird das verlinkte Programm zum flashen (bitte unbedingt V1 wählen!!) und der Treiber für den CC Debugger heruntergeladen.
Hinweis: Man muss sich bei Texas Instruments registrieren um das Flash-Tool herunterladen zu können!
Die Firmware natürlich nicht vergessen und entpacken (Hex-File).
Stick und CC Debugger müssen nun jeweils an einen USB Port angeschlossen werden. Windows sollte beides selbständig erkennen.
Der Treiber für den CC Debugger sollte nun über den Gerätemanager aktualisiert werden. (Gerätemanager -> CC Debugger -> Treiber aktualisieren -> auf dem PC suchen -> Pfad zum Treiber auswählen)
Dann das Adapterkabel mit dem Stick verbinden
Wenn nun beide Geräte in jeweils einem USB Port Platz genommen haben, kann man Debugger und Stick miteinander verbinden.
Nun wird das Flash-Tool (SmartRF Flash Programmer) als Administrator ausgeführt.
Dort sollte der CC Debugger aufgeführt sein.
Unter „Flash image“ wird die Hex-Datei aus dem Git Repository, die im Ordner „Firmware“ liegt ausgewählt.
Jetzt nur noch auf „Perform actions“ klicken – und der Stick wird geflasht.
Den CC Debugger und das Adapterkabel braucht man nun nicht mehr – der CC2531-Stick kann vom PC getrennt werden und an den Fhem-Server gesteckt werden.
Nodejs und Xiaomi Modul installieren am Fhem Server
Weiter geht’s am Fhem-Server, genauer gesagt im Terminal. Dazu per SSH verbinden, anmelden und
sudo apt-get update && sudo apt-get upgrade
ausführen.
Das Modul baut auf Nodejs und einen MQTT Broker auf – beide müssen auf dem System installiert sein. Im Folgenden installieren wir Nodejs für den MQTT Broker bitte hier nachsehen.
Nodejs ist zwar in den offiziellen Paketquellen vorhanden – leider nur recht alte Versionen. Daher holen wir uns eine neue Paketquelle dazu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
fügt die Paketquelle für Nodejs in der 12. Version hinzu. Danach folgt, wie üblich
sudo apt-get update
zum aktualisieren der Paketlisten. Und zur Installation von Nodejs
sudo apt-get install -y nodejs
Wenn alles fertig ist, kann mit
node --version
die installierte Version überprüft werden. Die Ausgabe sollte (Stand 4/2018) v8.11.1 sein.
Nodejs benötigt nun noch einige Pakete on Top
npm install serialport
&
npm install zigbee-herdsman
Nodejs ist soweit vorbereitet. Nun kann man sich das Git Repository auf den Fhem-Server holen.
Ich habe Meins in das Fhem-Verzeichnis geladen, wer das auch möchte kann mit
cd /opt/fhem
in das Verzeichnis wechseln.
Um generell Git-Repositorys herunterzuladen ist es nötig ein weiteres Paket zu installieren
sudo apt-get git-core
nach Abschluss der Installation kann dann mit mit
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git
das Repository dorthin geladen werden.
Nach Abschluss des Downloads mit
cd zigbee2mqtt
in das neue Verzeichnis wechseln.
Achtet bei den folgenden Schritten darauf, dass ihr euch immer in diesem Verzeichnis aufhaltet.
Nachtrag: Es kann wichtig sein, sich für die kommenden Schritte als root (sudo -i) anzumelden, oder die Rechte bzw. den Besitzer des zigbee2mqtt Verzeichnisses (chown) anzupassen.
sudo chown -R fhem:fhem /opt/fhem/zigbee2mqtt
Nun müssen noch kleinere Anpassungen vorgenommen werden, damit das Xiaomi Modul anschließend korrekt läuft. An dieser Stelle muss auch der MQTT-Server, vollständig eingerichtet sein (auch in Fhem sollte die MQTT Bridge angelegt sein).
Als erstes muss man den Pfad zum CC2531-Stick, der zu diesem Zeitpunkt hoffentlich schon am Server steckt, ermitteln, dazu gibt man
ls -l /dev/serial/by-id
ein und erhält, je nach Anzahl und Art der verwendeten USB-Geräte in etwa folgende Ausgabe
Ich nutze am Server einen CUL und den CC2531 Stick – der Letztgenannte hat die Adresse „/ttyACM1“.
Unter der Annahme, dass der MQTT-Server ebenfalls läuft, kann nun mit
sudo nano zigbee2mqtt/data/configuration.yaml
die Konfiguration für das Xiaomi Modul vorgenommen werden. Dazu werden die Zeilen entsprechend geändert – danach mit „Strg+O“ gespeichert und der Editor mit „Strg+X“ beendet.
Sollte die Datei bei euch leer sein, dann liegt das an den Dateirechten (siehe obigen Nachtrag).
In der Originaldatei steht unter „server“ normalerweise „localhost“ und unter „port“ – „/dev/ttyACM0“ – das kann auch so funktionieren, sollte natürlich vorher überprüft werden. Wenn sich die IP-Adresse des Servers nicht ändert, kann Diese auch dort eingetragen werden – so hab ich es gemacht.
Ist die configuration.yaml angepasst und der Editor geschlossen, kann mit
sudo npm ci
das Xiaomi Modul bzw. die Abhängigkeiten dafür installiert werden. Sollte es zu Permission/Access-Errors kommen, dann bitte die Installation als Root wiederholen.
Im Anschluss an die Installation kann mit
sudo node index.js
der Nodejs-Server zum Test gestartet werden. Wenn man alles richtig gemacht hat erscheint keine Fehlermeldung und das Modul läuft vor sich hin.
[Falls etwas nicht wie erwartet klappt, hilft möglicherweise auch ein Neustart des Servers. Insbesondere nach der Installation von Nodejs kann ein Neustart sicher nicht schaden.]
Um weiter arbeiten zu können muss der (hoffentlich einwandfrei laufende Prozess) mit „Strg+C“ beendet werden.
Damit das Modul nicht als Terminal Prozess, sondern als Deamon im Hintergrund arbeitet ist noch eine Kleinigkeit zu erledigen, dazu muss eine Datei angelegt und Inhalt eingefügt werden. Das Modul wird bei einem Neustart ebenfalls mit gestartet.
sudo nano /etc/systemd/system/xiaomi.service
erstellt die Datei und öffnet den Editor.
Folgender Inhalt wird eingefügt:
[Unit]
Description=Xiaomi
[Service]
ExecStart=/usr/bin/node /opt/fhem/zigbee2mqtt/index.js
Restart=always
RestartSec=5
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=xiaomi
[Install]
WantedBy=multi-user.target
Achtung: Wenn ihr das Git Repository in an einem anderen Ort gespeichert habt, muss dieser auch entsprechend an der Fett-markierten Stelle angepasst werden. Wie oben zu sehen habe ich das Git-Repository in das /opt/fhem Verzeichnis geladen und dementsprechend den Pfad gesetzt.
Um den neuen Deamon zu aktivieren, zu starten und zu überprüfen sind noch folgende Schritte zu erledigen:
sudo systemctl enable xiaomi
aktiviert den Deamon
sudo systemctl start xiaomi
startet den Deamon
sudo systemctl status xiaomi
überprüft den Demon, sofern alles geklappt hat mit folgender Ausgabe
Bis hierher schon eine recht aufwändige Prozedur, aber es gibt Licht am Ende des Tunnels.
Modul in Fhem einbinden und Brücke anlegen
In Fhem muss das neue Modul hinzugefügt werden, das funktioniert wie hier beschrieben mit
update add https://raw.githubusercontent.com/oskarn97/fhem-xiaomi-mqtt/master/controls_xiaomi-zb2mqtt.txt
update check xiaomi-zb2mqtt
update all xiaomi-zb2mqtt
Nach einem Fhem-Update sollte auch ein
shutdown restart
ausgeführt werden, um alle Änderungen wirksam zu machen.
Die Brücke wird dann zum Abschluss mit
define xBridge XiaomiMQTTDevice bridge
angelegt.

Der Screenshot wurde VOR dem Update des Moduls aufgenommen, der Befehl zum Pairen hat sich leicht geändert!
Für das Pairing mit Xiaomi Komponenten muss die Komponente in die Nähe des Sticks gebracht werden. Bereits montierte Fensterkontakte oder Temperatursensoren können dazu praktischer Weise leicht von Ihrem klebenden Unterteil genommen werden.
Ich habe den jeweiligen Sensor und eine Stecknadel mit zum Fhem-Server genommen – dann am xBridge – Device
set xBridge pair 1
eingegeben und im Anschluss den Pairing Button des Senors zuerst 4 Sekunden gedrückt gehalten (aktiviert den Pairingmode des Sensors) und dann in Abständen von 2 Sekunden, über den Zeitraum von etwa einer Minute, immer wieder kurz gedrückt.
Wenn das Pairing geklappt hat, wird die Komponente per Autocreate im Raum „XiaomiMQTTDevice“ angelegt.
Vielen Dank an Oskar Neumann, für die Arbeit an diesem Modul und dem klasse Support!
[Last Update: 09.05.2020]