Jeedom & Grafana : marier la domotique et la métrologie
Intro
Depuis quelques années, j’utilise Jeedom comme solution domotique. Le système est stable, et pilote ma maison avec succès. Par contre, l’affichage et l’utilisation de l’historique des valeurs remontées par chaque capteur n’est pas des plus pratiques. Utilisateur de Grafana dans la vie de tous les jours, pourquoi ne pas mettre à profit cet outil pour relever et visualiser les métriques de ma domotique ? Et bien, c’est ce que nous allons voir tout de suite …
Je ne parlerai pas de l’installation et du paramétrage de Jeedom, on part du postulat qu’il est déjà fonctionnel chez vous.
Installation de Grafana, Telegraf et Influxdb
Mon Jeedom fonctionnant sur une machine virtuelle (sur un ESX de VMWare), j’ai pris le parti d’installation une nouvelle VM, sous Ubuntu 18.04 pour héberger Grafana, Telegraf, et Influxdb.
Mon jeedom est sur la machine virtuelle Debian qui porte l’ip 192.168.0.200, et j’installe Grafana dans un conteneur LXC Ubuntu 18.04 qui porte l’IP 192.168.0.198.
Allez, c’est parti !
On commence par installer influxdb et telegraf :
Installation d’influxdb
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian stretch stable" > /etc/apt/sources.list.d/influxdata.list
apt update
apt install influxdb
systemctl start influxdb
Configuration
On lance le client influx, pour interagir avec le SGBD :
influx
Ensuite on crée la base :
CREATE DATABASE telegraf
CREATE USER telegraf WITH PASSWORD 'mot de passe'
GRANT ALL ON telegraf TO telegraf
Installation de telegraf
apt install telegraf
systemctl start telegraf
Configuration de telegraf
On modifie /etc/telegraf/telegraf.conf :
[[outputs.influxdb]]
database = "telegraf"
urls = [ "http://127.0.0.1:8086" ]
username = "telegraf"
password = "mot de passe"
Et on redémarre le service :
service telegraf restart
Installation de Grafana
Maintenant, on passe à la partie Grafana. Pour rappel, j’installa Grafana sur la même machine qui porte influxdb et telegraf, la 192.168.0.198.
apt-get install -y software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt update
sudo apt install grafana
Configuration de grafana :
On édite le fichier /etc/grafana/grafana.ini et on modifie les paramètres suivants :
domain = domain.toto.fr
enable_gzip = true
root_url = http://domain.toto.fr
On redémarre le service grafana, et on l’active au démarrage :
service grafana-server restart
systemctl enable grafana-server
A partir de cette étape, grafana est actif, on va passer à sa configuration.
On ajoute la base de données telegraf créée précédemment, une belle image vaut mieux que mille mots :
Configuration de Jeedom
Maintenant que Grafana est accessible et communique avec Influxdb, on va configurer notre Jeedom, afin que celui-ci envoie les données de chaque capteur dans la base de données "jeedom" que nous avons créée à l’étape précédente. Pour cela, nous avons besoin de télécharger un petit script en Python qui va se charger de faire tout le travail pour nous. Le script est disponible ici https://github.com/neuhausj/JeedomTools/tree/master
Il nous faut modifier, dans la partie "SCRIPT SETTINGS" les informations particulières à notre configuration :
###########################
# SCRIPT SETTINGS
###########################
# Set the port where you want the bridge service to run
PORT_NUMBER = 1234
# InfluxDB Server parameters
INLUXDB_SERVER_IP = '192.168.0.198'
INLUXDB_SERVER_PORT = 8086
INFLUXDB_USERNAME = 'telegraf'
INFLUXDB_PASSWORD = 'mot de passe'
INFLUXDB_DB_NAME = 'telegraf'
###########################
Pour l’IP, mettez l’IP du serveur qui héberge grafana / telegraf (192.168.0.198 pour ma part).
Une fois le script modifié, il faut donc le lancer :
python3.5 Bridge_Jeedom_InfluxDB.py &
Si vous avez une erreur à cause de la librairie influxdb non présente, lancez la commande suivante afin de l’installer :
pip3 install influxdb
Pour faire les choses un peu plus propres (et à la demande de Victor, voici comment faire un service systemd afin que le script python soit lancé automatiquement :
On édite le fichier /lib/systemd/system/Bridge.service et on y insère le contenu suivant :
root@vmjeedom:~# cat /lib/systemd/system/Bridge.service
[Unit]
Description=Bridge_Jeedom_InfluxDB.service
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/python3.5 /home/carmelo/Bridge_Jeedom_InfluxDB.py
[Install]
WantedBy=multi-user.target
root@vmjeedom:~#
On recharge systemd pour prendre en compte notre nouveau service :
systemctl daemon-reload
On active notre service pour qu’il soit opérationnel au démarrage, et on le démarre manuellement :
systemctl enable Bridge.service
systemctl start Bridge.service
Maintenant, la dernière étape, il ne manque plus qu’à configurer un équipement jeedom pour qu’à chaque remontée de valeur celle-ci soit intégrée dans notre base de données telegraf :
La commande Push URL est la suivante :
http://192.168.0.200:1234/updateData?name=#cmd_name#&cmd_id=#cmd_id#&val=#value#&location=hall
(remplacer à la fin de l’url "hall" par la localisation de votre équipement)
(bien sûr, 192.168.0.200 est l’ip du serveur qui fait tourner notre script python)
Et voilà 🙂 Vous n’avez plus qu’à configurer le dashboard grafana 😉
Conclusion
Et donc, tadam, voilà ce que ça donne une fois fini :
La prochaine étape ? Bien sûr l’industrialisation de la procédure, via un playbook Ansible qui se chargera de faire tout le travail tout seul comme un grand … et pourquoi pas même, soyons fou, un peu de Terraform pour déployer tout ça dans des beaux conteneurs LXC …
J’espère que ce petit article vous aura éclairé sur la façon d’utiliser grafana, un superbe outil de métrologie, pour gérer les datas de sa domotique …
Salut,
Il n’est pas possible de pousser directement les data dans influxdb avec le push URL ?
Bonjour,
Merci pour votre article, le script python marche très bien et ça remonte bien quand je lance le script manuellement.
Par contre impossible de mettre en place le service. J’ai suivi cos consignes, je n’obtiens pas d’erreurs mais les données n’arrivent pas dans grafana. Une idée ?
Merci
Bonjour,
Que donne la commande `systemctl status Bridge` ?
Bonjour
Merci pour le tuto
Peux-tu detailler un peu plus la dernière étape sur la configuration d’un équipement Jeedom stp ?
Merci
Bonjour et merci pour l’article !
Il n’existe pas de méthode permettant une synchronisation globale de toutes les métriques historisées par jeedom ? Ca paraît assez contraignant de devoir le faire commande par commande.
Bonjour,
je n’ai pas connaissance d’une synchro globale, effectivement c’est assez contraignant la 1ère fois, et ensuite il faut penser à la création de chaque équipement à rajouter la ligne …
Je pense que j’ai trouvé mon bonheur après une petite recherche. Il existe un plugin InfluxDb pour Jeedom qui a l’air de faire le travail : https://community.jeedom.com/t/plugin-tiers-influxdb-connector/23223
Je vais tester ça
Hello,
Je serais toi je retirerai la mention du domaine m***.****o.fr dans ton tuto. On tombe direct sur ton jeedom.
Exact !
Merci c’est fait 🙂 (et dans ton commentaire également du coup !)