Sommaire
Introduction
Si vous avez pas mal de plantes à la maison, Xiaomi propose un capteur de sol très abordable : le MIFlower Care. Malheureusement, le capteur est Bluetooth Low Energy (BLE), et l'intégration n'est pas immédiate. Nous vous présentons comment intégrer ce capteur à Home Assistant à l'aide d'un ESP32 qui fera passerelle Bluetooth.
Matériel nécessaire
Les capteurs
Tout d ’abord, il vous faut des capteurs pour mesurer l’humidité, la lumière, les engrais nécessaires à vos plantes.
Les capteurs Xiaomi Mi Flower Care sont fait pour ça, le grand modèle fonctionne sur batterie, le petit sur pile.
Voici les liens où on peut en trouver chez TechPunt :


Voilà le matériel :

Le proxy Bluetooth
Le proxy Bluetooth permet le dialogue entre les capteurs Xiaomi Mi Flower Care et Home-Assistant.
En effet, si vous ne faites pas tourner HA sur un NUC ou un PC équipé du Bluetooth, une passerelle Bluetooth est indispensable.
Il est conseillé d’utiliser un ESP32 comme proxy Bluetooth. Pour cela, le module ESP32 suivant fait parfaitement l’affaire :

Carte ESP32 sur AliExpress
Pour ce module, il n’y a pas de boîtier, mais si vous avez une imprimante 3D, ce modèle à imprimer fait tout à fait l’affaire :

Boitier ESP32 à imprimer sur Thingiverse
Voilà ce que ça donne :


Pour ceux qui ne disposent pas d’une imprimante 3D, le module ATOM Lite ESP32 peut tout aussi bien convenir.

Carte ATOM Lite ESP32 sur M5STACK
Une plante
Un citronnier et quelques autres plantes feront l'affaire.

ESP Home - Bluetooth Proxy sur un ESP32
Installer ESP Home Builder
Pour ceux qui sont sous HA OS (VM ou NUC), sous Home Assistant, allez dans Paramètres / Modules complémentaires et installer ESPHome Device Builder.
Pour ceux qui sont sous HA container (docker), vous devrez installer ESPHome dans un nouveau conteneur.
Pour cette étape, vous pouvez aller voir ce tutoriel qui est très bien réalisé :

Création de l’appareil
Cliquez sur + NEW DEVICE

Une fenêtre s’affiche : appuyez sur CONTINUE.

Puis, vous êtes invité à entrer le nom de l’appareil.
Pour ce tutoriel, on choisit Mi Flower 1. Plus tard, un autre ESP32 pourrait être ajouté avec un nom Mi Flower 2 permettant de les identifier mais vous pouvez mettre ce que vous voulez.

Puis cliquez sur Next.
Vous êtes invité à sélectionner votre type d'ESP, dans notre cas, ESP32 est choisi, mais cela dépend du type d'ESP que vous avez en votre possession.

Une fois l’ESP32 choisi, vous avez ce message :

Choisissez SKIP car on va faire la configuration manuellement. Si vous cliquez maintenant sur INSTALL l’ESP32 ne sera pas correctement configuré. Vous verrez un appareil qui n’aura pas le bon nom et certainement pas en proxy Bluetooth. C’est une erreur facile lorsque l’on débute et je l’avais faite la première fois.
Une fois le bouton SKIP appuyé, on a désormais un nouveau appareil nommé Mi Flower 1.
Configuration de l'appareil
Il faut maintenant éditer le fichier de configuration de cet appareil en cliquant sur EDIT.

Il est possible d'éditer le fichier yaml, Ce fichier de configuration, en yaml, va déterminer les comportement et la configuration (Wifi notamment mais cela a déjà été réalisé dans une étape précédente) de l’ESP32.
Edition du fichier yaml mi-flower-1.yaml
esphome:
name: mi-flower-1
friendly_name: Mi Flower 1
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "iP2S48aci2xFggyC6JaOzCvX0n2FuuHyQKhr64Cp3jY="
ota:
- platform: esphome
password: "74721810d8d8618c7247cb694cf61641"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Mi-Flower-1 Fallback Hotspot"
password: "UoJPZ6VIExvW"
captive_portal:
Pour activer le Bluetooth proxy, il faut ajouter les lignes suivantes :
# Activate Bluetooth proxy
esp32_ble_tracker:
scan_parameters:
interval: 1100ms
window: 1100ms
active: true
bluetooth_proxy:
active: true
Il est possible d’ajouter les lignes ci-dessous pour ajouter des capteurs comme la qualité du signal Wifi, la température de l’ESP32, etc.
Pour l’aide sur le contenu de ce fichier, voir ESPHome - Bluetooth.
Configuration : ajouter d’autres éléments à remonter via ce capteur :
#
# Manually configuration
#
sensor:
# Qualité du signal
- platform: wifi_signal
name: "WiFi Signal dB"
id: wifi_signal_db
update_interval: 60s
internal: true
- platform: copy
source_id: wifi_signal_db
name: WiFi Signal
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "%"
entity_category: "diagnostic"
device_class: ""
# Temps de fonctionnement
- platform: uptime
id: uptime_sec
update_interval: 60s
internal: true
# Température interne de fonctionnement
- platform: internal_temperature
name: "Internal Temperature"
entity_category: "diagnostic"
# Bouton de redémarrage
switch:
- platform: restart
name: Redémarrage
entity_category: "diagnostic"
binary_sensor:
- platform: status
name: Statut
entity_category: "diagnostic"
- platform: gpio
pin:
number: 39
inverted: true
name: Button
# Transformation de la durée d'utilisation en texte
text_sensor:
- platform: template
id: lite_uptime
name: "Allumé depuis"
lambda: |-
int seconds = (id(uptime_sec).state);
int days = seconds / (24 * 3600);
seconds = seconds % (24 * 3600);
int hours = seconds / 3600;
seconds = seconds % 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
if ( days > 3650 ) {
return { "Démarrage" };
} else if ( days ) {
return { (to_string(days) +"d " + to_string(hours) +"h " + to_string(minutes) +"m "+ to_string(seconds) +"s ").c_str() };
} else if ( hours ) {
return { (to_string(hours) +"h " + to_string(minutes) +"m "+ to_string(seconds) +"s ").c_str() };
} else if ( minutes ) {
return { (to_string(minutes) +"m "+ to_string(seconds) +"s ").c_str() };
} else {
return { (to_string(seconds) +"s ").c_str() };
}
icon: mdi:clock-start
update_interval: 60s
entity_category: "diagnostic"Appuyez sur SAVE pour enregistrer vos modifications :

Compilation du programme pour l’ESP-32
la compilation puis le flashage peut se réaliser en une seule étape, toutefois je détaille ici toutes les étapes a des fins pédagogiques.
Il est temps de brancher votre ESP32 sur le port USB de votre ordinateur.
- Cliquer sur INSTALL.
- Choisir Manual Download

- La compilation commence :


- Une fois la compilation terminée, on obtient :

- Choisir Factory format (Previously Modern) et sauvegarder le fichier bin. ATTENTION : Google Chrome peut parfois bloquer le téléchargement de ce fichier, vérifier qu’il n’est pas bloqué par la sécurité du navigateur.
- Cliquer sur CLOSE

Flash de l'appareil
Fermer toutes les fenêtres et revenir à l’écran d’accueil ESPHome.
Cliquer sur les trois petits points et choisir Install (vous pouvez aussi utiliser Validate précédemment pour valider le fichier yaml que vous avez modifié).

Ceci ouvre la fenêtre suivante, choisir Plug into this computer :

Ça prend un peu de temps.

Cliquez sur Open ESPHome Web, cela ouvre un nouvel onglet.

Cliquer sur CONNECT :

Choisir le port et cliquer sur Connexion. On se retrouve sur cette page :

Cliquer sur INSTALL

Cliquez sur le bouton Choisir un fichier et télécharger le fichier bin sauvegardé précédemment.

Appuyer sur INSTALL, vous allez voir les messages suivants : Connecting / Erasing / Installing / Configuration installed!



Appuyer sur CLOSE. Retour sur la page précédente :

PREPARE FOR FIRST USE n’est pas utile, il va vous flasher un firmware de base qui ne correspond pas au vôtre et vous allez vous retrouver avec deux devices :
Vous ne devez pas avoir ça :

Test : appuyez sur "…" pour configurer le Wifi.

Appuyez sur Configure Wi-Fi : en fait, vous devriez avoir ce message d’erreur :

Pour vérifier que tout se passe bien, connectez vous au port USB et appuyez sur LOGS, vous verrez si votre ESP démarre correctement ou pas.


On peut remarquer que lors du test, l'ESP met du temps à se connecter au wifi.
Ouvrez une console DOS (ou autre sur d’autres systèmes) et tentez de faire un ping sur l’ip de l’ESP, normalement il doit répondre. Dans cet exemple, il y a des pertes de trames.
Envoi d’une requête 'Ping' 192.168.0.71 avec 32 octets de données :
Délai d’attente de la demande dépassé.
Réponse de 192.168.0.71 : octets=32 temps=2321 ms TTL=255
Réponse de 192.168.0.71 : octets=32 temps=63 ms TTL=255
Réponse de 192.168.0.71 : octets=32 temps=1144 ms TTL=255
Statistiques Ping pour 192.168.0.71:
Paquets : envoyés = 4, reçus = 3, perdus = 1 (perte 25%),
Durée approximative des boucles en millisecondes :
Minimum = 63ms, Maximum = 2321ms, Moyenne = 1176msVous pouvez soit définir l’adresse IP de chaque ESP dans son fichier de configuration (IP fixe) ou faire un bail permanent dans votre serveur DHCP afin d’éviter qu’ils ne se « baladent » sur votre réseau local.
Voilà, l'appareil est flashé, vous devriez pouvoir le mettre à jour en OTA (Over The Air) sans plus avoir besoin de le laisser brancher sur l’ordinateur.
Ajouter l'intégration ESP Home - Bluetooth Proxy
Normalement à cette étape, il devrait y avoir une notification automatique dans HA pour l’ajouter automatiquement. Toutefois si cela ne se produit pas, vous pouvez le faire manuellement en suivant les étapes suivantes.
Ajouter ESPHOME
Pour que cet Esp32 puisse remonter les données des capteurs, Il faut ajouter son intégration. Pour ce faire, aller dans Paramètres / Appareils et services, onglet Intégrations : cliquer en bas à droite sur le bouton AJOUTER UNE INTÉGRATION.et choisir ESPHome.

Ajouter le nœud ESP Home
Aller dans Paramètres / Appareils et services :

Dans intégrations, vous devriez voir votre device :

Cliquez sur AJOUTER : Home Assistant va vous demander de l’ajouter, validez.

Si c’est un échec :

Si vous avez cette fenêtre, redémarrez votre ESP (ou le bouton de gauche (RESET)) et examinez les logs.
Lors de ce test, le wifi est un poil loin du PC, la connexion n’est pas optimale.
Après avoir déplacé l’ESP32, un nouvel essai est effectué.
Si c’est un succès :

Et voici l’appareil :

Visualisation des entités
On peut désormais voir les entités que l’on avait configurées dans le yaml :

Installer Xiaomi BLE
Ajouter dans Home Assistant le Xiaomi BLE
Il faut désormais installer le Bluetooth Xiaomi, il faut aller sur la page : Xiaomi BLE
Cliquez sur :

Une petite question :

Et là, ce lien ouvre Home Assistant, demande de valider.
Découverte des capteurs dans Home Assistant :
Grand moment, il me trouve mes capteurs Xaomi Flower Care (un grand et un petit pour le moment).

Choisir le premier, celui-ci va être ajouté l’autre sera ajouté ultérieurement.

On valide, succès !

Les deux sont trouvés !

Identifier les capteurs dans Home Assistant
Mais qui est qui ? Il faut retirer la pile du plus petit et rafraîchir la page, il est ainsi possible de détecter lequel a quel code série.

Le petit, c'est donc le 7D31 et le grand 59E6.
Remettre la pile attendre un peu que ça se reconnecte.
Ajouter le suivant le 59E6. Les deux capteurs sont désormais ajoutés.
Il y a deux intégrations :
La première, c'est ESPHome avec la configuration qui a été ajoutée dans le yaml.

La deuxième, c'est le Xaomi BLE avec les deux entités

Et les capteurs remontés par le BLE : les informations Mi Flower Care

Attention, ici on peut remarquer que le capteur d’humidité de l’air n’est pas remonté par l'appareil, il faudra utiliser un autre appareil (un thermomètre Zigbee par exemple).
Il s’est avéré que le grand à batterie a mis plus de temps à remonter l’indication de niveau de batterie, j’ai cru un moment qu’il ne remontait pas le niveau de batterie. Mais si, les deux capteurs (petits et grands) remontent le niveau de leur batterie.
Renommer vos Intégrations et vos capteurs
Donc, vous pouvez désormais renommer vos capteurs pour que ça soit plus simple pour les identifier.
Renommer les éléments d’intégration
Dans l’intégration Xiaomi, cliquer sur les trois petits points des éléments de l’intégration.

Puis choisir le nom, dans ce tutoriel : Plant Sensor Citronnier.

Et voilà le résultat :

Renommer les appareils
On vient donc de renommer les éléments de l’intégration Xiaomi mais les appareils ne sont pas renommés pour autant.
Cliquez sur l’appareil :

Cliquez sur le stylo pour éditer cet appareil. On voit en haut à gauche que le nom est différent du nom que l’on a tapé précédemment (Plant Sensor Citronnier) :

On peut éditer le nom :

On change le nom en Citronnier Sensor 7D31, le choix est fait de conserver 7D31 afin de garder cet identifiant matériel qui pourrait servir plus tard (ou pas).

Cliquez sur METTRE À JOUR :
Cela pose aussi problème lorsque l’intégration plante a déjà été créé
et les capteurs déjà affectés à une plante. Voir les explications suivantes.

Avec les détails :

Cliquez sur RENOMMER.
Et voilà le résultat une fois renommé :

Et dans les entités, on peut voir le résultat ;

On peut voir que les nouvelles entités ont un point rouge. Après redémarrage de Home Assistant + redémarrage de l’ESP32, les points rouges ont disparu.
Il faut changer l’entité Citronnier conductivity en remplaçant l’appareil Plant Sensor 7D31 Conductivity par Citronnier Sensor 7D31 Conductivity. Ceci est expliqué dans le chapitre "Changer le capteur d’une plante".
Attention, comme mentionné précédemment, l'humidité de l'air n'est pas remontée par le capteur, il faudra en utiliser un autre.

Une fois l’appareil renommé pour la plante, on a :

Puis, une fois que tous les capteurs ont été renommés, on a :

Et la carte reprend vie.

Mais la batterie n’est plus présente. Il faut aussi éditer la carte :

Après correction :

Bon, il est clair qu’il vaut mieux le faire avant de créer la plante sinon ça demande quand même plus de travail.
Gestion intelligente des plantes
Voici une plante, un petit citronnier qui ne demande qu’à grandir sans mourir !
On lui plante son capteur (pas certain qu’il soit suffisamment grand).

On va maintenant utiliser cette intégration non officielle (tout est expliqué sur le site en lien) :
GitHub - Olen/homeassistant-plant: Alternative Plant component of home assistant
Installer OpenPlantbook
Aller sur la page Open Plantbook | Login et créer un compte (gratuit).

Naviguer vers Open Plantbook | Login et générer une clef API (bouton Generate).
Copier les clefs Client ID et Client Secret.
Installer l’intégrationOpenPlantbook : https://github.com/Olen/home-assistant-openplantbook
Cliquer sur les trois petits points en haut à droite de HACS et ajouter un dépôt personnalisé.

Ajouter GitHub - Olen/home-assistant-openplantbook: Integration to search and fetch data from Openplantbook.io dans un nouveau repository de type Intégration :

Valider. Puis télécharger OpenPlantBook :

Puis redémarrer Home Assistant.
Allez dans Paramètres / Appareils et services et cliquez sur AJOUTER UNE INTÉGRATION

Chercher OpenPlantbook et l’installer !
Il vous demande Client ID et Secret que vous aviez copié précédemment :

Une nouvelle fenêtre s’affiche, pour plus de sécurité tout a été coché.
Puis valider.
Si vous faites la reconfiguration de l’intégration, une nouvelle option apparaît, il propose de télécharger les images des plantes, cochez et validez (attention, il faut créer le répertoire indiqué s’il n’existe pas, on peut le réaliser facilement avec Studio Code Server).

Installez homeassistant-plan avec le repo : https://github.com/Olen/homeassistant-plant
Télécharger, puis redémarrer Home Assistant.

Installer la carte lovelace-flower-card avec le repo https://github.com/Olen/lovelace-flower-card/ et de type Tableau de bord puis cliquez sur AJOUTER :

Puis télécharger en cliquant sur Télécharger :

Et voilà, vous êtes prêts à faire de belles cartes.
Créer les plantes
Il faut désormais créer les plantes, pour cela, il faut créer une entité plante :

Et remplir les informations

Valider, il recherche et propose différents choix. Je choisis Citrus limon :

Puis, il affiche tous les paramètres :
Je coche : c’est la plante que je cherchais.

Je valide et je mets dans la pièce « jardin ».
On peut ajouter toutes les plantes que l’on souhaite. C’est un peu fastidieux, il faut avoir les noms scientifiques en anglais de nos plantes. Mais une simple rechercher Internet te permettra de trouver les noms adéquats.
Réaliser de belles cartes plantes
Il ne reste plus qu’à créer nos cartes : dans nos panneaux, cliquer sur ajouter une carte et sélectionner la carte Flower Card :

Remplir le champ batterie (pour les petits Mi Flower) et le Display Type :

Et voilà le résultat :

Et ben, elle ne va pas très bien cette plante !
Le capteur est là pour ça, afin qu'elle aille mieux par la suite.
Les notifications
Pour être notifié en cas de problèmes avec une plante, il est possible d’être averti pour chaque capteur incorrect, chacun fait comme il veut, mais je n’ai pas fait ce choix. J’ai plutôt utilisé l’état de santé de la plante qui prend en compte l’ensemble des capteurs qui composent la surveillance de la plante.
Nous allons créer une notification persistante + une notification envoyée sur tous les appareils connectés à HA (les portables de la famille par exemple). À vous de voir ce qui vous semble judicieux et de modifier ce code.
Ça donne ça :

Et le code est le suivant :
alias: Notification état de santé du Citronnier
description: ""
triggers:
- trigger: state
entity_id:
- plant.citronnier
from: ok
to: problem
for:
hours: 0
minutes: 10
seconds: 0
conditions: []
actions:
- action: notify.persistent_notification
metadata: {}
data:
message: Le citronnier a besoin de soin.
title: Plante
- action: notify.notify
metadata: {}
data:
message: |
Le citronnier a besoin de soin.
Veuillez vérifier l'état de santé du Citronnier !
title: Plante
mode: single
Surveiller le Proxy Bluetooth
Il est aussi possible d’ajouter le proxy pour pouvoir le surveiller, le redémarrer, etc.
Voici ce que ça donne :

Le code est le suivant :
type: entities
entities:
- entity: switch.mi_flower_1_red_marrage
name: Redémarrage
- entity: sensor.mi_flower_1_allum_depuis
name: Allumé depuis
- entity: sensor.mi_flower_1_internal_temperature
name: Internal Temperature
- entity: binary_sensor.mi_flower_1_statut
name: Statut
- entity: sensor.mi_flower_1_wifi_signal
name: WiFi Signal
title: Proxy Bluetooth
state_color: trueChanger le capteur d’une plante
Lorsque la plante est ajoutée, on se rend compte que l’humidité n’est pas donnée par le capteur (déjà mentionné à plusieurs reprises). Il faut donc utiliser un autre capteur, comme un capteur de température Zigbee par exemple.
Mais que faire si la plante est dans le jardin ou dans la maison (pour un citronnier en région parisienne, l'hiver il est nécessaire de la rentrer dans nos habitations pour éviter qu'elle ne gèle) ?
Après avoir cherché, impossible de changer facilement le capteur d’humidité de la plante (ni aucun autre capteur d’ailleurs).
Le problème peut se poser aussi si on change le Xiaomi Mi Flower par un autre (par exemple un petit par un grand lorsque la plante pousse ou si le capteur devient HS).
Mais en fait, c'est tout à fait possible, il faut se rendre dans Outils de développement / ACTIONS, il y a une action qui permet de changer un capteur par un autre :
- Replace sensor (plant.replace_sensor).
- Choisir le nouveau capteur par lequel il faut le remplacer (en haut).
- Cocher :☑ Sensor entity
- Choisir le nouveau capteur par lequel il faut remplacer.
- Appuyez sur Executer l'action.

Et voilà le capteur est remplacé. On peut le faire pour tous les capteurs de la plante, notamment lorsque l'on renomme celle-ci !
Conclusion
Et voilà le résultat final (avec surveillance du Proxy Bluetooth) :

Bonnes plantations.


