Refonte du projet de capteur de température et d’humidité en utilisant des capteurs Xiaomi Mijia Bluetooth. Les données sont récupérées via un pont d’écoute Bluetooth à base d’un ESP32.
Dans la première version, j’utilisais un Weemos D1 Mini avec un capteur DHT22. Cette solution reste correcte, mais comporte les problèmes suivants :
- Chaque capteur nécessite une alimentation 5V
Ce que limitent les possibilités de placement du capteur - Pas d’affichage
Les données sont consultables uniquement via HA ou l’interface Web - Le WAF
Le DIY a ses limites…
J’ai trouvé une meilleure solution sur YouTube et c’est donc celle-ci que je vous partage.
Principe
Les capteurs Xiaomi Mijia sont des capteurs qui fonctionnent en Bluetooth : ils envoient en broadcast leurs informations à intervalle régulier. Ce capteur possède un écran et fonctionne grâce à une pile LR03 (AAA).
Pour récupérer ces informations, on va fabriquer un pont qui d’une part, récupère les trames Bluetooth de broadcast, et d’autre part, les retransmet en IP sur notre LAN (pour les avoir sur Home Assistant !).
Je réalise cela grâce à l’ESP32 (Wi-Fi & Bluetooth) d’un NodeMCU (n’importe quelle autre carte de développement avec un ESP32 fera l’affaire) que je vais flasher avec ESPHome.
Installation
L’installation se fait en deux parties. Dans la première, on va faire le nécessaire pour récupérer les adresses MAC Bluetooth des capteurs. Ensuite, on pourra donc spécifier à notre pont quelles informations prendre en compte pour la transmission sur notre serveur domotique.
Configuration du pont
Vous trouverez ci-dessous la configuration (à ce stade) de mon pont Bluetooth, adaptez-le à votre configuration.
esphome:
name: nodemcu32_1
platform: ESP32
board: esp-wrover-kit
wifi:
ssid: !secret secret_wifissid
password: !secret secret_wifimdp
manual_ip:
static_ip: 192.168.15.252
gateway: 192.168.15.254
subnet: 255.255.255.0
# Enable logging
logger:
# Serveur Web
web_server:
port: 80
# Enable Home Assistant API
api:
password: !secret secret_nodemcu32_1
ota:
password: !secret secret_nodemcu32_1
# Trackeur Bluetooth
esp32_ble_tracker:
scan_interval: 300s
Ayant déjà détaillé l’utilisation d’ESPHome sur mon article d’introduction à l’IoT, je ne m’attarde pas sur la procédure de première compilation.
Vous remarquez qu’ici, je mets une adresse statique. Je fais cela par principe (car je considère un pont comme un serveur) et aussi pour que la (re)connexion Wi-Fi soit plus rapide en cas de problème sur le sans-fil.
Récupération des adresses MAC BT
On peut alors consulter les logs du pont (sous ESPHome (“SHOW LOGS”) ou sur son interface Web). On devrait alors récupérer les informations comme ici (à condition d’avoir mis une pile dans le capteur ! ヽ(ヅ)ノ) :
Notez donc l’adresse MAC et répétez l’opération pour tous vos capteurs. Si vous ne voyez rien dans les logs vous pouvez forcer l’envoi des trames en appuyant sur le bouton derrière le capteur.
Configuration finale du pont
On ajoute donc le contenu suivant (exemple pour deux capteurs) en éditant la configuration du NodeMCU sur ESPHome (en l’adaptant bien sûr) :
sensor:
- platform: xiaomi_lywsdcgq
mac_address: 58:2D:34:AA:CA:FE
temperature:
name: "Salon Température"
humidity:
name: "Salon Humidité"
battery_level:
name: "Salon niveau batterie"
- platform: xiaomi_lywsdcgq
mac_address: 58:2D:34:AB:CA:FE
temperature:
name: "Chambre Température"
humidity:
name: "Chambre Humidité"
battery_level:
name: "Chambre niveau batterie"
Intégration à Home Assistant
L’intégration se fait, comme pour tous les modules, dans le menu “Intégration”. Une fois cela fait, on peut ajouter les sensors sur Lovelace :
Commentaires
Ce pont peut-être en plus pour d’autre projet. D’ailleurs, si vous avez déjà des ESP32 connectés chez vous, vous pouvez simplement juste ajouter le nécessaire pour qu’ils fassent pont Bluetooth.
L’utilisation du pont ne décharge pas plus rapidement les piles des capteurs. En effet, le pont ne fait qu’écouter ce qui se trame (joli jeu de mots).
L’auteur du tutoriel que j’ai suivi a mis en place un reboot du pont tous les jours (à 4h) car il a eu des problèmes (surement dû à des bugs sur le driver Bluetooth). Voici le code à mettre si vous en avez la nécessité :
# On récupère l'heure depuis Home Assistant
time:
- platform: homeassistant
on_time:
- seconds: 0
minutes: 0
hours: 4
days_of_week: MON-SUN
then:
- switch.toggle: restart_switch
switch:
- platform: restart
name: "test_temperature Restart"
id: restart_switch
Bonus : trackeur Bluetooth
En même temps que l’achat de ces éléments, j’ai aussi pris un petit trackeur BLE (Bluetooth Low Energy), le NUT F6.
La configuration sur le pont :
binary_sensor:
- platform: ble_presence
mac_address: FB:61:2E:00:CA:FE
name: "Anup BLE Tracker"
Ce qui donne le résultat suivant sur HA :
Quand mon trackeur n’est plus visible par le pont, la valeur passe sur “Off”.