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 :

Click to rate this post!
[Total: 132 Average: 2.7]

 

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 😉

65 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

  7. Bonjour. Merci pour ce partage d’informations. Je désire contrôler la température de mon congélateur.
    Est-il possible :
    – de déporter la sonde actuelle dans le congelateur (en gros la dessouder et prolonger la liaison) ?
    – ou peut-être plus simplement de faire sortir l’antenne en dehoirs du congelateur ?
    Pour cette denrirèe solution, gratter la partie antenne du pcb, et souder un bout de cuivre dessus, fil de cuivre sortant du congalateur surffirait-il ?

    Cordialement

    1. Bonjour,
      Très compliqué (pas faisable) de déporter la sonde.
      Pareil pour l’antenne, infaisable (c’est une antenne PCB sans option pour antenne externe. Le fonctionnement des antennes nécessite une minutie particulière.
      D’ailleurs je ne suis pas sur que le capteur remonte des valeurs négative et si c’est le cas, la meilleure solution serait de mettre le capteur entier dans le congélo mais la vie de la batterie et la portée serait divisée par deux.
      Conclusion, pas super solution 🙂

      1. Bonjour,
        J’ai mis la sonde direct dans une boite hermetique et au congelo.
        Depuis 10 mois, pas changé la pile. Qques pertes de liaisons, mais résolu depuis que j’ai mis une prise xiaomi a proximité (elle a l’air de bien faire repetiteur zigbee). Enfin les données inférieures à -20 ne sont pas remontées, mais mes alertes temp. > -17 et -15 fonctionnent parfaitement.
        Salutations,

      2. Re Bonjour,
        Je n’ai pas encore procédé au demontage, mais n’est-il pas possible de couper la sonde avec son support (puisque bien indépendante du reste) et resouder des connexions ? trop nombreuses ?
        Je suis d’accord pas très propre comme solution, mais … ça permettrait quand même de nombreuses applications.
        Encore Merci, pour ces différents articles.

  8. Cool article.
    I actually wanted to identify the sensor part number used in this device. And you revealed it. Thanks!
    I was unable to find sensor model and Xiaomi does not publish it. While it is critically important to know it to understand the level of accuracy of the device.
    What about to make the similar article regarding new ‘Xiaomi Mi Bluetooth Temperature & Humidity Meter’?
    I’m also very interested in new meter sensor model and its characteristics.
    Thanks.

  9. Bonjour,
    Comme vous avez l’air de bien toucher en électronique, j’ai une petite question, parce que moi…
    Est-il possible de remplacer le capteur de température actuel par un de type DS18B20 ?
    Mon idée est de remplacer le capteur intégré dans les capteurs de température sans fils pour piscine, vendus pour 20€ sur aliexpress ou autres, et récupérer comme ça l’info, comme je le fait avec mes autres capteurs Xiaomi dans ma domotique.
    Merci

    1. Bonjour,
      Je chercher à faire la même chose que vous, avez vous trouver une solution pour récupérer la température de l’eau ?
      Pour par part je cherche à avoir une remontée d’info sur MiHome et pouvoir piloter le PAC + pompe + Pompe massage a partir de relais Aqara deux voies. (Un montage arduino va récupérer les commande bouton utilisation + les états de relais aqara pour piloter les pompes)

  10. Bonjour,
    Bravo pour votre article.
    Connaissez-vous un moyen de récupérer l’historique des données de température et humidité sur le cloud Xiaomi ? Je souhaite obtenir les données au format d’un tableur par exemple. Je ne vois pas de répertoire dans le cloud, je ne vois pas de fonction d’exportation dans l’application androïd.
    Merci par avance.

  11. Bonjour et félicitations pour cet article .
    J’ai acheté sur geai best des camera xiaofang qui sont bridées car soi disant réservées au marché chinois .
    A priori la distinction entre le marché européen ,chinois ou autre se fait par l’adresse mac .
    Est il possible de reprogrammer l’adresse mac de ces cameras avec ce même procédé ?
    Bien cordialement .

  12. Super boulot, on voit que tu maitrise le sujet.

    J’aimerais dépoter le capteur de température pour le plonger dans un aquarium (car le capteur d’origine est pas étanche)

    C’est possible tu penses ?

  13. merci pour ce hack
    moi j’ai brické mon routeur xiaomi (3g) saurais tu si il est possible de le reflasher via un adapteur usb/serie?
    merci

  14. Bonjour et merci pour ce test !! Je me questionne sur une valeur, selon ta datasheet, un sht30 a une plage entre 0 et 65 °C alors que Xiaomi le donne entre -20 et 60°C. Aucun modèle de type sht n’a cet interval. Qu’en dites-vous?
    J’ai moi même constaté ce matin que ma sonde donnait une température de 1.2°C dehors (et à l’abri bien-sur) alors que ma voiture me donnait -2°C.

    1. Bonjour Romain, les données inférieures à -20 ne sont pas remontées, mais mes alertes temp. > -17 et -15 fonctionnent parfaitement (cf plus haut, mes msg du 17-01-18)
      Salutations,

  15. Je n’arrive pas à ouvrir ces capteurs (des v2, carrés), j’ai essayé sur plusieurs, avec une pièce ou un tournevis, im-po-ssi-ble de dévisser le couvercle, c’est systématiquement bloqué et le plastique étant extrêment tendre, il se déforme très vite (d’où une fente de dévissage qui devient vite impossible à ouvrir).

    Une idée / astuce ?
    Apparemment je suis le seul à avoir ce pb, mais je ne comprends vraiment pas comment vous faites tous (çà a l’air d’être un non-sujet, j’ai juste vu une vidéo ou sur un senseur v1, sur un opening, le type l’ouvre sans pbs avec une pièce … çà me paraît surréaliste vu la difficulté à ouvrir les miens … ou alors c’est un changement entre les v1 et les v2)

    1. Encore un boitier avec une pile à changer, encore un boitier que je n’arrive pas à ouvrir sans tout pêter … je vais finir par les balancer à la corbeille directement et chercher une autre solution à ces devices, c’est vraiment du jetable de mauvaise qualité.

  16. Bonjour,

    Je viens de découvrir le forum par hasard, j’adore ce que vous faites et surtout les détails et explications de vos hacks. Je garde le lien en favoris 😉

    Cordialement,

  17. Bonjour,

    J’aimerais savoir s’il est possible de déporter le capteur d’humidité et de température « au bout d’un fil » ? l’idée est de pouvoir monitorer la température d’un terrarium pour pouvoir déclencher ou non un tapis chauffant.
    Ce genre de système coûte une blinde en animalerie, alors qu’une prise Ikea + Zigate + Capteur Xiaomi c’est imbattable.
    Par contre autant jeedom je suis assez à l’aise, mais la manipulation électronique je suis moins à l’aise.
    Bref, ça vous parait possible ? 🙂

  18. Bonjour, votre article est toujours d’actualité, après je ne sais pas si vous répondez encore aux commentaires, on va essayer:
    Est ce que vous pensez qu’on peut, avec un fil de cuivre collé au capteur (la soudure ça le faire griller je pense), déporter la prise de température de quelques mm ?

    Je voudrais surveiller mes chauffages à différent points pour connaître la température de l’eau dans les tuyaux… je soude un cuivre sur le tuyau l’autre collé sur le capteur…?

    Sinon, juste le boitier posé au plus près du tuyau donne une bonne indication…

    Merci de vos lumières !

    1. Le SHT30 peut en effet être déporté même plus que quelques mm, personnellement je travaille plutôt avec du filaire et des DS18B20 que j’ai scotché autour des tuyaux de chauffage sans oublier d’y mettre une grosse goutte de pâte thermique pour mieux conduire la chaleur.

      1. Sinon pour se prendre un poil moi la tête, il suffirait d’acheter un PCB avec SHT30 déjà soudé sur un PCB avec 4 pins de taille « standard » plus confortables à souder et installer coté tuyauterie, ça vaut moins de 2€, une recherche sur « SHT30 » et voilà, attention au modèle de PCB certains ont des résistances/condos déjà soudés alors que d’autres on juste le SHT30 et c’est ce modèle qu’il faudrait car les resistances/condos sont déjà sur le PCB Xiaomi.

  19. Bonjour et merci pour ce hack.
    serait- il possible de souder une sonde de température déportée ?
    ex pour checker la température d’une piscine

    Merci d’avance
    Michel

  20. Il va en avoir marre de toujours répondre à la même question…. ben non. Fais juste l’essai de suivre les piste du composant, même à la loupe c’est trop galère.
    Depuis plusieurs jours, j’ai modifier un thermomètre chinois en 433mhz (les blanc avec le couvercle bleu et l’antenne rouge) qui était mort en quelques mois et qui franchement était pourri en portée, j’ai mis dedans un wemos D1 et un ds18b20, 4 piles rechargeables, esp easy + deep sleep, et hop envoie sur jeedom. Après faut bien tout étanchéifier

  21. Bonjour,

    est-il possible d’utiliser ces capteurs sur un réseau privé uniquement, ou faut-il que les capteurs se connectent à Internet et envoient systématiquement les données chez Xiaomi ?

    Merci

  22. Bonjour,

    Il est pas mal ce hack, très instructif.
    Par contre les modules Zigbee de Xiaomi sont compatibles avec les autres systèmes Zigbee. Philips (Osram), Ikea, et même Phoscon + Conbee II. J’utilise ce dernier pour mes modules Xiaomi depuis quelques temps. Le tout connecté via Jeedom.

    Du coup si c’est pour échapper à l’écosystème Cloud Xiaomi cela fonctionne sans hack.
    Après c’est le plaisir du hack qui compte 😉

    La clé Conbee fonctionne aussi avec d’autres systèmes Zigbee.

  23. Salut.
    J’essaie de lire un xiaomi ma température.
    Avec le module bluetooth HM-10.
    Est-ce que quelqu’un connaît une voix arduino pour le faire?
    Je veux prendre la température et l’humidité.

  24. Il est possible de changer le capteur SHT30. iL y a des version déporté filaire du capteur, à souder sur les TP de la carte et couper le capteur d’origine du pcb. On trouve le pinout sur le net. Ca marche bien.
    Mais xiaomi marche mal, le zigbee se deconnecte souvent. Pour monitorer mon sol des jardinieres, c’est pas l’ideal. Peut etre flasher un firmware custom pourra resoudre le probleme!!

Leave a Reply

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.