Hack du Xiaomi Mi Plant, intercepter et publier sur MQTT les mesures avec un Raspberry Pi (MiFlora-MQTT-Deamon) • Domotique et objets connectés à faire soi-même

Je vous propose de tester le script développé en Python MiFlora-MQTT-Deamon développé par Thomas Dietrich  pour récupérer les mesures du Xiaomi Mi Plant. Le Xiaomi Mi Plant (nouveau Flora) utilise le Bluetooth à la place du Zigbee pour communiquer avec un smartphone. C’est une solution beaucoup moins couteuse à produire pour Xiaomi. C’est aussi une excellente nouvelle pour les hackeurs car il est “très facile” (attention c’est un gros travail de retro-engineering) d’intercepter les trames bluetooth pour les détourner pour une autre application. On pourra ainsi se libérer de l’application Mi Home, déclencher des scénarios depuis un serveur domotique ou un script Python ou Javascript.

Le plus gros avantage, c’est qu’on pourra très simplement garder un oeil sur nos plantes même en vacances. Ce n’est pas possible avec le bluetooth car les données sont collectées lorsqu’on se trouve à proximité du Mi Plant. En plus, il n’y a rien à installer ni à modifier sur le capteur et on garde la pleine compatibilité avec l’appli Mi Home.

Avant de commencer, vous aurez besoin d’un broker MQTT. Installez et configurez Mosquitto sur Raspbian en suivant ce tutoriel.

Installer le projet MiFlora-MQTT-Deamon sur Raspberry Pi

J’ai testé le script développé par Thomas Dietrich disponible sur GitHub ici. C’est un script Python très simple. Connectez-vous au Terminal du Raspberry Pi en SSH ou depuis le bureau puis exécutez ces deux commandes pour installer les librairies nécessaires et cloner le projet sur le 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

Par défaut, Thomas installe le script dans le répertoire /opt de Raspbian mais rien ne vous oblige à garder ce dossier de destination.

Trouver l’adresse MAC du Xiaomi Mi Plant

Assurez vous que le capteur est à porté du Bluetooth, ensuite exécutez cette commande qui scanne les appareils Bluetooth à porté du Raspberry Pi.

sudo hcitool lescan

Voilà ce que vous devriez avoir après quelques secondes

pi@raspberrypi:/opt/miflora-mqtt-daemon $ sudo hcitool lescan
LE Scan ...
70:56:81:CF:9B:65 (unknown)
C4:7C:8D:65:XX:XX (unknown)
C4:7C:8D:65:XX:XX Flower care

Le Xiaomi Mi Plant porte le nom de Flower care. L’adresse MAC est la série de chiffres et lettres avant le nom du Flora. Il est listé à deux reprise, je n’ai aucune explication.

Configurer le script Python

Maintenant que l’on connait l’adresse Mac du Xiaomi Mi Plant, on va pouvoir modifier le fichier de configuration. Il se trouve à la racine du répertoire d’installation.

cd /opt/miflora-mqtt-daemon

Faites ensuite une copie du fichier de configuration. Il faut faire précéder la commande d’un sudo car nous sommes dans un répertoire système

sudo cp config.ini.dist config.ini

Ensuite, ouvrez le fichier avec la commande sudo nano config.ini et modifiez les paramètres suivants

  • 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

Enregistrez avec la combinaison CTRL + X puis O.

Lancez le script python avec la commande suivante

sudo python3 miflora-mqtt-daemon.py

Le script affiche l’état de la connexion au broker ainsi que les données récupérées. Attention, ce script est expérimental, il s’arrête dès que le Mi Plant n’est plus joignable.

pi@raspberrypi:/opt/miflora-mqtt-daemon $ sudo python3 miflora-mqtt-daemon.py 

Xiaomi Mi Flora Plant Sensor MQTT Client/Daemon
Source: https://github.com/ThomDietrich/miflora-mqtt-daemon

[2018-05-21 15:57:43] Connecting to MQTT broker ...
[2018-05-21 15:57:43] MQTT connection established

Adding sensor to device list and testing connection ...
Name:          "miplant2018"
Internal name: "miplant2018"
Device name:   "Flower care"
MAC address:   C4:7C:8D:65:XX:XX
Firmware:      3.1.8
[2018-05-21 15:57:49] Initial connection to Mi Flora sensor "miplant2018" (C4:7C:8D:65:XX:XX) successful

[2018-05-21 15:57:49] Announcing Mi Flora devices to MQTT broker for auto-discovery ...

[2018-05-21 15:57:49] Retrieving data from sensor "miplant2018" ...
[2018-05-21 15:57:49] Result: {"conductivity": 1074, "temperature": 20.7, "light": 321, "moisture": 51, "battery": 99}
[2018-05-21 15:57:49] Publishing to MQTT topic "miflora/miplant2018"

[2018-05-21 15:57:50] Sleeping (50 seconds) ...

Vérification sur Mosquitto

On va vérifier que l’on reçoit bien les mesures du capteur. Exécutez cette commande

mosquitto_sub -h localhost -t miflora/miflora

ou celle-ci si vous utilisez une authentification (conseillé). Modifié les paramètres avant d’exécuter

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

Voilà, vous pouvez maintenant créer une passerelle vers votre logiciel domotique préféré pour récupérer les mesures et déclencher des scénarios ou des alertes. Pour Jeedom, il existe un plugin gratuit équivalent.

Dans le prochain article, nous verrons comment envoyer les données du Mi Plant sur un appareil iOS sans avoir à installer Homebridge…

Avez-vous aimé cet article ?

[Total: 0 Moyenne: 0]