Tinkering Tuesday – HUEify – JN5169 Xiaomi Smart Button – Part 1 – Making a connection

This is a side project to the original HUEify series on connecting a custom light to the HUE ecosystem. On the site http://faire-ca-soi-meme.fr/ there are some articles about what’s inside the Smart Home Gadgets of Xiaomi (at the end of this I provide all the links currently available). Every single piece is taken apart and detailed pictures were taken describing all the identifiable parts. With my little bit french from school even I can read through it. But maybe Google Translator may help others.

I decided to order two pieces because they were very cheap at Gearbest at that time and they would make a perfect match to the nightpanel lights I am currently building and replace the currently used Amazon Dash button. And because they just arrived and I am waiting for PeeVeeOne to publish his solution for the Multiple Endpoint RGB lights on the JN5168, I will now try my luck with the Xiaomi button to see whether I can get it to communicate with Hue.

On faire-ca-soi-meme there are several detailed images of the button and also the pinout from the test pins. Unfortunately these are pogo pins and my tries to solder a wire to them were not very successful. I was successful though with using jumper wires to connect 3.3V and GND to the battery connector, hot-glueing two jumper wires together in the right spacing and forcing it to the pogo pin connectors for RX and TX with a soldering hand. The fifth pin that is required is only temporary and is the SPIMISO pin next to RX/TX. Just shortly connect a ground wire to it when connecting the power (even with my shaky hand that works).

If that is done right you can open the Device Info in NXP Beyond Studio (use 1000000 Baud and the correct COM Port):

I then compiled the Controller_OnOffSensor Demo app from NXP although in the documentation it is only described to work with the JN5168 demo hardware. I used the compile flag for the JN5169 and it compiled successfully. There is an error when flashing the firmware with the flash utility from BeyondStudio but this is only the validation after flashing. The reason is that the chip was read-protected from Xiaomi in order to make reengineering their firmware impossible (or not-so-easy). So the flashing was successful which can be seen from the serial monitor after rebooting:

APP: Switch Power Up...........................(several dots more)
Heap size at step 1 is 11412 bytes (start=04003fe4 end=04006c78)
APP: Watchdog timer has reset device!
Heap size at step 2a is 11412 bytes (start=04003fe4 end=04006c78)
Heap size at step 3 is 11412 bytes (start=04003fe4 end=04006c78)
Heap size at step 4 is 11412 bytes (start=04003fe4 end=04006c78)
Heap size at step 5 is 8216 bytes (start=04004c60 end=04006c78)
Heap size at step 6 is 8216 bytes (start=04004c60 end=04006c78)
Starting Touch Interface...

This ouput is repeated from the timer resetting the device. There seems to be something wrong. The last output message can be found and after that the drivers eTouchInit method is called. I added some debug output and commented out the first for loop (is this a delay or what is that for?):

This results in the following output (the BWE was added because I wanted to be sure I have the correct call):

APP: Switch Power Up...........................(several dots more)
Heap size at step 1 is 11428 bytes (start=04003fd4 end=04006c78)
APP: Watchdog timer has reset device!
Heap size at step 2a is 11428 bytes (start=04003fd4 end=04006c78)
Heap size at step 3 is 11428 bytes (start=04003fd4 end=04006c78)
Heap size at step 4 is 11428 bytes (start=04003fd4 end=04006c78)
Heap size at step 5 is 8232 bytes (start=04004c50 end=04006c78)
Heap size at step 6 is 8232 bytes (start=04004c50 end=04006c78)
Starting Touch Interface...BWE
Starting vTouchInitHardware
Stoping vTouchInitHardware

So there seems to be something wrong with the for-loop. Maybe it tries to read from a wrong pin (because it was made for the JN5168). I will have to take a closer look at the driver and see what I can do. I think I have to understand how it is working first (it is build for a remote control with several buttons so I guess a more simple solution has to be found). I also have to see which DIO pin the buttons are connected to…

In parallel there are also some comments from lucac81 on peeveeone.com about using the JN5169 and Peter also wrote that he ordered some, so maybe the master is faster than me 😀 lucac81 had trouble even installing the light firmware compiled for the JN5169 so maybe I will even try flashing that on the chip to see what happens with the button (just to see if it works, of course I will not use a button to make a light…). I also remember a comment asking about using the chip as a switch for HUE. So maybe someone else is also making progress on this end. I am open for any discussion/help/input.

To be continued sooner or later.


I flashed the JN5169 binary provided by Peter on the Xiaomi SmartHome button but it didn’t join. Unfortunately the debug output on that build doesn’t provide much information.
I build a new one from the demo application with all debugs enabled and the keys in place as I did with the JN5168 but I am getting the same output I had when not correctly putting the keys in place the first time with the JN5168 (see my post http://www.boriswerner.eu/tinkering-tuesday-hueify-making-the-custom-binary-and-the-demo-app-work-on-the-jn5168/):

Try To join 6a075d40c86781e on Ch 11
Try join status 00
Join failed ad

I already researched the error code „ad“ before:

ZPS_APL_APS_E_SECURITY_FAIL: An APSDE-DATA.request requesting security has resulted in an error during the corresponding security processing.

Which definitely hints to a key problem. So the general function is there and it even tries to connect to the bridge but get’s a bad response. That can’t be everything here 😉









JN5169 discussion on https://peeveeone.com/?p=187&


Foto Friday – Xiaomi Yi HD RAW komfortabel in DNG konvertieren

In meinem letzten Foto Friday habe ich ja schon über die Möglichkeit geschrieben mit der Xiaomi YI Fotos im RAW Format aufzunehmen. Im dort referenzierten Beitrag im Dashcam Forum gibt es auch gesammelte Tools zum Postprocessing:


Das Vorgehen, das dort beschrieben wird ist jedoch mit einigem manuellen Aufwand verbunden. Wer Photoshop und/oder Lightroom nutzt, der bekommt dort auch ein Lens Profile. Da ich das nicht nutze ist das für mich nicht interessant, könnte aber ganz praktisch sein.

Auf der Seite http://www.tawbaware.com/xiaomiyi.htm gibt es ebenfalls noch ein paar gute Tipps über das Hacking der Yi und auch ein Skript um die RAWs umzuwandeln (leider nur die unkomprimierten, die per Skript, Einzelfoto oder Timer, nicht aber Burstmodus oder der Standard Timelapse-Modus, erstellt werden). Das finde ich das beste und einfachste Tool. Die Einrichtung ist aber nicht ganz intuitiv weil man sich die Programme noch zusammensammeln muss und entsprechend einrichten, sodass es einfach zu bedienen ist (ist dort im Grunde fast alles beschrieben, allerdings nicht als zusammenhängende Anleitung und an verschiedenen Stellen):

  1. Unten auf der Seite http://www.tawbaware.com/xiaomiyi.htm gibt es ein ZIP-File herunterzuladen:
  2. Den Inhalt entpackt man sich bestenfalls in einen Ordner auf C:\. Im Skript ist der Ordner C:\utilities vorgesehen, ich habe meinen Tools genannt. In den gleichen Ordner habe ich die beiden Programme raw2dng und exiftool gepackt. Die muss man sich nochmal separat besorgen.
  3. Raw2dng bekommt man auf der Seite http://e2500.narod.ru/raw2dng_e.htm (Download als .7z-File, man benötigt also 7-zip oder ein kompatibles Entpackprogramm). Hierin sind mehrere Dateien enthalten:
    Gebraucht wird aber nur die Datei raw2dng.exe, welches die Kommandozeilenversion ist. Der Download aus dem Dashcam-Forum nutzt z.B. die raw2dng_en.exe, welches die Version mit einer grafischen Oberfläche ist.
  4. Exiftool bekommt man auf der Seite http://www.sno.phy.queensu.ca/~phil/exiftool/. Hier lädt man sich die Windows-Executable herunter:
    Die Datei dann in den gleichen Ordner wie die anderen Dateien entpacken und wie auf der Seite beschrieben in exiftool.exe umbenennen.
  5. Im Skript selbst muss man nun die Pfade zu den Programmen eintragen. Dazu die xiaomi_dng.bat mit dem Texteditor der Wahl öffnen und in den Zeilen 33 und 34 den Pfad anpassen. Bei mir wäre das:
    Und wo wir dort gerade sind: Standardmäßig ist die Ausgabe des Skripts sehr umfangreich. Deswegen am besten in der ersten Zeile das „rem“ entfernen, also die Zeile
    @rem echo off
    ändern in
    @ echo off
  6. Nun wäre das Tool schon einsatzbereit indem man die RAW-Dateien einfach auf die BAT-Datei zieht. Aber man kann sich das Leben noch etwas komfortabler machen indem man einen neuen „Senden an…“ Eintrag im Windows Explorer Kontextmenü hinzufügt. Dazu öffnet man einen Windows Explorer und fügt in die Adresszeile
    ein. Das ist ein Shortcut für den Ordner C:\Users\<username>\AppData\Roaming\Microsoft\Windows\SendTo
    Dort fügt man jetzt einfach eine Verknüpfung zur xiaomi_dng.bat ein (z.B. „Rechtsklick – Verknüpfung erstellen“ oder Drag & Drop unter festhalten der Alt-Taste). Den Namen der Verknüpfung kann man frei wählen, ich habe mich z.B. für „Xiaomi RAW 2 DNG Converter“ entschieden.
  7. Jetzt kann man ganz einfach seine RAWs im Windwos Explorer markieren und im Kontextmenü an den Converter senden:
  8. Es öffnet sich ein Command Fenster und die Dateien werden verarbeitet. Am Ende wird dann die Meldung „Conversion Complete“ ausgegeben und mit einer beliebigen Taste kann das Fenster geschlossen werden:

Komprimierte RAWs

Das Prozedere funktioniert wie schon gesagt leider nur für die unkomprimierten RAWs (um die 31 MB), nicht für die 13 MB großen komprimierten.

Dashcam User AndreaPaco hat ein wenig Zeit investiert um auch die komprimierten, 13 MB großen Files nutzbar zu machen. Mit den folgenden Einstellungen für raw2dng kann man zumindest das Bild erahnen, es ist aber weit entfernt von nutzbar:

13492224, 0, 4608, 3456, 7, 3904, 16, 4, XIAOMI-YI-COMP

Siehe: https://dashcamtalk.com/forum/threads/the-definitive-xiaomi-yi-raw-guide.13079/page-4#post-250926

Das Ergebnis sieht wie folgt aus:

Auf der linken Seite ist das Bild grob zu erkennen. Mehr aber auch nicht. Leider ist dort seit Mai 2016 nichts mehr passiert, sodass ich hier keine Hoffnung mehr habe (vor allem auch, da ja der Nachfolger mit der Yi 4K schon lange raus ist und dessen Nachfolger auch in den Startlöchern steht).


Sollte das RAW sehr rotstichig sein, so hat die Umwandlung mit dem Exiftool nicht funktioniert:

Sollte eher so aussehen (nach erfolgreicher Umwandlung):

2016-02-21 16.23.51-1

Xiaomi Mi Band 1S – Schlaftracking

Tja, gleich vorweg, das war ein Schuss in den Ofen. Ich hatte mir ja erhofft, dass ich ein wenig tieferen Einblick in meine Schlafgewohnheiten mit dem Mi Band bekomme. Bis auf „Wann bin ich schlafen gegangen?“ und „Wann bin ich wieder aufgewacht?“ kann mir das Band leider keine Informationen liefern. Die Erkennung der Schlafphasen ist einfach totaler Blödsinn. Auch mit aktiviertem Schlafassistenten, der den Herzfrequenzsensor für die Analyse nutzt, sind die Ergebnisse sehr ernüchternd.

Es gibt vier Dinge, die mir aufgefallen sind:
1.) Die Tiefschlafphasen sind viel zu kurz und zu oft:
2016-02-10 15.59.16 2016-02-09 07.22.53

Gerade im ersten Screenshot sieht man 12 Tiefschlafphasen in einer Frequenz von 15-20 Minuten. Etwas unglaubwürdig.

2.) Nochmal die Tiefschlafphasen. Und zwar zeigt mir die App sehr oft Tiefschlafphasen um die Afustehzeiten meiner Frau herum. Ich garantiere, dass ich dann definitiv nicht im Tiefschlaf bin.

3.) Die Ergebnisse ändern sich. Das ist ein Phänomen, was auch im Internet sehr oft anzutreffen ist: Beim ersten Abruf zeigt die App ein Ergebnis, nach ein paar Minuten oder Stunden (nicht verlässlich nachvollziehbar), ändern sich die Ergebnisse.

Im folgenden Beispiel sieht man die Ergebnisse einer einzigen Nacht. Einmal beim ersten Abruf um 7:10 Uhr, dann um 7:53 völlig andere Ergebnisse.
2016-02-11 06.10.13 2016-02-11 06.53.16

Das selbe tritt auf, wenn man manuell die Einschlafzeit verstellt. Das habe ich einmal gemacht, weil die App gedacht hat, ich wäre eingeschlafen, als ich auf dem Sofa lag. Zumindest hat es erkannt, als ich dann tatsächlich aufgestanden bin um mich ins Bett zu begeben. Da hat es eine Wachphase angezeigt.

4.) Ein weiteres Problem ist, dass sich die Ergebnisse nicht gut analysieren lassen. Zum einen gibt es keinen Export (wohl nur mit root-Rechten machbar), auch die Synchronisierung mit Google Fit bezieht sich nur auf den Schrittzähler. Zum anderen sind die Detailinfos nur am Folgetag einsehbar, danach gibt es nur noch die Zusammenfassung im Verlauf zu sehen:

2016-02-21 15.23.34


Ich hatte mir zumindest ein paar bessere Ergebnisse erwartet. Ich hab gleichzeitig auch ein Schlaftagebuch angefangen, das bringt mir wahrscheinlich bessere Ergebnisse.

Jemand Interesse an einem fast neuen Xiaomi Mi Band 1S? 😉

2016-02-21 16.23.51-1

2016-02-02 21.39.55

Fitnesstracker Mi Band 1S

Ich hab das Mi Band 1s bei Gearbest am [Datum] bestellt. Lieferzeit wurde schon bis zu 50 Tage avisiert.

Nach kurzer Zeit hatte ich schon eine Bestellbestätigung in der Inbox also dachte ich, kann ja dann nicht mehr so lange dauern. Naja, Mitte Januar ist mir dann wieder eingefallen „Hm, da war doch noch was“, aber die Trackingnummer half auch nichts. Am 2.2. hatte ich dann ganz unverhofft ein kleines Päckchen im Briefkasten mit einem „Gift“ im Wert von 11,93 Euro, naja, ein wenig geschummelt. Ich weiß zwar nicht warum, weil das Ding so oder so unter der Zollfreigrenze läuft…

Aber erstmal kurz, was will ich überhaupt damit? Gute Frage. Ich laufe eh zu wenig, daran hat weder ein normaler Schrittzähler im Rahmen der Gesundheitswochen meines Arbeitgebers, noch die S-Health-Schrittzähler-App was geändert. Also das ist weniger mein Beweggrund. Hauptsächlich interessiert mich eigentlich die Analyse meines Schlafes. Wie viel Schlafe ich, wie gut schlafe ich (zumindest theoretisch). Dafür ist mir das die paar Euro wert, nicht aber den Preis eines Fitbit oder sonstigen deutlich teureren Gerätes.

Das Mi Band kommt in einem schlichten Karton daher.
2016-02-02 21.39.55
Die erste Amtshandlung ist natürlich die Bedienungsanleitung zu lesen… leider nur auf Chinesisch. Aber die Abbildungen sind recht selbsterklärend und außerdem gibt es ja noch Internet bzw. das „Einfach-mal-ausprobieren“. Erstmal aber mit dem niedlichen Adapter an die USB-Buchse und geladen. Das ging auch recht fix, ich schätze mal 2 Stunden, dann waren alle 3 Lampen an.

2016-02-02 21.35.55

Dann ins Armband eingesetzt und erstmal die offizielle App „Mi Fit“ im PlayStore installiert. Die Bewertungen sind nicht so und es soll auch Alternativen geben, aber ich möchte erstmal mit der offiziellen Version starten. Mal sehen. Nach der Installation die erste Überraschung: die App ist sogar auf deutsch! Über https://account.xiaomi.com/pass/register hab ich mir dann erstmal einen Account angelegt (soll wohl besser per Browser gehen…).

Dann geht es an die Einrichtung. Nach Namen, Geschlecht (blau für männlich, pink für weiblich… ist das gender-konform?), Geburtsmonat, Größe und Gewicht geht es dann ans Pairing.

2016-02-02 20.52.44 2016-02-02 20.53.18 2016-02-02 20.54.22

2016-02-02 20.54.32 2016-02-02 20.54.41 2016-02-02 20.54.52

2016-02-02 20.55.00 2016-02-02 20.55.11

Der erste Versuch das Band mit meinem Smartphone zu verbinden lieferte „Zu viele Gräte in Reichweite“. Ich hatte heute Mittag Fisch zu Essen, hat das damit zu tun? Beim nächsten Versuch haben dann die LEDs abwechselnd geleuchtet und ich wurde aufgefordert den Metallsensor zu berühren. Nach einigem Streicheln wieder die Fehlermeldung. Beim dritten Versuch mal mit mehr Kraft „draufgepatscht“, da hat es funktioniert.

2016-02-02 20.55.45 2016-02-02 20.56.58 2016-02-02 20.58.37

Man hat auch einige Einstellmöglichkeiten, die ich erstmal wie folgt vorgenommen habe. Mal sehen.

2016-02-02 21.03.56 2016-02-02 21.05.33

Geht man zurück auf den Home-Bildschirm wird erstmal ein Update eingespielt. Das geht aber auch innerhalb von einer Minute. Dann wird der Puls genommen. Auch recht fix. Es gibt zwar irgendwie kein Ergebnis, aber ein manuelles Starten der Messung ergibt dann einen Anfangspuls von 72. Sehr gut.

2016-02-02 21.06.14 2016-02-02 21.06.59 2016-02-02 21.08.50

Das war am ersten Abend. Die erste Nacht hat auch gleich gute Ergebnisse mit sich gebracht. 8,5h Schlaf, davon über 5 im Tiefschlaf. Wer weiß, ob’s stimmt?!? Ich werde das über die Zeit mal beobachten.

2016-02-03 14.20.19