Hack Xiaomi Mi Plant, script Python MiFlora-MQTT-Deamon

xiaomi
python
mini-tuto

#1

Le script Python MiFlora-MQTT-Deamon développé par Thomas Dietrich disponible sur GitHub ici permet de récupérer les mesures renvoyées en bluetooth par le Xiaomi Mi Plant ou Xiaomi Mi Flora

Installer le projet MiFlora-MQTT-Deamon sur Raspberry Pi

sudo apt install git python3 python3-pip bluetooth bluez
git clone https://github.com/ThomDietrich/miflora-mqtt-daemon.git /opt/miflora-mqtt-daemon

Trouver l’adresse MAC du Xiaomi Mi Plant

sudo hcitool lescan

après quelques secondes

LE Scan ...
70:56:81:CF:9B:65 (unknown)
C4:7C:8D:65:XX:XX (unknown)
C4:7C:8D:65:XX:XX Flower care

Configurer le script Python

Copiez le modèle de fichier de configuration qui se trouve dans le répertoire /opt

cd /opt/miflora-mqtt-daemon
sudo cp config.ini.dist config.ini

Paramètres disponibles

  • hostname, adresse IP du broker MQTT. localhost s’il est sur le même poste que le script Python
  • period, 300 secondes d’attente entre deux acquisition par défaut. Attention, si vous êtes trop gourmand, vous allez drainer la batterie très rapidement…
  • username et password si une protection par utilisateur/mot de passe existe sur le broker Mosquitto
  • base_topic, l’entête du topic MQTT. Par défaut, ce sera miflora.
  • Ajoutez le capteur Mi Plant dans la section [sensors] à la fin du fichier. Il est possible de récupérer les mesures de plusieurs capteurs. Indiquez l’adresse MAC précédemment trouvée. On peut spécifier une localisation en utilisant @ comme séparateur. Par exemple
    miplant2018@salon = C4:7C:8D:65:XX:XX

Lancez le script python avec la commande suivante

sudo python3 miflora-mqtt-daemon.py

Lecture des mesures sur le broker MQTT

Sans authentification

mosquitto_sub -h localhost -t miflora/miflora

Avec authentification

mosquitto_sub -h localhost -t miflora/miflora -u utilisateur -P motdepasse

Les premières mesures

pi@raspberrypi:~ $ mosquitto_sub -h localhost -t miflora/miplant2018
{"moisture": 51, "battery": 99, "temperature": 20.7, "light": 297, "conductivity": 1078}

Lire le tutoriel complet sur le blog