Ich möchte Euch heute noch schnell erklären, wie ich es geschafft habe einen Xiaomi Temperatur und Luftfeuchtigkeit (LYWSD03MMC) Bluetooth Sensor aus der Xiaomi-Cloud zu befreien und in ein Zigbee Gerät zu verwandeln, welches sich dann problemlos in Zigbee2MQTT und somit in den Home Assistant einbinden lässt.
Das Problem, was ich hatte war, dass meine Geräte ab Werk mit einer zu neuen Firmware ausgeliefert worden waren, so dass der „normale“ Weg, wie er auf einigen Webseiten beschrieben ist, nicht mehr funktioniert.
Genau handelt es sich um die Firmware Version 2.1.1_0159 – und jetzt kommts: Es gibt davon anscheinend mehrere Revisionen (WTF?) und nicht alle lassen sich dann problemlos auf eine Custom Firmware und im Nachgang dann auf Zigbee umflashen.
Aber es gibt eine Lösung – und ich beschreibe Euch jetzt einen Weg – es gibt sicher auch andere Wege, aber dieser hier hat für mich bei mehreren Sensoren sehr gut funktioniert:
Also… wir packen den Sensor erst einmal aus. Das war der leichte Teil
Jetzt müssen wir den Sensor (leider!) erst einmal in der Xiaomi Home App (via Bluetooth) anlernen bzw. anmelden. Keine Sorge, wir löschen den da auch bald wieder raus.
Als nächstes besorgen wir uns ein Tool mit dem wir die später benötigten Infos aus dem Xiaomi-Konto extrahieren können.
Den „Token Extractor“ findet ihr hier:
https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor
Es gibt dort die Version für Linux und auch Windows.
Ich habe beide Versionen getestet und es klappt wunderbar.
Wir starten das Tool, fügen dort unsere Anmeldedaten unseres Xiaomi-Accounts ein, wählen dann die entsprechende Region (de) und dann erscheinen folgende Informationen:
Jetzt müssen wir einen Browser starten, der auf Chrome basiert. Der Einfachheit halber habe ich hier tatsächlich Chrome verwendet.
Jetzt geben wir in der Adresszeile folgendes ein:
chrome://flags/#enable-experimental-web-platform-features
Diese Funktion muss aktiviert werden, damit wir ein Bluetoothgerät mit dem Browser verbinden und dann damit arbeiten können.
Danach muss man den Browser einmal neu starten.
Mit den Informartionen aus dem Token Extrator von vorhin gehen wir nun zur folgenden Webseite:
https://atc1441.github.io/TelinkFlasher.html
Dort wird auf „Connect“ geklickt und sich dann mit dem Sensor via Bluetooth verbunden.
Im Log ist dann auch direkt zu sehen, dass die unsägliche Firmware 2.1.1_0159 installiert ist.
Das ist auch weiter oben schon in rot vermerkt und wir werden aufgefordert uns die richtige passende Firmware herunter zu laden.
Diese findet ihr hier:
https://github.com/atc1441/ATC_MiThermometer/blob/master/Stock_fw_2.1.1_0159.bin
Jetzt brauchen wir den Token und die BLE-ID von vorhin und tragen sie bei Mi Token und Mi Bind Key ein und wir klicken auf „Do via Login„
Steht im Prinzip ja auch schon unter Status, aber ich hab das anfangs nicht so ganz verstanden, was damit gemeint war. Auch, dass mit der BLE-Key die Bind-ID ist musste ich quasi erraten.
„Connected, the current Firmware needs you to supply the Mi Token and Bind key and do a Login to flash the Exploit Firmware!!!“
So… dann lassen wir mal die Aktivierung durch laufen… Das dauert nur ein paar Sekunden.
Ich habe um zu sehen, was da passiert die Entwickertools in Chrome eingeschaltet.
Nun flashen wir die Firmware, die uns ermöglicht den nächsten Schritt zu gehen. Also die Datei auswählen, die wir vorhin von Github geladen haben und dann auf „Start Flashing“ drücken.
In den Dev Tools und auf der Webseite seht ihr dann den Fortschritt.
Das Ganze dauert dann ca. 2-3 Minuten und der Sensor startet danach neu.
Nun kommen wir zum wichtigen Werkzeug, denn wir wollen sicher gehen, dass der Sensor nun auch wirklich bereit ist eine Custom Firmware aufzunehmen.
Die Büroklammer *trommelwirbel*
Aber zuerst öffnen wir das Gehäuse vom Sensor, um dann folgendes zu sehen – ich hoffe ihr könnt diese zwei kleinen Kontakte oberhalb der Batterie erkennen. Diese müssen wir nun für ca. 10 Sekunden (nur um sicher zu gehen) miteinander verbinden.
Dazu verdengeln (ein wahrlich professioneller Akt) wir eine Büroklammer so sehr, dass wir das bewerkstelligen können. Wenn es getan ist, dann haben wir einen astreinen und perfekten Werksreset des Geräts durchgeführt.
Wir gehen in die Xiaomi Home App am Handy, – löschen den Sensor wieder raus und verbinden den erneut – ich find das auch umständlich, ehrlich.
Wieder zurück zum Token Extractor nachdem das erledigt ist und dann nochmal die Daten ziehen, damit wir jetzt endlich zum wichtigen Teil kommen.
Nun springen wir mit dem Chrome-Browser auf diese Webseite:
https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html
Dort akvieren wir das Kästchen bei „Get Advertising MAC“ und verbinden unseren Sensor wieder mit „Connect“ via Bluetooth.
Dann füllen wir das Formular mit den eben extrahierten Daten inkl. Device known ID ein und klicken auf Login.
Jetzt klicken wir auf „Custom Firmware: ATC_v49.bin“ und dann unten auf „Start Flashing“
Im DevTools gehts wieder rund und wir sehen, dass die Firmware aktualisiert wird.
Danach startet der Sensor wieder neu und wir wenden uns unserem alten Freund der Büroklammer *trommelwirbel zu – und resetten den Sensor erneut.
Jetzt wirds einfacher und wir sind fast fertig:
Auf der gleichen Seite verbinden wir uns erneut mit dem Sensor, dieses Mal hat er schon eine andere Kennung, die mit „ATC“ beginnt.
Nun können wir die experimentelle Zigbee-Firmware auswählen und flashen. Es erscheint dann noch eine entsprechende Warnung, dass die Firmware experimentell ist, aber davon lassen wir uns natürlich nicht beirren und klicken dann wagemutig auf das blaue „Start Flashing“. YOLO!
Nach weiteren zwei Minuten ist das dann auch erledigt und das Gerät schaltet sich nach dem Neustart in den Kopplungsmodus.
(Ich habe in Zigbee2MQTT schon während des Flashens auf der Zigbee-Firmware den Anlernmodus aktiviert – und das hat bei mir bei allen Sensoren soweit gut geklappt)
In Zigbee2MQTT sieht das dann so aus:
Fertig! Nun haben wir uns eine Waffel oder was anderes leckeres verdient.
PS: Den Sensor in der Xiaomi-App könnt ihr ruhig wieder löschen, denn der wird da nicht mehr gebraucht.