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
- Dans l’interface principale de l’application Switch-Bot, toucher le thermomètre
- Aller dans Paramètres, puis Info
- Noter la « BLE MAC »
- 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
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.