hack_xiaomi_mi_temperature_humidity_sensor

Hack du XIAOMI Mi Smart Temperature and Humidity Sensor

Dans le domaine de la domotique, la firme chinoise XIAOMI perce de jour en jour, grâce à ces produits d’une très bonne qualité, avec des prix assez impressionnant. Vu le succès de leur nouveau capteur de température/humidité et son prix à moins de 10€ (avec les réductions), et bien je dois avouer que je suis un peu dubitatif ;). En effet, comment peuvent-ils sortir des capteurs avec des tarifs aussi bas ?

Je n’ai pas pu donc m’empêcher de démonter l’un de leurs capteurs pour savoir ce qu’ils utilisent et comprendre comment il fonctionne.

Vous pouvez vous procurez le capteur à cette adresse :

Capteur Xiaomi Mi T/H sensorXIAOMI TEMPERATURE AND HUMIDITY SENSOR  WHITE

Ma note :

Votre note :

[Total : 30    Moyenne : 3.1/5]

 

Caractéristiques officielles du capteur

Capteur Xiaomi Mi T/H sensorCapteur de température/ humidité Xiaomi Mi

Les caractéristiques du capteur XIAOMI Mi T/H sont assez sommaires. Il contient un capteur de température avec une précision de +-0.3 °C et un capteur d’humidité relative avec une précision de +-3%.

Le capteur est alimenté avec une pile bouton CR2032 à 3V.

Il communique en Zigbee avec la passerelle de la même marque.

La taille et le poids de l’objet est ridicule.

Taille : 3.60 x 3.60 x 1.15 cm
Poids : 15g

Le capteur est capable de faire de la détection d’alerte sur dépassement de seuil de température et/ou humidité.

Le capteur remonte, bien entendu, les valeurs du capteur tous les X temps.

Sur les sites de ventes, il existe plein d’images caractérisant le capteur mais ce qui est le plus marrant c’est que sur la plupart de leur produit, ils offrent une image représentant l’objet complet en éclaté :

Xiaomi Mi éclaté

éclaté du capteur de température / humidité Xiaomi MI

Je trouve cette image super intéressante car elle donne déjà un aperçu de la mécanique et de certains composants du capteur. Les autres fabricants devraient s’inspirer de XIAOMI sur ce point. En gros, ils n’ont rien à cacher… au contraire, ils mettent en avant leur intelligence technique.

Démontage du capteur

Voici toutes les étapes du démontage du capteur :

En retournant le  capteur, on trouve une bande autocollante pour fixer le capteur et au centre une encoche permettant d’ouvrir le boitier avec une pièce de monnaie:

Xiaomi_mi_boitier_pileXiaomi boitier pile – CR2032

On découvre la pile qui est une CR2032 (super répandue) capacité  : 250mAh

Xiaomi_boitier_sans_pileXiaomi boitier sans la pile

Les connecteurs sont d’assez bonne qualité et ne devraient pas s’oxyder (plaquage or).

Pour accéder à l’électronique, j’ai un peu galéré mais en faisant passer une lame super fine et en tordant légèrement le boitier, j’ai réussi à sortir (sans la casser) la pièce plastique qui sépare la pile du PCB.

Xiaomi_mi_acces_pcbXiaomi Mi accès au PCB

On retrouve de gauche à droite :

  • Le bouton poussoir et un condensateur (surement pour le découplage de l’alimentation)
  • Les connecteurs de pile
  • Le capteur de température/humidité tout à droite

Premier point assez sympa, c’est l’isolation du capteur de température/humidité. On peut s’apercevoir qu’il est isolé du circuit général (cœur) du capteur mais aussi mécaniquement, il se retrouve dans une petite chambre pour que l’air chauffé de l’électronique ne viendra pas perturber. Je trouve que c’est assez ingénieux. Beaucoup de fabricant laisse le capteur en plein milieu de l’électronique sans aucune isolation.

Xiaomi_mi_pieces_détachéesEclaté du capteur

Xiaomi_face_coeur_capteurFace arrière du capteur

C’est sur cette partie que l’on retrouve le cœur du capteur.

Analyse des composants

L’analyse n’a pas été très complexe. Le capteur utilise des composants assez connus, référencés et la simplicité du fonctionnement du capteur fait que l’on retrouve rapidement nos petits 🙂

detail_capteur_composants_face_arriere

En rouge :
C’est le microcontrôleur : Le JN5169 est un micro RISC (comme les ARM) muni d’un transceiver 2.4Ghz pour faire du Zigbee. Voici ces caractéristiques :

  • Flash : 512Ko
  • RAM : 32Ko
  • EEPROM : 4Ko
  • Périphériques : UART, SPI, I2C, ADC(10bits), PWM, Timers, Compteurs, GPIOs ….
  • Consommation : Capable de descendre à 50nA en deep sleep et 700nA en mode Sleep.

En rose :
C’est l’oscillateur du micro 32Mhz

En jaune :
Une LED bleu de signalisation

En bleu foncé :
C’est l’antenne PCB 2,4Ghz Avec son adaptation 50Ohm juste au dessus.

En fushia:
Un bouton poussoir pour agir sur les émissions radio

En bleu clair:
Le capteur de température/humidité (de dos). C’est le SHT30. Le capteur est d’une très bonne précision. Dans un précédent article j’avais testé la même marque mais un autre modèle le SHT21.

Les précisions annoncée par Xiaomi sont donc en cohérence avec les données de la datasheet du composant.

En vert :
Ce sont des « pogo pins » généralement utilisés pour la production, afin de tester et programmer le capteur à la chaîne. « Rangé » de cette manière, j’en ai déduis que c’était le port de programmation du capteur.

Maintenant que j’ai les références des composants, je suis en mesure (avec un bipper) de trouver les fonctions des différentes pattes disponibles sur le capteur. En commençant par le port de programmation.

Place, donc, au hack du capteur.

Hack du capteur

Pour procéder au hack du capteur, il faut prendre avec soi, la datasheet du microcontrôleur avec la correspondance des pattes.

Partie matérielle

jn5169_configuration_pinConfiguration des pattes du JN5169

Ce schéma résume assez bien les possibilités du microcontrôleur et décrit parfaitement les périphériques avec les fonctions associées. D’ailleurs, on peut remarquer dans le point (1) que si l’on maintient la patte DO1 à l’état bas, le capteur démarre en mode programmation sur l’UART (port série).

Comme je l’ai dit un peu plus haut, une série de « pogo pins » me semblait ressembler à un port de programmation. J’ai donc « bipper » les 6 points et voici le résultat :

pins_JN5169Pogo pins de programmation

Comme je le suspectais, cette série de pattes correspond bien à un port de programmation du microcontrôleur. J’ai donc rapidement, développé une petite carte pour pouvoir y brancher un câble USB FTDI et commencer à dialoguer avec le capteur.

hack_xiaomi_mi_uartCarte de programmation du capteur Xiaomi Mi

Ne pas oublier, la résistance de pull-down pour bien démarrer en mode de programmation par le port série.

hack_xiaomi_mi_uart_arriereArrière de la carte de programmation

Enfin la carte est prête à dialoguer avec un ordinateur. Il ne reste plus qu’à installer les logiciels pour pouvoir communiquer.

Environnement de développement

Afin de pouvoir programmer le capteur, il faut installer quelques logiciels. (Principalement, un IDE + un SDK). Voici les liens de téléchargement:

L’IDE – BeyondStudio for NXP

Le SDK – JN516x IEEE 802.15.4 SDK

Une fois installé, l’outil propose, en particulier, de lire, écrire et récolter quelques informations sur le micro.

Il ne reste plus qu’à brancher votre câble USB-FTDI sur le capteur et de lancer les actions suivantes:

Device Infos

jn5169_information_CHIPDevice info – CHIP

On récupère :

  • l’ID du micro
  • son adresse MAC
  • la version du bootloader
  • la taille de la Flash, la RAM, et l’EEPROM (surprise, la taille devait être 4ko et en faite, c’est 16ko)

jn5169__informations_OTPDevice info – OTP

OTP pour One Time Programmable correspond à un emplacement mémoire de la flash comprenant les paramétrages fixes du microcontrôleur et bien entendu, cette zone mémoire est protégée. Du coup, on ne peut lire que des « FF » sur les différentes données sensibles.

On peut, tout de même, récupérer quelques informations comme :

  • Le brownout voltage : ça correspond à la tension minimale pour maintenir le micro en fonctionnement et protéger sa mémoire.
  • Le niveau de protection
  • Le JTAG (port de programmation) désactivé
  • Une flash externe (j’en ai pas vu sur le PCB) activé sans chiffrage

Lecture des données du micro

jn5169_lecture_microLecture du micro

Voici le message quand on essaie de lire les données du micro. Erreur ! interdiction de récupérer les données de la flash, Grrrrrrrr….dû au niveau de protection. En effet, Xiaomi a protégé le JN5169 pour éviter que des petits malins puissent récupérer le binaire du soft et faire des analyses plus poussées.

Ce n’était pas du tout mon intention. Je voulais juste faire une sauvegarde du micro pour pouvoir, suite à manipulations, tout remettre à zéro et repartir avec un capteur fonctionnel. Tant pis, ça ne sera pas pour cette fois.

Écriture de la flash

jn5169_ecriture_flashFenêtre pour la programmation du capteur

Cette fenêtre vous permet de programmer votre capteur avec votre propre code. Il permet notamment d’agir sur la mémoire EEPROM et de changer l’adresse MAC de l’appareil.

Vous pouvez donc, développer votre propre algo et programmer le micro JN5169 !!!

Conclusion

On est donc capable d’écrire un programme pour utiliser le capteur à notre « propre sauce ». Avec tous les outils décris précédemment, il est normalement possible de compiler son propre programme.

Cependant, il parait compliqué (voir impossible) de faire communiquer le capteur modifié avec sa passerelle Xiaomi sans connaître la clef Zigbee du constructeur.

Malgré tout, si vous avez votre propre récepteur Zigbee, (que vous maîtrisez) ça ne doit pas poser trop de problème. Vu le prix de ce petit capteur, ça vaut le coup d’investir un peu de son temps pour détourner le produit.

L’intérêt de ce hack reste toute de même limité aux personnes ayant leur propre récepteur Zigbee et disposant d’une certaine maîtrise de ce dernier. L’objectif étant d’adapter un matériel tiers à un existant. Je reste, cependant, conscient que les personnes disposant de récepteur Zigbee « maison » ne sont pas courants.

C’est pourquoi, je pense que je vais faire de plus en plus de hack de produits existant et surtout utilisant une technologie plus répandue ou à forte valeur ajoutée (comme le bouton Dash d’Amazon). Dans tous les cas, ce travail a été super intéressant. On apprend énormément, on progresse et en plus c’est utile 😉

29 comments

  1. Excellent cet article. Très didactique, bien documenté et plus très plaisant à lire.
    Moi qui suis profane, j’ai adoré.
    Et cela m’ouvre des idées pour mes projets domotique.
    Merci pour ce partage.
    Site que je découvre et mettre en favoris.

  2. Salut,

    Bon article, content de voir enfin des capteurs temp/humid zigbee apparaitre sur le marche, et encore mieux de pouvoir les liberer! 😀

    Petite question: qu’entends-tu par « bipper »? Comment deduis-tu la role de chaque pin?

    1. Merci. Pour connaître le rôle de chaque pin, il faut la documentation du microcontrôleur JN5169 (que tu peux retrouver dans l’article) et un multimètre en mode « bip ». Une sonde sur la pin voulue et l’autre sonde sur les pins du micro. Quand ça « bip », c’est qu’elles sont reliées. Du coup, avec la datasheet, tu peux connaître sa fonction.

  3. Bonjour,
    Intéressant article, merci.
    Est-il possible (sans trop de difficultés) de déporter la sonde de température?
    Par exemple pour laisser la sonde dans un congélateur ou dans un aquarium (comme il est possible de le faire avec les sondes « Oregon chinoises »).

    1. Aujourd’hui, il n’est pas possible de remplacer la sonde du capteur(SHT3x) par une autre sonde étanche type pt1000 ou ds18b20 sans changer le firmware du capteur et rester compatible avec la gateway Xiaomi…. Mais…. Normalement, plus pour longtemps. Malgré tout et dans tous les cas ce n’est pas sans difficultés. Cependant, je ferai tout pour vulgariser la chose.

  4. Merci pour ton article très instructif !
    j’ai une petite question, comment peut-on calculer un pourcentage pour ce type de batterie CR2032 ? si j’ai un reporting de 2800mv sur une gamme donnée de 0 ~ 3300mv puis-je en déduire un pourcentage de 84.9% ou bien par exemple sous 1000mv elle ne fonctionne plus ?
    merci d’avance

    1. Bonjour, led produits Xiaomi sont donnés pour fonctionner jusqu’à 2.7v il me semble. La pile Cr2032 commence à 3v et des poussières. Jte conseille de prendre 3v… Voici la formule pour avoir ton pourcentage : ((Vrecu – Vmin) X 100) / (Vmax-Vmin).

    2. A 2800mv tu es plutôt à 33% de batterie. Heureusement que la technologie lithium est assez linéaire en décharge, sinon ma formule ne serait pas juste.

  5. Bonjour,
    Merci c’est tres interessant.
    Si on décide de réecrire entièrement notre application, ou trouver la stack Zigbee pour l’intégrer à notre application ?
    Cordialement

  6. Akila je vous remercie pour votre répons rapide.
    J’ai bcp d’expérience en BlueTooth, j’ai développé (Hard/Soft) différents équipements, mais c’est mes débuts en Zigbee.
    Voici ma problématique, je veux partir de cet article et du produit  » XIAOMI MI SMART TEMPERATURE AND HUMIDITY SENSOR » pour faire ma propre application dans l’espoir de la faire communiquer avec un PC équipé d’un dongle Zigbee du marché branché sur un PC. Est-ce réalisable ? me conseillez vous un dongle particulier ?
    Je vous remercie d’avance.
    Cordialement

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *