Capteur de température et d’humidité 2.0

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.

Schéma de principe

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 ! ヽ(ヅ)ノ) :

Extrait des logs du pont

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 :

Carte d’entités

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 :

État capteur de présence Bluetooth

Quand mon trackeur n’est plus visible par le pont, la valeur passe sur “Off”.

Licensed under CC BY-NC-SA 4.0
Dernière mise à jour le 2020-05-20 00:00:00
Généré avec Hugo
Thème Stack conçu par Jimmy