[TUTORIEL] Monitorer ses plantes avec les capteurs Mi Flora

Objectif

Ce tutoriel a pour objectif de remonter les informations fournis par les capteurs Mi Flora dans Gladys.
Pour cela, nous avons besoin :

  • Un capteur Mi Flora
  • Un raspberry Pi Zero W
  • Une instance Gladys

Le raspberry pi zero servira de passerelle aux données : Il executera le script python de Thom Dietrich sous forme de service pour récupérer les données et les inscrire dans des topics MQTT accessible par Gladys.

image

Prérequis

Un serveur MQTT doit être configuré via Gladys (Cf. Intégration MQTT)

1- Gladys

Aller dans Integration > MQTT > Ajouter un périphérique
Nom : MiFlora Sensor - Basilic (exemple)
ID externe : mqtt:miflora:basilic

image

Note : L’ID externe doit obligatoirement commencer par mqtt:miflora: suivi du nom de la plante que vous allez utiliser plus tard pour configurer le script python.ID External : mqtt:miflora:[Nom de la plante]

Ensuite, ajouter les différentes fonctionnalités du capteur
image
image
image
image
image

Important : Les id externes des fonctionnalités sont à recopier tels que sur les impressions écrans, ils correspondent aux Ids du script python.

Gladys est maintenant capable de lire les informations du capteur Basilic sur le serveur MQTT.

Raspberry Pi Zero

La suite de ce tutoriel est une traduction avec adaptations du wiki de Thom Dietrich. La PR n’étant pas encore intégrer par Thom, j’utilise mon Git comme référence pour le script modifié pour Gladys.

Se connecter en ssh au raspberry

sudo apt install git python3 python3-pip bluetooth bluez
git clone https://github.com/Chouille/miflora-mqtt-daemon.git /opt/miflora-mqtt-daemon 
cd /opt/miflora-mqtt-daemon
sudo pip3 install -r requirement.txt

Le daemon dépend de GATTTool, un outil externe fourni par le package bluez. Pour s’assurer que GattTool est bien installé

gatttool --help

Ensuite, nous créons le fichier de config nécessaire au script.

cp /opt/miflora-mqtt-daemon/config.{ini.dist,ini}

Récupérer l’adresse MAC de votre capteur comme ceci :

sudo hcitool lescan
4B:47:E2:DE:CE:9A (UNKNOWN)
84:C0:EF:46:B2:8A (UNKNOWN)
10:0B:F1:43:59:16 (UNKNOWN)
C4:7C:8D:62:40:29 FLOWER CARE

Editer le fichier de config, ci-après une config basique :

[General]
reporting_method = gladys-mqtt
adapter = hci0
[Daemon]
enabled = true
period = 3600 #1 hour
hostname = [IP Gladys]
port = 1883
keepalive = 60
base_topic = gladys/master/device
username=gladys
password=[Cf. Gladys setup]
Basilic@Salon=C4:7C:8D:62:40:29

Important : La déclaration de l’adresse MAC se fait par le nom de la plante que vous avez indiquer dans Gladys. La localisation du capteur (@Room) est optionnel.

Test

sudo python3 /opt/miflora-mqtt-daemon/miflora-mqtt-daemon.py

Depuis un client MQTT connecter au serveur MQTT de Gladys, vous devriez avoir ceci :

image

Après création d’une section dans le dashboard de Gladys, vous devriez obtenir ceci :

image

Enregistrer le script comme service

Important : Le mode Daemon doit être activé dans le fichier de config !

sudo cp /opt/miflora-mqtt-daemon/template.service /etc/systemd/system/miflora.service
sudo systemctl daemon-reload
sudo systemctl start miflora.service
sudo systemctl status miflora.service
sudo systemctl enable miflora.service

Maintenant que le monitorage de la plante se trouve sur Gladys, vous pourriez :

  • Etre notifier si votre plante manque d’eau et/ou lancer une pompe pour l’arroser.
  • Etre notifier si la température est trop haute/basse pour votre plante.
  • Allumer une lampe de croissance d’appoint si elle manque de lumière.
  • etc …
4 « J'aime »

Salut et un grand merci à toi pour le tutoriel :+1:

Je ne l’ai pas fini, car je rencontre une erreur et je patauge un peu … Puis j’ai aussi rencontré quelques difficultés à avancer dans le tuto :

Il faut exécuter ces commandes en sudo sinon on avance pas, donc :

sudo git clone https://github.com/Chouille/miflora-mqtt-daemon.git /opt/miflora-mqtt-daemon
sudo cp /opt/miflora-mqtt-daemon/config.{ini.dist,ini}

Sinon moi j’en suis à tester le fichier miflora-mqtt-daemon.py … quand je lance la commande
sudo python3 /opt/miflora-mqtt-daemon/miflora-mqtt-daemon.py

je reçois ceci :

[2021-04-13 14:46:20] Configuration parameter reporting_mode set to an invalid value

Pourtant, dans le fichier de config j’ai bien :

reporting_method = gladys-mqtt

Je ne sais pas si j’ai juste, mais on dirait que gladys-mqtt n’est pas déclarée dans le fichier miflora-mqtt-daemon.py ?..

Salut Jean.
Si tu as clone mon repo, la variable reporting_method doit être déclarée.
Tu peux vérifier dans miflora-mqtt-daemon.py que tu as bien entre ligne 349 et 365 ceci :

elif reporting_mode == 'gladys-mqtt':
print_line('Announcing Mi Flora devices to MQTT broker for auto-discovery ...')

for [flora_name, flora] in flores.items():
    topic_path = '{}/mqtt:miflora:{}/feature'.format(base_topic, flora_name.lower())
    data = OrderedDict()
    for param,_ in parameters.items():
        data[param] = flora['poller'].parameter_value(param)
    mqtt_client.publish('{}/mqtt:battery/state'.format(topic_path),data['battery'],1,True)
    mqtt_client.publish('{}/mqtt:moisture/state'.format(topic_path),data['moisture'],1,True)
    mqtt_client.publish('{}/mqtt:light/state'.format(topic_path),data['light'],1,True)
    mqtt_client.publish('{}/mqtt:conductivity/state'.format(topic_path),data['conductivity'],1,True)
    mqtt_client.publish('{}/mqtt:temperature/state'.format(topic_path),data['temperature'],1,True)


sleep(0.5) # some slack for the publish roundtrip and callback function
print()

Et entre ligne 440 et 443 :

elif reporting_mode == 'gladys-mqtt':
        print_line('Publishing to MQTT topic "{}/mqtt:miflora:{}/feature"'.format(base_topic, 
        flora_name.lower()))
        mqtt_client.publish('{}/mqtt:miflora:{}/feature'.format(base_topic, flora_name.lower()), 
        json.dumps(data))
        sleep(0.5) # some slack for the publish roundtrip and callback function
1 « J'aime »

Enfaite il fallait aussi ajouter gladys-mqtt dans la partie check de ton fichier :slight_smile:

    # Check configuration
if reporting_mode not in ['mqtt-json', 'mqtt-homie', 'json', 'mqtt-smarthome', 'homeassistant-mqtt', 'thingsboard-json', 'wirenboard-mqtt', 'gladys-mqtt']:

Merci beaucoup pour le tuto, je cherchais justement un moyen de surveiller mes plantes et arrêter de tous les tuer :laughing:

Vous savez quels sont les métriques à surveiller et quand s’alerter ?

Je me pose les même question ^^ j’ai pas la main verte et si cela peut m’aider je vais pas dire non xD

Exacte ! :slight_smile:

Généralement c’est l’exposition, humidité et température ambiante. Et ça dépend des plantes :sweat_smile:.

Faudrait peut être créer un topic dédié avec les valeurs hygrométriques qui fonctionnent par type de plante non ? Bizarrement j’ai trouvé très peu d’informations sur le net. Les jardiniers ne sont pas geek ?

3 « J'aime »

Ça pourrait être très intéressant !

Ce genre là ?

5 « J'aime »

Génial ! Evidemment, intégrer ce genre de projets serait l’idéal, mais c’est pas vraiment la priorité :stuck_out_tongue:

Il y a également la fertilité du sol (présence de nutriments). Cela s’obtient en ajoutant de l’engrais ou facilement / gratuitement avec du compostage à base de lombric, mais il faut être un peu patient ^^

https://illustrascience.fr/le-compost/

L’avantage est que tu réduis tes déchets. Ceux qui ont la chance d’avoir un jardin peuvent construire un composteur à base de palettes, pour ceux en appartement (avec ou sans balcon) :

On peut ajouter un monitorage de composteur dans Gladys d’ailleurs :slight_smile:

Mais ça dégage une sacré odeur un lombricomposteur par contre :wink:

@lmilcent @spenceur, vous avez testé ?

Perso n’ayant pas de raspberry pi zero, j’ai tenté sur un raspberry pi 3b+ et ça ne fonctionne pas, il trouve bien mon capteur mais n’arrive pas à récupérer les infos, pourtant sur github ça dit que le raspi 3 est compatible…

Je n’ai pas réellement de message d’erreur si ce n’est un timeout, je vois bien qu’il se connecte au flower care par sa led, mais ça se coupe au bout de 2 scintillements, à chaque essai.

J’ai vu ton issue @glasserre, je pense que je suis bon pour acheter un ptit raspberry zéro

Je reçois mes capteurs semaine pro (oui j’ai craqué quand j’ai vu le tuto :-p )

Je n’ai pas encore acheté de capteur, mais ça viendra un jour, l’envie ne manque pas :wink:
Surtout que je compte plus les cadavres de plante que j’ai du jeter :sweat_smile:

Oui, j’ai eu beau chercher (mise à jour de btlewrap/bluepy, tester avec bluegatt) pas de données.
Après je suis pas expert du tout, j’ai surement raté quelque chose.

Je vais en prendre d’autres également, c’est bientôt les french days :slight_smile:

n’y a t’il pas moyen d’ajouter la découverte de @Jean34 dans un service mi flora ?
Comme ça l’utilisateur pourra si possible réaliser des scènes en fonction d’un référentiel non ?

Je verrai plus un truc générique ( pas lié directement à un service) avec les scènes .

On affecterai des capteurs à une plante et ça gèrerai les conditions d’alerte tout seul. ( basé sur la découverte de @Jean34)