# Capteur de température et d’humidité 2.1 ## Introduction La solution que j'ai écrite [ici](/capteur-de-temperature-et-dhumidite-2-0/) est en fonctionnement depuis plus d'un an. Les seuls soucis que j'ai pu avoir été liée à la bande des 2,4 GHz du Wi-Fi qui était saturée par moment. Cela n'est plus un soucis depuis que j'ai rapproché le pont (BT/Wi-Fi) de mon point d'accès Wi-Fi. En vue d'un fonctionnement concluant, j'ai souhaité poursuivre le déploiement de cette solution. J'ai alors vu qu'une nouvelle génération de capteur était arrivée et qu'elle est maintenant utilisable avec [ESPHome](https://esphome.io/components/sensor/xiaomi_ble.html?highlight=xiaomi). Sur ces nouveaux produits, Xiaomi a implémenté un système de clé afin de limiter l'accès aux données de ces capteurs par des logiciels tiers 😒. Bien sûr, si j'écris cet article c'est qu'il y a une solution de contournement (avec deux possibilités). Cet écrit présentera donc la méthode d'intégration du capteur de température et d'humidité [LYWSD03MMC](https://fr.gearbest.com/home-gadgets/pp_009542841338.html) qui est d'ailleurs moins chère que la génération précédente en plus petit et plus carré. *La solution de contournement nécessite l'utilisation d'un smartphone.* {{< image src="/2020/11-28-capteur-de-temperature-et-dhumidite-2-1/img/LYWSD03MMC.png" caption="Xiaomi LYWSD03MMC" title=" " >}} ## Hack du capteur ### Principe Pour pouvoir lire les données de ce capteur en dehors de l'application de Xiaomi, il faut récupérer la clé ("bind key"). Pour cela, il faut sniffer les données du capteur. Heureusement pour moi, cela a été simplifier par le gros travail d'[Aaron Christophel](https://www.youtube.com/channel/UCY0kJ-Z-811fqTddJ72w-WA) qui a créé une application Web qui permet de faire cela sans se prendre la tête. Il est aussi possible de ne pas utiliser ce système de clé et de reflasher le firmware par un qu'Aaron a fait. C'est la méthode que j'ai choisis mais je présente tous de même les deux méthodes ici (cf. [partie optionnelle](#récupération-de-la-clé-optionnelle) pour récupérer la clé). ### Récupération de l'adresse MAC Dans un premier temps, je vous recommande de récupérer l'adresse MAC du capteur. Pour cela, j'ai mis la pile (CR 2032 non fournis) et utilisé l'application [Bluetooth Mac Address Finder](https://play.google.com/store/apps/details?id=codetivelab.macfinder.bluetooth.bluetoothmacfinder) en cherchant le périphérique qui à pour nom `LYWSD03MMC`. ### Connexion à l'outil de Hack Utiliser votre téléphone pour aller sur le lien suivant : [https://atc1441.github.io/TelinkFlasher.html](https://atc1441.github.io/TelinkFlasher.html) Après avoir activé votre Bluetooth, cliquer sur "Connect" et sélectionner votre capteur dans la liste. Si la liste est trop grande, cocher la case "Hide unknown". _Pour ma part, cela n'a pas fonctionné sous le navigateur **Brave** mais sans problème sur **Chrome**._ Une fois connecté, vous devriez voir les valeurs des capteurs : > Temp/Humi: 23.06°C / 55% Tous en bas de la page, vous avez aussi les logs qui apparaisse. ### Récupération de la clé (optionnelle) En cliquant sur le bouton "Do Activation", les champs `Mi Token` et `Mi Bind Key` devrait se remplir. {{< image src="/2020/11-28-capteur-de-temperature-et-dhumidite-2-1/img/1.png" caption="Telink Flasher - Mi Bind Key" title=" " >}} Il vous suffit alors de copier la `Mi Bind Key` pour utiliser directement le capteur dans ESPHome. Vous pouvez alors passer à l'étape AAAAAAAA. ### Reflashage du capteur L'intérêt d'utiliser le firmware réalisé par Aaaron et qu'il permet de customiser certains paramètres comme si on souhaite ou non affiché la batterie sur le capteur ou encore l'intervalle d'envoie des messages. {{< image src="/2020/11-28-capteur-de-temperature-et-dhumidite-2-1/img/2.png" caption="Section de personnalisation" title=" " >}} Pour utiliser ce firmware, télécharger le sur votre smartphone : [ATC_Thermometer.bin](https://github.com/atc1441/ATC_MiThermometer/blob/master/ATC_Thermometer.bin) Sélectionnez-le en utilisant le bouton "Choisir un fichier" de la partie `Select Firmware` puis cliquez sur "Start Flashing". {{< image src="/2020/11-28-capteur-de-temperature-et-dhumidite-2-1/img/3.png" caption="Flashage du firmware alternatif" title=" " >}} Une fois le flashage terminé, le capteur redémarre avec un nouveau nom. Ce dernier est de la forme `ATC_` ou l'élément ** représente les six derniers caractères de l'adresse MAC (partie "NIC"). {{< admonition type=warning title="Problème rencontré" open=true >}} Sur les trois capteurs que j'ai reflashé, un m'a posé problème. Le pourcentage de flashage était resté bloqué sur 88% plus de 5 minutes. J'ai alors reset le capteur et j'ai réussi à me connecter dessus (avec son nouveau nom). Par contre, je n'arrivais pas à configurer les paramètres... J'ai alors re-flasher le firmware et cela est passé. {{< /admonition >}} ### Configuration du capteur Une fois que vous avez effectué la connexion avec le capteur sous son nouveau nom, on va pouvoir personnaliser les paramètres du capteur. Pour la bonne communication avec ESPHome, appuyer sur `Mi Like` dans "Advertising Type". Pour ma part, j'ai aussi désactivé l'affichage de la batterie (`Disabled`). *Pour toutes ces modifications, je vous invite à utiliser plusieurs fois les boutons car des fois les commandes ne passent pas (penser à regarder les logs).* Ainsi, déconnectez-vous du capteur afin de libérer la connexion pour l'intégration dans ESPHome et donc, *in fine*, Home Assistant. ## Intégration ESPHome Voici un exemple de la section `sensors` pour deux capteurs nouvelle génération : ```yaml sensor: - platform: xiaomi_lywsd03mmc mac_address: A4:C1:38:00:CA:FE bindkey: "75af8a55440a4569858edf14d5e6f55b" temperature: name: "WC Température" humidity: name: "WC Humidité" battery_level: name: "WC niveau batterie" - platform: xiaomi_lywsd03mmc mac_address: A4:C1:38:01:CA:FE bindkey: "5e5db9373d6a5c0aef1e91ad97921c44" temperature: name: "SDB Température" humidity: name: "SDB Humidité" battery_level: name: "SDB niveau batterie" ``` Dans le cas où vous utilisez le firmware original, la `bindkey` doit correspondre à celui de votre capteur. Dans le cas du firmware custom, n'importe quelle information du même type suffira. Ce paramètre étant obligatoire, on ne peut l'omettre dans la déclaration des capteurs (le firmware lui n'en tient pas compte). Voici un exemple de configuration complète du module (avec anciens et nouveaux capteurs) : ```yaml substitutions: esphome_name: ble_bridge esphome: name: ${esphome_name} platform: ESP32 board: esp-wrover-kit wifi: ssid: !secret wifissid password: !secret wifimdp manual_ip: static_ip: 192.168.17.92 gateway: 192.168.17.254 subnet: 255.255.255.0 logger: web_server: port: 80 api: password: !secret ${esphome_name}_api ota: password: !secret ${esphome_name}_ota # Reboot logiciel switch: - platform: restart name: "Restart ${esphome_name}" id: restart_switch # Trackeur Bluetooth esp32_ble_tracker: sensor: - platform: uptime name: Uptime ${esphome_name} - platform: xiaomi_lywsdcgq mac_address: 58:2D:34:00:CA:FE temperature: name: "Salon Temperature" humidity: name: "Salon Humidité" battery_level: name: "Salon niveau batterie" - platform: xiaomi_lywsdcgq mac_address: 58:2D:34:01:CA:FE temperature: name: "Chambre 1 Temperature" humidity: name: "Chambre 1 Humidité" battery_level: name: "Chambre 1 niveau batterie" - platform: xiaomi_lywsd03mmc mac_address: A4:C1:38:00:CA:FE bindkey: "75af8a55440a4569858edf14d5e6f55b" temperature: name: "WC Température" humidity: name: "WC Humidité" battery_level: name: "WC niveau batterie" - platform: xiaomi_lywsd03mmc mac_address: A4:C1:38:01:CA:FE bindkey: "5e5db9373d6a5c0aef1e91ad97921c44" temperature: name: "SDB Température" humidity: name: "SDB Humidité" battery_level: name: "SDB niveau batterie" ``` *Le `switch` me permet de redémarrer le module via Home Assistant en cas de problème. L'`uptime` donne l'information du temps de fonctionnement.* ## Intégration Home Assistant Mon module étant déjà sur mon instant HA, je n'ai rien eu à faire. Sinon, il faut passer par le menu d'intégration et ajouter une intégration "ESPHome". Pour un affichage sur Lovelace, j'ai fait des piles horizontales avec des [Mini Graph Card](https://github.com/kalkih/mini-graph-card) dont voici un exemple de stack de deux cartes : ```yaml type: horizontal-stack cards: - entities: - entity: sensor.sdb_temperature index: 0 name: Température - entity: sensor.sdb_humidite index: 1 name: Humidité name: SdB animate: true type: 'custom:mini-graph-card' - entities: - entity: sensor.wc_temperature index: 0 name: Température - entity: sensor.wc_humidite index: 1 name: Humidité name: WC animate: true type: 'custom:mini-graph-card' ``` Dont voici le résultat : {{< image src="/2020/11-28-capteur-de-temperature-et-dhumidite-2-1/img/4.png" caption="Pile horizontale de deux Mini Graph Card" title=" " >}} ## Conclusion Plus d'un an plus tard, j'ai pu poursuivre sur ma solution existante avec l'avantage d'avoir pu prendre des capteurs moins chers. Je ne sais pas combien de temps tiendront les piles, on verra bien... *Ceux de l'ancienne génération ont tenus environ un ans.* J'ai maintenant cinq capteurs de température et d'humidité avec affichage digital chez moi , le tout connecté au même NodeMCU ESP32. Depuis qui j'ai ajouté les derniers (~4 jours), je n'ai pas constaté de problème. J'alimenterais cet article si je rencontre des problèmes.