J’ajoute des capteurs de nouvelle génération a mon système existant.
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.
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.
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.
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”.
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”).
Avertissement
Problème rencontré
Sur les trois capteurs que j’ai re-flashé, 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
Remarque
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 :
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) :
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) :
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 :
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 :
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.