Il y a quelques jours, j’ai publié un article qui expliquait comment importer les données d’un capteur Xiaomi Flower Care / MiFlora en Bluetooth sur un Raspberry Pi. Ce capteur est disponible pour un peu plus de 20€ sur Amazon.
Nous allons voir comment utiliser ces données dans RPi-Monitor.
Tout d’abord, nous allons appliquer tout ce qui est indiqué dans cet article :
Nous devrions avoir une App exécutable nommée « miflora » dans le dossier /home/pi/scripts/miflora/
Nous allons nous placer dans ce dossier :
$ cd /home/pi/scripts/miflora/
Et exécuter la commande (C4:7C:8D:XX:XX:XX étant la Mac Address du Flower Care) :
$ ./miflora C4:7C:8D:XX:XX:XX hci0 > data.txt
Nous obtiendrons un fichier data.txt contenant quelque chose comme ça :
Reading miflora...
Firmware: {Version:2.7.0 Battery:100}
Sensors: {Temperature:20.3 Moisture:35 Light:14 Conductivity:411}
On va créer un fichier miflora.conf dans le dossier /etc/rpimonitor/template
$ sudo nano /etc/rpimonitor/template/miflora.conf
Et on va y copier ceci :
########################################################################
# Extract temperature and humidity from Xiaomi miflora
# Page: 2
# Information Status Statistics
# - tempetature - yes - yes
# - moisture - yes - yes
# - light - yes - yes
# - conductivity - yes - yes
# - battery - yes - yes
#######################################################################
# Add new pages (number 2)
web.status.2.name=Plantes
web.statistics.2.name=Plantes
# Get dynamic data
dynamic.1.name=miflora_temp
dynamic.1.source=/home/pi/scripts/miflora/data.txt
dynamic.1.regexp=Temperature:(\S+)
dynamic.1.rrd=GAUGE
dynamic.2.name=miflora_moisture
dynamic.2.source=/home/pi/scripts/miflora/data.txt
dynamic.2.regexp=Moisture:(\S+)
dynamic.2.rrd=GAUGE
dynamic.3.name=miflora_light
dynamic.3.source=/home/pi/scripts/miflora/data.txt
dynamic.3.regexp=Light:(\S+)
dynamic.3.rrd=GAUGE
dynamic.4.name=miflora_conduct
dynamic.4.source=/home/pi/scripts/miflora/data.txt
dynamic.4.regexp=Conductivity:(\d+)
dynamic.4.rrd=GAUGE
dynamic.5.name=miflora_battery
dynamic.5.source=/home/pi/scripts/miflora/data.txt
dynamic.5.regexp=Battery:(\d+)
dynamic.5.rrd=GAUGE
# Add a line of status in page number 3
web.status.2.content.1.name=Flower Care
web.status.2.content.1.icon=miflora.png
web.status.2.content.1.line.1="Température Ambiante : <b>"+data.miflora_temp+"°C</b>"
web.status.2.content.1.line.2="Ensoleillement : <b>"+data.miflora_light+" lux</b>"
web.status.2.content.1.line.3="Humidité du sol : <b>"+data.miflora_moisture+" %</b>"
web.status.2.content.1.line.4=ProgressBar(data.miflora_moisture,100)
web.status.2.content.1.line.5="Engrais : <b>"+data.miflora_conduct+" uS/cm</b>"
web.status.2.content.1.line.6=ProgressBar(data.miflora_conduct,1500)
web.status.2.content.1.line.7="Batterie : <b>"+data.miflora_battery+" %</b>"
web.status.2.content.1.line.8=ProgressBar(data.miflora_battery,100)
# Add a statistic graph in page number 3
web.statistics.2.content.1.name=Température
web.statistics.2.content.1.graph.1=miflora_temp
web.statistics.2.content.1.ds_graph_options.miflora_temp.label=Température ambiante (deg C)
web.statistics.2.content.1.graph_options.y2axis={ position: "right", min: 0, max: 40 }
web.statistics.2.content.2.name=Humidité
web.statistics.2.content.2.graph.1=miflora_moisture
web.statistics.2.content.2.ds_graph_options.miflora_moisture.label=Humidité du sol (%)
web.statistics.2.content.2.graph_options.y2axis={ position: "right", min: 0, max: 100 }
web.statistics.2.content.3.name=Ensoleillement
web.statistics.2.content.3.graph.1=miflora_light
web.statistics.2.content.3.ds_graph_options.miflora_light.label=Ensoleillement (lux)
web.statistics.2.content.3.graph_options.y2axis={ position: "right", min: 0, max: 3000 }
web.statistics.2.content.4.name=Engrais
web.statistics.2.content.4.graph.1=miflora_conduct
web.statistics.2.content.4.ds_graph_options.miflora_conduct.label=Engrais (uS/cm)
web.statistics.2.content.4.graph_options.y2axis={ position: "right", min: 0, max: 2000 }
web.statistics.2.content.5.name=Batterie
web.statistics.2.content.5.graph.1=miflora_battery
web.statistics.2.content.5.ds_graph_options.miflora_battery.label=Batterie (%)
web.statistics.2.content.5.graph_options.y2axis={ position: "right", min: 0, max: 100 }
On quitte nano en enregistrant.
Vous pouvez également télécharger directement le fichier miflora.conf
On attribue les droits du fichier qui vont bien :
$ sudo chmod 664 /etc/rpimonitor/template/miflora.conf
On utilise une icône miflora.png qui n’est pas présente par défaut dans RPi-Monitor.
On va la copier dans le dossier /usr/share/rpimonitor/web/img avec un utilitaire comme CyberDuck et y appliquer les droits corrects :
$ sudo chmod 664 /usr/share/rpimonitor/web/img/miflora.png
Pour terminer, on va éditer le fichier data.conf (c’est un raccourci) :
$ sudo nano /etc/rpimonitor/data.conf
Et y ajouter cette ligne tout à la fin :
include=/etc/rpimonitor/template/miflora.conf
Et pour terminer, on redémarre RPi-Monitor :
$ sudo service rpimonitor restart
Si on s’arrête ici, les données affichées dans RPi-Monitor seraient celle qui ont été relevées une seule fois manuellement avec la commande $ ./miflora C4:7C:8D:XX:XX:XX hci0 > data.txt vue au début de cet article.
On va automatiser ce relevé avec un Cron toutes les minutes :
$ sudo crontab -e
Et on ajoute cette ligne à la fin du fichier (attention à bien remplacer les XX de la Mac Address) :
# Boucle pour actualiser les données RPi-Monitor avec le Xiaomi Flower Care (miflora)
*/1 * * * * sudo /home/pi/scripts/miflora/miflora C4:7C:8D:XX:XX:XX hci0 > /home/pi/scripts/miflora/data.txt 2>&1
Et on quitte en vauvegardant.
Dorénavant, les données seront lues toutes les minutes et vous pourrez voir le Flower Care s’allumer durant l’opération.
Vous devriez voir les valeurs importées et le graphique se dessiner au fur et à mesure du temps :
