Catégories
Le coin des étudiants

Raspberry pi – Un outil permettant d’afficher des données en provenance d’un topic MQTT sur des graphiques.

Introduction

Lorsque l’on a un projet IOT utilisant un broker MQTT sur une carte Raspberry pi, il est bien souvent utile de pouvoir visualiser les données sur un affichage graphique.

Cet article va vous présenter comment mettre en place cet affichage. Pour cela, nous allons commencer par configurer un broker MQTT sur une carte Raspberry, puis, mettre en œuvre la chaine telegraf, influxdb, grafana. Nous allons enfin, pour montrer le fonctionnement, créer un script python qui aura pour but de publier des valeurs aléatoires sur un topic MQTT. Sur une carte Raspberry pi, il est toujours utile de pouvoir mettre en unité systemd un script pour pouvoir l’exécuter au démarrage de la carte. C’est pour cela, que dans une partie supplémentaire, vous apprendrez comment faire ceci.

Configuration d’un broker MQTT

installez les packages mosquitto mosquitto-clients grâce à la commande apt. Configurez ensuite mosquitto en créant un fichier /etc/mosquitto/conf.d/broker.conf et en y ajoutant la ligne :

listener 1883 qui définit le port du broker MQTT

allow_anonymous true qui permet aux applications de se connecter sans s’authentifier.

Vous devriez alors un fichier broker.conf qui ressemble à ceci :

Redémarrez le service mosquitto :

sudo systemctl restart mosquitto 

À la fin de cette section, vous devez avoir un broker MQTT fonctionnel qui permet aux clients de se connecter anonymement sur le port 1883.

Mise en place de
la chaine telegraf, influxdb, grafana

Afin de configurer votre raspberry pi avec les serveurs influxdb et grafana, veuillez vous référer au tutoriel suivant : https://simonhearne.com/2020/pi-influx-grafana

Attention, la clé gpg de Influxdata à changé depuis la rédaction du guide de sinomhearne, il y a donc deux solutions possibles pour pouvoir réaliser à bien l’installation :

La première solution est de désactiver la signature du répertoire en modifiant, lors de l’étape 2, après sa création, le fichier /etc/apt/sources.list.d/influxdb.list

en remplaçant la ligne :

deb https://repos.influxdata.com/debian bullseye stable 

par :

deb [trusted=yes] https://repos.influxdata.com/debian bullseye stable

cela a l’avantage de pouvoir être fait grâce à la commande sed :

sudo sed -i 's/deb/deb\ \[trusted=yes\]/' \  
/etc/apt/sources.list.d/influxdb.list

La seconde solution, qui est certainement la meilleure d’un point de vue de la sécurité, est de remplacer pendant l’installation

repos.influxdata.com/influxdb.key 

par

 repos.influxdata.com/influxdata-archive_compat.key

Une fois que vous avez installé InfluxDB et Grafana et connecté Grafana à Influxdb, il faut installer telegraf. Pour ce faire, utilisez la commande :

sudo apt install -y telegraf

Vous allez ensuite devoir configurer telegraf pour qu’il se connecte au broker MQTT puis qu’il remonte les données sur la base influx. Créez un fichier de configuration config.conf dans le répertoire /etc/telegraf/telegraf.d

Ajoutez dans ce fichier les lignes suivantes :

Ces lignes permettent d’indiquer à télégraf de souscrire au topic data, de récupérer des float dessus, et de les rediriger dans une base de données influxdb. Démarrez telegraf à l’aide de la commande suivante :

sudo sh -c 'systemctl enable telegraf && systemctl start telegraf'

À la fin de cette section vous devriez avoir un serveur Influxdb avec un username « grafana », un mot de passe que vous avez vous même entré, et une table home. Vous avez enfin un serveur grafana qui utilise cet utilisateur pour récupérer ses données dessus. Vous devriez aussi avoir un module telegraf qui récupère ses données sur un topic data pour les rediriger dans la table home.

Réalisation d’un script python qui envoie des données aléatoires sur un topic MQTT

Nous avons précédemment fait souscrire telegraf à un topic mqtt data. Nous allons désormais démontrer l’utilité de notre installation en réalisant un script python que nous appellerons script-py.py. Ce script publie sur le topic data toutes les secondes une valeur aléatoire comprise entre 0 et 100.
Voici le script python :

Pour pouvoir lancer ce script, il faut installer le module python grâce à la commande

sudo apt install python3-paho-mqtt 

Nous allons aussi créer un nouveau Dashboard Grafana pour pouvoir visualiser ces données. Pour pouvoir créer un dashboard, il faut tout d’abord lancer le script python pour remplir un minimum la base de donnée. Ensuite, connectez-vous au serveur grafana sur le port 3000 depuis un navigateur, faites nouveau Dashboard, et sélectionnez les données à afficher comme sur la figure.

Vous devriez ainsi voir les données retournées par le script python sur le serveur grafana comme ci-dessous :

Réalisation d’un script pour lancer automatiquement
le script python.

Au point actuel, vous pouvez observer que le script python envoie bien des données sur le serveur Grafana. Cependant, il est rare, lorsque l’on est dans un projet qui nécessite une carte raspberry pi, de lancer manuellement un script. C’est pour cette raison que vous allez voir une méthode utilisant systemd afin de lancer le script python au démarrage de la carte automatiquement.

Cette méthode induit de réaliser une unité systemd ainsi qu’un script bash pour lancer le script python.

Le script python créé plus tôt est placé dans /home/pi et s’appelle script-py.py. Placer le script bash dans le dossier /home/pi/bin et lui donner le nom lanceur.sh . Ouvrez le script bash et copier le code suivant :

Donnez lui les droits d’exécutions :

chmod a+x /home/pi/bin/launceur.sh

Enfin, je vais placer l’unitée systemd dans le dossier /etc/systemd/system. Il portera le nom de l’unité systemd créée. Dans mon cas cela sera lanceur-script.service . Écrivez dedans les lignes suivantes :

Et voilà, vous n’avez plus qu’à exécuter la ligne

sudo sh -c ’systemctl enable lanceur-script.service && \
systemctl start lanceur-script.service’

Vous avez désormais un programme qui tourne sur une carte raspberry dont les données générées sont affichées de manière graphique sur un serveur grafana.

Sitographie

Blog sur le site officiel influxdata pour apprendre à configurer telegraf : https://www.influxdata.com/blog/mqtt-topic-payload-parsing-telegraf/

lien git pour aider à configurer telegraf : https://github.com/influxdata/telegraf/blob/master/plugins/outputs/influxdb/README.md

Catégories
Recherche technologique

Raspberry Pi – Un outils pour surveiller vos développement IoT

Lorsque l’on développe un objet communicant arrive le moment ou l’on souhaite s’assurer de son fonctionnement dans le temps, cet article va vous présenter comment configurer en quelques heures un Raspberry Pi pour répondre à ce besoin.

Pour cela nous allons commencer par faire un capteur température/pression/humidité Wi-Fi sur base STM32, puis nous utiliserons le Raspberry Pi en point d’accès Wi-Fi avec les outils nécessaire pour surveiller l’évolution des valeurs sous forme de courbes.

Capteur Wi-Fi – STM32F401

Ce capteur est basé sur la carte RUSHUP Cloud-JAM qui est le condensé des carte NUCLEO-F401RE, X-NUCLEO-IDW01M1, X-NUCLEO-IKS01A2 et X-NUCLEO-NFC01A1. Nous allons modifier le code exemple pour n’utiliser que la partie W-Fi et capteurs de température/pression/humidité le tout connecté à un broker MQTT local.

Le capteur publiera toute les minutes sur un broker MQTT ses valeurs de température, humidité et pression.

https://raw.githubusercontent.com/rushup/Cloud-JAM/master/JAM-TOP.jpg

Liens site officiel

Étapes

  • Installation de l’environnement de développement de STMicroélectronic STM32CubeIDE
    • https://www.st.com/en/development-tools/stm32cubeide.html
  • Récupérer les sources modifiée depuis le dépôt gitlab Elyxoft en utilisant la branch « develop »
  • Importer sous STM32CubeIDE, Compiler et charger sur la cible
  • A ce point si l’on se connecte à l’aide d’un terminal série sur le port série virtuel de la carte en 460800bauds on voit apparaître les informations de debug et le fait que la carte ne se connecte pas au Wi-Fi de notre Raspberry Pi, celui-ci n’étant pas configurer …

Monitoring – Raspberry Pi

Plusieurs éléments sont à installer sur le Raspberry Pi, pour cela nous allons suivre quelques guides :

Arrivé à ce point, notre Tag doit être en mesure de ce connecter en Wi-Fi au Raspberry et publier toute les minutes ces information sur le topic « stm32 », il est facile de vérifier cela en regardant les log de la console série, puis en souscrivant au topic stm32 depuis MQTT.fx.

Il faut maintenant créer une base dans infuxdb dans laquelle nous allons enregistrer nos valeurs. Depuis un terminal sur le Raspberry Pi :

pi@raspberrypi:~ $ influx
Connected to http://localhost:8086 version 1.8.0
InfluxDB shell version: 1.8.0
> CREATE DATABASE stm32
> SHOW DATABASES
name: databases
name
----
_internal
stm32

Notre base de donnée est prête à recevoir des enregistrement, on utilise Node-RED pour récupérer les informations qui arrive sur le topic MQTT, les mettre en forme et les envoyé dans la base de donnée.

Description des différents module :

  • mqtt in
  • Fonction de transformation
  • influxdb batch
  • N’oublier pas de « déployer » le flow pour le rendre actif. Les modules de debug permette de vérifier la bonne transformation des messages.

La dernière étape connecté grafana à influxdb et afficher les informations.

La première chose va être de configurer une source de donnée :

Maintenant on va ajouter un dashboard et un premier panel pour la température :

Les deux champs à renseigner sont :

  • « Nucleo » dans la ligne FROM, il doit apparaitre dans une liste déroulante, si ce n’est pas le cas, c’est que la connexion à influxdb n’a pas eu lieu.
  • « temperature » dans la ligne SELECT, même remarque que précédemment.

On ajoute dans le même dashboard deux autre pannel pour la pression et l’humidité et l’on doit obtenir :

Conclusion

Avec très peu d’effort on obtient un outils capable de présenter les résultats de nos capteurs de façon agréable et facilement exploitable.