Sommaire

Capteur de température et d’humidité 2.1

Introduction

La solution que j’ai écrite ici 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.

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 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.

/capteur-de-temperature-et-dhumidite-2-1/img/LYWSD03MMC.webp
Xiaomi LYWSD03MMC

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 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 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 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

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.

/capteur-de-temperature-et-dhumidite-2-1/img/1.webp
Telink Flasher - Mi Bind Key

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.

/capteur-de-temperature-et-dhumidite-2-1/img/2.webp
Section de personnalisation

Pour utiliser ce firmware, télécharger le sur votre smartphone :
ATC_Thermometer.bin

Sélectionnez-le en utilisant le bouton “Choisir un fichier” de la partie Select Firmware puis cliquez sur “Start Flashing”.

/capteur-de-temperature-et-dhumidite-2-1/img/3.webp
Flashage du firmware alternatif

Une fois le flashage terminé, le capteur redémarre avec un nouveau nom. Ce dernier est de la forme ATC_<MACaddr.NIC> ou l’élément <MACaddr.NIC> représente les six derniers caractères de l’adresse MAC (partie “NIC”).

Problème rencontré

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é.

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

Update du 22/04/2022
Depuis avril 2022 (soit la version 2022.4.0 d’ESPHome), cette configuration à changer. Cette article a donc été mis à jour en conséquence ! 😉

Voici les exemples de la section sensors pour deux capteurs nouvelle génération :

Dans le cas où vous utilisez le firmware du constructeur :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
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 d’utilisation du firmware personnalisé (mon cas) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
sensor:
  - platform: atc_mithermometer
    mac_address: A4:C1:38:00:CA:FE
    temperature:
      name: "WC Température"
    humidity:
      name: "WC Humidité"
    battery_level:
      name: "WC niveau batterie"

  - platform: atc_mithermometer
    mac_address: A4:C1:38:01:CA:FE
    temperature:
      name: "SDB Température"
    humidity:
      name: "SDB Humidité"
    battery_level:
      name: "SDB niveau batterie"

Voici un exemple de configuration complète du module (avec anciens et nouveaux capteurs) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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: atc_mithermometer
    mac_address: A4:C1:38:00:CA:FE
    temperature:
      name: "WC Température"
    humidity:
      name: "WC Humidité"
    battery_level:
      name: "WC niveau batterie"

  - platform: atc_mithermometer
    mac_address: A4:C1:38:01:CA:FE
    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 dont voici un exemple de stack de deux cartes :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 :

/capteur-de-temperature-et-dhumidite-2-1/img/4.webp
Pile horizontale de deux Mini Graph Card

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 que 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.