Base de données de capteurs avec le Raspberry Pi

Quiconque souhaite enregistrer les données des capteurs sur une longue période est inévitablement confronté à un problème : comment stocker et présenter les données recueillies ? InfluxDB et Grafana sont en fait des outils conçus pour surveiller de grands serveurs, réseaux et sites web.

Ce tutoriel explique comment cette combinaison peut être utilisée pour visualiser les données des capteurs à la maison.

Le projet

Convient pour : experts

Temps nécessaire : au moins 2 h

Ce dont vous avez besoin : Raspberry Pi (modèle 2 ou plus récent recommandé), capteurs ou autres sources de données intéressantes

Le logiciel n’a pas de traduction en français pour le moment, une bonne connaissance de l’anglais est donc avantageuse pour la mise en place.

Les outils

InfluxDB

InfluxDB est un système de gestion de base de données (TSDB), qui a été développé spécialement pour les séries temporelles ou données horodatées. Par rapport aux bases de données classiques telles que mySQL, les TSDB présentent plusieurs avantages :

  • De meilleures performances et des besoins en ressources moindres
  • Fonctions spécifiques pour le sous-échantillonnage des séries de mesures
  • Meilleure compression des données

InfluxDB comprend également le programme Telegraf, qui collecte les valeurs mesurées à partir de nombreuses sources et les transmet à InfluxDB. Dans ce tutoriel, Telegraf est utilisé pour collecter des données comme de l’utilisation de l’unité centrale du Raspberry Pi. Si cela n’est pas souhaité, l’installation du Telegraf n’est pas nécessaire.

Grafana

Grafana est une plateforme de visualisation de séries temporelles. Les données peuvent être présentées, par exemple, à l’aide de graphiques, de tableaux et de cartes thermiques. Un grand choix de plugins offre de nombreuses possibilités d’extension. Si vous voulez découvrir l’interface avant l’installation, vous pouvez utiliser la démo en direct sur https://play.grafana.org.

Mise en place sur le Raspberry Pi

En raison de la charge d’écriture plus élevée sur la carte SD causée par la base de données, il est recommandé d’installer le système d’exploitation sur un support de données plus performant, par exemple un USB-SSD.
Il faut au moins utiliser une carte SD conçue pour une charge d’écriture élevée (par exemple, une carte pour Dashcams).

L’installation de Raspbian ne sera pas abordée plus avant à ce stade, le tutoriel est basé sur la version “Raspbian Buster Lite”.

Installation des paquets

Les paquets dans les sources officielles de Raspbian sont obsolètes, il faut donc ajouter les sources  des développeurs respectifs :

```bash
curl -sL https://packages.grafana.com/gpg.key | sudo apt-key add -
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -

echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
echo "deb  stable main" | sudo tee /etc/apt/sources.list.d/grafana.list

sudo apt-get update
sudo apt-get install -y grafana influxdb telegraf

sudo systemctl enable influxdb grafana-server telegraf
sudo systemctl start influxdb grafana-server telegraf
```

Configuration

Par défaut, Grafana démarre un serveur web sur le port 3000, de sorte que le serveur frontal peut être atteint avec le navigateur sous l’URL http://<IP-des-Pis>:3000. Le login est “admin”/”admin” et doit être modifié directement lors de la première connexion. Après cela, le tableau de bord de la maison est déjà affiché.

Home Dashboard

Grafana doit d’abord être connecté à InfluxDB. Pour cela, une nouvelle source de données est créée en cliquant sur “Add Data Source”, dans la sélection ensuite “InfluxDB” doit être sélectionné. La plupart des paramètres peuvent être laissés aux valeurs par défaut au début, seule l’URL doit être saisie : http://localhost:8086. En outre, la base de données “Telegraf” doit être saisie sous “InfluxDB Details”. Un clic sur “Save & Test” enregistre les paramètres, la confirmation “Data source is working” devrait apparaître.

Tableaux de bord

Ensuite, vous pouvez déjà créer le premier tableau de bord, en cliquant sur le bouton « New Dashboard » sur le tableau de bord de la maison. Le premier panneau a déjà été créé automatiquement, cliquez sur “Add Query” pour accéder au menu du panneau.

Telegraf devrait déjà avoir recueilli quelques données sur le Raspberry Pi depuis l’installation, comme la charge du processeur, l’utilisation de la mémoire vive, etc. Pour afficher la charge du CPU, par exemple, la série de mesures “cpu” doit être sélectionnée dans la ligne “FROM” sous “select measurement”. Ensuite, le champ “usage_system” ou “usage_user” peut être sélectionné dans la ligne “SELECT” sous “value”.

First Panel

Une fois les données sélectionnées, les boutons de gauche permettent d’accéder à d’autres menus dans lesquels l’affichage graphique peut être configuré.

Sources de données supplémentaires dans Telegraf

Le Telegraf dispose d’une multitude de “Plugins d’entrée”, qui permettent de collecter diverses données. La plupart des plugins sont conçus pour les serveurs et mesurent des statistiques sur différentes applications serveur. Une drôle d’exception est le plugin “minecraft”, qui collecte les tableaux de scores des joueurs d’un serveur de minecraft. Une liste détaillée est disponible dans le code source de Telegraf.

Pour activer les plugins, le fichier de configuration `/etc/telegraf/telegraf.conf` doit être modifié. Si vous souhaitez approfondir le Telegraf, veuillez vous référer à la documentation.

Intégration des données des capteurs

Format des données

InfluxDB accepte les données sous forme de requêtes HTTP, de sorte que tous les appareils compatibles avec le réseau peuvent facilement envoyer des valeurs mesurées à la base de données. Ici, “curl” est utilisé comme exemple pour un capteur :

```bash
curl -i -XPOST 'http://<IP-des-Pis>:8086/write?db=mydb' --data-binary 'sensor,ort=kueche temperatur=24.7'
```

Cette requête enregistre une valeur mesurée dans la série de mesures “sensor”, avec la mention supplémentaire “location=kitchen” et le champ “temperature”, avec la valeur “24.7”. Cette valeur mesurée apparaît immédiatement sur Grafana après la mise en place d’un tableau de bord.

ESP8266 / ESP32

Afin de connecter les petits capteurs à la base de données, ils doivent être envoyés à la base de données par un microcontrôleur. Le moyen le plus simple est d’utiliser les contrôleurs ESP8266 et ESP32 d’Espressif, car ils peuvent communiquer directement avec le Raspberry Pi via le WiFi. Il existe également une bibliothèque Arduino adaptée, de sorte que la même valeur mesurée peut être transmise en quelques lignes de code :

```c++
InfluxData measurement("sensor");
measurement.addTag("ort", "kueche");
measurement.addValue("temperatur", 24.7);

influx.write(measurement);
```

Un grand inconvénient de ces deux contrôleurs est la consommation de courant élevée due à la connexion WiFi (environ 80mA à 3,3V). Pour le fonctionnement sur batterie, il est donc absolument nécessaire d’utiliser les modes de veille. En outre, la portée est limitée suivant le réseau WiFi utilisé.

LoRaWAN

La meilleure solution pour la consommation d’énergie et la portée est le protocole sans fil relativement nouveau LoRa (Long Range). Un capteur similaire équipé d’un émetteur LoRa mesure constamment la température dans le jardin de l’auteur (avec deux piles alcalines AA et toutes les minutes) depuis près d’un an maintenant et a pu transmettre avec succès des données sur plusieurs kilomètres lors de tests de portée. Cependant, la LoRa nécessite des émetteurs et des récepteurs spéciaux, dont la configuration sera expliquée dans les prochains tutoriels.

Sensor Outside

Autres possibilités

L’article a montré comment un Raspberry Pi combiné avec InfluxDB et Grafana peut être utilisé pour collecter des données de capteurs et les présenter de manière attrayante. L’auteur utilise un tel dispositif depuis environ deux ans. Voici quelques applications intéressantes, qui ont toutes été intégrées dans le système :

  • la consommation d’électricité, d’eau et de gaz
  • Température intérieure, humidité et concentration de CO2
  • Station météorologique (température, humidité et pression et alimentation par panneaux solaires)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *