Xiaomi Devices OHNE originales Gateway nutzen

Die chinesischen Smart-Home Produkte von Xiaomi überzeugen durch Ihre Kompaktheit, haben ein ansprechendes Design und vor allem der Preis machen Sie sehr attraktiv.

Inhalt

Kernproblem: China Cloud

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.

zurück zum Inhalt

Alternatives Gateway nutzen

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!

zurück zum Inhalt

Notwendige Teile

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.

zurück zum Inhalt

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!

Das Git Repository mit der Firmware natürlich nicht vergessen und entpacken.

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)

treiber cc.png

Dann das Adapterkabel mit dem Stick verbinden

P_20180421_183647_vHDR_Auto.jpg

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.

CCFlashen.png

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.

zurück zum Inhalt

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_8.x | sudo -E bash -

fügt die Paketquelle für Nodejs in der 8. 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-shepherd

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

ls-l

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).

configuration.png

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 install

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

servicestatus.png

Bis hierher schon eine recht aufwändige Prozedur, aber es gibt Licht am Ende des Tunnels.

zurück zum Inhalt

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.

xbridge

Der Screenshot wurde VOR dem Update des Moduls aufgenommen, der Befehl zum Pairen hat sich leicht geändert!

zurück zum Inhalt

Pairing

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.

zurück zum Inhalt

Vielen Dank an Oskar Neumann, für die Arbeit an diesem Modul und dem klasse Support!