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 = metrics.ingrao.fr
enable_gzip = true
root_url = http://metrics.ingrao.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 grafana influxdb

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 :

configuration capteur jeedom avec pushUrl

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 :

configuration grafana et jeedom

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 …