Récupérer la température, l'hygrométrie et le niveau de batterie de ses thermomètres Switch-Bot avec ESPHome

Hello,

Je possède six thermomètres de la marque Switch-Bot que j’ai placé un peu partout dans ma maison.

Ayant refilé mon hub mini, j’ai donc cherché comment les intégrer à Home-Assistant, et sans le cloud.

Ces thermomètres fonctionne en Bluetooth low energie.
Avec ESPHome, il est donc possible de scanner les périphériques bluetooth et de récupérer les information en fonction de leur adresse mac.

Prérequis

  • Un ESP32, la config que je propose est pour un ESP32 AZDelivery
  • Avoir installé l’application Switch-Bot, créé son compte et ajouté les thermomètres à intégrer
  • Savoir comment charger son firmware basé sur ESPHome, ce tuto ne traite que de la configuration pour ce qui est de la partie ESPHome. Dans le cas du modèle que j’utilise, s’agissant d’un ESP32 devkit le port micro-USB permet de se passer d’un convertisseur série-USB vu qu’il permet de le flasher, simplement rester appuyé quelques secondes sur le bouton boot au moment de comencer l’upload du firmware
  • Savoir intégrer ESPHome dans Home-Assistant, qui découvrira l’appareil de lui-même et vous guidera pour l’ajouter

Récupération des adresses MAC

  1. Dans l’interface principale de l’application Switch-Bot, toucher le thermomètre
  2. Aller dans Paramètres, puis Info
  3. Noter la « BLE MAC »
  4. Répéter bien sûr pour tous les thermomètres à intégrer.

Configuration ESPHome

Je ne l’ai pa inventée, mon moteur de recherche m’a miraculeusement apporté cet article qui n’est vraiment pas en français avec la configuration qui suit.

esphome:
  name: "Meters Hub"
  platform: ESP32
  # Le reste est à adapter en fonction de votre ESP32
  board: esp32dev
  platformio_options: 
    platform: espressif32
    board: az-delivery-devkit-v4
    board_build.mcu: esp32
    board_build.f_cpu: 240000000L

logger:
  baud_rate: 0   # disable logging via UART, help to avoid numerous crash with ESP_LOGD
  level: NONE

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_key
  ap:
    password: !secret ap_key

captive_portal:

# API Home Assistant
api:
  password: !secret api_pass

ota:
  password: !secret ota_pass

sensor:
  - platform: template
    name: "Hygromètre Bureau"
    id: hygrometre_bureau
    unit_of_measurement: '%'
    accuracy_decimals: 0
    device_class: humidity
    icon: "mdi:water-percent"
  - platform: template
    name: "Thermomètre Bureau"
    id: thermometre_bureau
    unit_of_measurement: '°C'
    device_class: temperature
    accuracy_decimals: 1
    icon: "mdi:thermometer"
  - platform: template
    name: "RSSI Thermomètre Bureau"
    id: rssi_thermometre_bureau
    unit_of_measurement: 'dB'
    device_class: signal_strength
    accuracy_decimals: 0
    icon: "mdi:bluetooth"
  - platform: template
    name: "Batterie Thermomètre Bureau"
    id: batterie_thermometre_bureau
    unit_of_measurement: '%'
    device_class: battery
    accuracy_decimals: 0
    icon: "mdi:battery"
esp32_ble_tracker:
  on_ble_advertise:
    - mac_address: xx:xx:xx:xx:xx:xx # L'adresse MAC du thermomètre, mettre les lettres en minuscule
      then:
        - lambda: |-
            for (auto data : x.get_service_datas()) {
                if(data.data.size() == 6) {
                  float temperature = (float)(data.data[4] & 0b01111111) + ((float)(data.data[3] & 0b00001111) / 10);
                  if (!(data.data[4] & 0b10000000)) {
                    temperature = -temperature;
                  }
                  int8_t humidity= data.data[5] & 0b01111111;
                  int8_t battery = data.data[2] & 0b01111111;
                  int8_t rssi=x.get_rssi();
                  id(hygrometre_bureau).publish_state(humidity);
                  id(thermometre_bureau).publish_state(temperature);
                  id(rssi_thermometre_bureau).publish_state(rssi);
                  id(batterie_thermometre_bureau).publish_state(battery);
                }
            }

Récapitulatif

On retrouve donc quatre entités par thermomètres :

  • L’hygrométrie
  • La température
  • La force du signal bluetooth
  • Le niveau de baterie

Il ne reste plus qu’à placer chaque entité dans la bonne pièce, sinon il faudra un ESP par thermomètre ce qui est de suite moins rentable :slight_smile:

Conclusion

Avec cette configuration, on a donc une mise à jour fréquente de ses thermomètres Switch-Bot.
Pour ma part, j’arrive à récupérer les informations des six thermomètres don trois en étage et malgré un mur épais à passer pour un des thermomètres, grâce aux performances du matériel et du BLE lui-même.

3 « J'aime »

Bonjour,
Avec le recul, peut tu me dire si les temp. relevées sont fiable ? et qui de la durée des piles ?

Merci d’avance pour tes reponses.

Les températures sont fiables, ce que j’avais déjà constaté quand je l’utilisais avec leur Hub mini. J’ai pris pour référence mon Nest Thermostat E.

Quant à la batterie : ça fait plus d’un an pour ne pas dire deux que je les ai et ça commence à avoisiner les 75%. Autant dire que l’autonomie est excellente.
Et utiliser ESPHome au lieu du Hub ne doit rien changer étant donné que l’ESP32 ne fait que scanner et récupérer les informations quand le thermomètre s’annonce.

Y’a t’il une différence d’utiliser le Bluetooth du raspberry pi plutôt que l’esp32 ou ça revient au même ?

En tout cas merci pour le tuto !

J’ai remarqué de meilleures performances avec un ESP, avec un Raspberry Pi je n’arrivais pas à avoir toutes les températures de mes thermomètres.

Et dans le cas de ESPHome en tout cas, il a l’avantage de scanner en permanence donc de récupérer les températures au moment où chaque thermomètre s’annonce.

avec l’esp home, y’a t’il le soucis que les capteurs communiquent toutes les 10 minutes (ou plus) ?

Je ne suis pas sûr de comprendre ce que tu veux dire… En tout cas les mise à jour de température ne me semblent pas longues.

oui je parle bien des Maj de température, je voudrais utiliser ces capteurs pour la gestion du chauffage

OK. Je ne les utilise pas dans ce cadre-là mais ils sont assez réputés pour leur fiabilité et la communication se fait bien assez souvent côté ESPHome qui scan en permanence.

1 « J'aime »

bonjour
je détère un peu le sujet mais j’ai une petite question : as tu 1 seul ESP32 pour récupérer les infos de tes 6 thermometres ? ou plusieurs ESP ?

Merci

J’ai commencé avec un seul pour les six, ça fonctionnait bien mais j’ai fini par répartir pour être sûr d’avoir un bon signal partout, ce qui n’est en fait pas si utile que ça si tu arrives à avoir un signal raisonnable donc aux alentours de -70dBm dans le pire des cas.

La seule différence si le signal est plus aux alentours de -80 dBm c’est que la température sera probablement moins souvent mise à jour.

Là où c’est vraiment important c’est pour des appareils à connexions actives comme les bots par exemple, pour les meters ça dépend à quel point il est important que la valeur soit la plus actualisée possible.

Après, si on parle du présent, dans la pratique je n’utilise plus cette solution mais des proxies bluetooth avec l’intégration native de Home Assistant.
Cependant les instructions restent utilisables :slight_smile:

super merci
en phase, dans une maison le bluetooth ne passe pas très bien partout :wink:
du coup sur le présent, tu utilises le bluetooth de HA ?

J’utilise le bluetooth de Ha mais avec un ESP32 en complément qui fait office de proxy Bluetooth, en claire il scan et renvoie ce qu’il trouve à HA directement sans traitement côté ESP, exactement comme s’il s’agissait d’une clé Bluetooth.
ça gère même les connexions actives, pour les bots par exemple.

Plus d’info :

1 « J'aime »