Tutoriel¶
- Pour information, avant de commencer ce tuto, il commence à partir de là où il faut envoyer les données grâce au lien MQTT (Mosquitto) vers InfluxDB (Base de données) (voir le schéma ci-dessous).
Schéma |
|
Installation VSCode + PlatformIO IDE¶
- Une fois VSCode installer, allez dans les extensions puis chercher et installer "PlatformIO IDE".
Extension |
|
PlatformIO IDE |
|
Code sur Git vers VSCode¶
- Allez sur le Git puis sur les trois points "..." et sur "Ouvrir avec VS Code".
Git |
|
- Une fois sur VSCode, il vous demande de choisir où enregistrer le code. Choisissez là où vous le voulez et faites "Select as Repository Destination" puis "Add to Workspace".
Add to Workspace |
|
Configuration Wi-Fi + NTP¶
- Une fois que vous avez appuyé sur "Add to Workspace", allez dans le fichier "secret.h" et changer les valeurs de "SSID" et "PWD" pour mettre un réseau Wi-Fi puis Ctrl + s pour sauvegarder.
Wi-Fi |
|
- Une fois que vous avez choisi le réseau Wi-Fi, si vous avez pris celui du Fablab, alors il faut mettre cette adresse IP "192.168.23.254" dans le main.cpp (dossier src sur la gauche) ligne 39.
- Si vous avez choisi un partage de connexion, alors il faut mettre ceci "europe.pool.ntp.org".
NTP |
|
Branchement¶
- Après avoir fait cela, il faut brancher le projet comme sur l'image si dessous et brancher les deux câbles USB sur le pc.
- ATTENTION à ne pas se tromper de sens dans les branchements (regardez bien l'image).
Branchement |
|
Téléverser le code¶
- Vous pouvez maintenant envoyer le code dans le projet. Pour cela, allez sur VSCode et appuyez sur le bouton 1 puis attendre qu'il marque SUCCESS (en vert) et après appuyer sur le bouton 2 (voir image si dessous).
Bouton 1 et 2 |
|
- Normalement, vous devriez avoir un résultat similaire à cela :
25.50 25.50 25.60 25.60 25.70|60.20 55.90 55.60 59.80 55.40|01717757755
VM + SSH¶
- À présent, vous allez devoir vous connecter à la machine virtuelle (VM) en SSH.
- Pour cela, vous allez avoir besoin d'un compte utilisateur sur la VM et de la clé publique de votre ordinateur (demander à Pierre de vous créer un compte et donner lui votre clé publique et pas la privée).
- Pour avoir votre clé publique, faite cette commande dans un terminal :
ssh-keygen -t ed25519
- Si tous, c'est bien passé, vous devriez avoir cela :
SSH |
|
Script python¶
- Une fois sur la VM, vous devez copier le script python sur le Git et le coller dans un fichier sur la VM que nous allons créer.
- Modifiez-le "influx_bucket", "influx_token" et "influx_org" par vos valeurs.
**Ctrl + s pour enregistrer et Ctrl + x pour fermer le fichier.
- Normalement, vous devriez avoir ceci apparaitre :
ScriptPython |
|
- Vous pouvez aussi créer un daemon pour que le script tourne en permanence sur la VM.
Configuration Grafana¶
- Passons à la configuration de Grafana.
- Tous d'abord il vous faut un compte en Administrateur (demander à Pierre ou à Jean-Baptiste)
- Puis aller sur "Configuration" puis "Data Sources" et cliquer sur "Add data source".
- Pour la data source, vous aurez besoin de faire des commandes pour créer Organisation, Bucket et Token si nécessaire.
Data source |
|
- Vous arrivez sur cette page ou il faut chercher et choisir InfluxDB.
InfluxDB |
|
- Après avoir choisi InfluxDB, suivez l'image ci-dessous.
Date source |
|
- 0 - Name
- Donner le nom que vous souhaitez à votre data source.
- 1 - Query Language
- Dans le menu déroulant, choisissez "Flux".
- 2 - HTTP
- Dans "URL" mettre celle-ci "http://localhost/8086" et laissez par défaut les autres paramètres.
- 3 - Auth
- Vérifiez que tout soit désactivé.
- 4 - Custom HTTP Headers
- Appuyez sur "Add header" et dans "Header" mettre "Authorization" et dans "Value" mettre votre Token de cette manière, "Token Votre_Token ".
- 5 - InfluxDB Details
- Dans "Organization" mettre le nom de la base de donnée que vous utilisez.
- Dans "Token" mettre le même Token que vous avez mis pour le 4 (juste le Token sans mettre "Token" devant).
- Dans "Default Bucket" Mettre le nom du Bucket que vous utilisez.
- Ne pas toucher aux autres paramètres.
- ATTENTION, ne jamais mettre le token admin !
- Enfin, cliquez sur "Save & Test" cela doit afficher un message en vert.
Dans le cas où c'est un message en rouge alors c'est que vous avez mal fait les paramètres ou que le Token et le Bucket que vous avez renseigné sont incorrectes.
- On va maintenant créer un dashboard sur Grafana.
Dashboard |
|
- Une fois le dashboard créé, on va faire le graphique, suivez l'image ci-dessous.
Graphique |
|
- 1 - Choisissez bien "Graph".
- 2 - Donnez un titre à votre graphique.
- 3 - Choisissez votre Data Sources (créé précédemment)
- 4 - Écrire le code flux ou vous pouvez le copier ici et l'ajuster si besoins.
- 5 - Vous pouvez créer une alerte dans le cas où vous voudriez être avertie quand la batterie est presque à plat, voir ici pour savoir comment créer une alarme.
Définition¶
- Machine Virtuelle : Virtual Machine : En gros, c'est un ordinateur virtuel dans un ordinateur physique.
SSH¶
- protocole Secure Shell : C'est une méthode pour contrôler à distance un ordinateur par ligne de commande (via le réseau).
InfluxDB¶
Organisation¶
Remplacez "<nom_organisation>" par une organisation existante.
- Commande pour savoir les organisation existant :
influx org list
Bucket¶
Remplacez "<nom_organisation>" par une organisation existante et "<id_organisation>" par un identifiant d'une organisation.
Token¶
Remplacez "<nom_organisation>" par une organisation existante, "<id_organisation>" par un identifiant d'une organisation, "<id_bucket>" par un identifiant d'un bucket et "<votre_description>" par une description.
Code Flux¶
À ajuster selon vos besoins (le bucket, les capteurs et le numéro de la grappe).
- Pour Humidité
from(bucket: "Fablab")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r["_measurement"] == "grappe3")
|> filter(fn: (r) => r["_field"] == "humidite")
|> filter(fn: (r) => r["numero_capteur"] == "capteur1" or r["numero_capteur"] == "capteur2" or r["numero_capteur"] == "capteur3" or r["numero_capteur"] == "capteur4"or r["numero_capteur"] == "capteur5")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> aggregateWindow(every: $__interval, fn: mean)
- Pour Température
from(bucket: "Fablab")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r["_measurement"] == "grappe3")
|> filter(fn: (r) => r["_field"] == "temperature")
|> filter(fn: (r) => r["numero_capteur"] == "capteur1" or r["numero_capteur"] == "capteur2" or r["numero_capteur"] == "capteur3" or r["numero_capteur"] == "capteur4"or r["numero_capteur"] == "capteur5")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> aggregateWindow(every: $__interval, fn: mean)
- Pour Batterie
from(bucket: "Fablab")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "grappe3")
|> filter(fn: (r) => r["_field"] == "batterie")
|> filter(fn: (r) => r["numero_capteur"] == "capteur2")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> aggregateWindow(every: $__interval, fn: mean)
Daemon¶
- Daemon c'est un type de programme informatique, un processus ou un ensemble de processus qui s'exécute en arrière-plan plutôt que sous le contrôle direct d'un utilisateur.
- Pour faire un daemon du script, il faut mettre son script dans "/scripts-faits-maison/forwarder-mqtt-influxdb/votre_script.py"
- Après cela, il faut créer un fichier .service dans "/etc/systemd/system"
- Mais avant, il faut quitter le mode "sudo -i" donc, marquez juste "exit" puis faite :
cd /etc/systemd/system
- Pour créer le fichier "nom_de_votre_script.service".
sudo nano nom_de_votre_script.service
- Et mettre ce code dedans (faite attention de ne pas vous tromper dans "ExecStart" (le nom et le chemin du script))
[Unit]
Description = MQTT to Influxdb forwarder
After = network.target
Conflicts = getty@tty1.service
Requires=influxd.service
Requires=influxdb.service
Requires=mosquitto.service
[Service]
Type = simple
ExecStart = /usr/bin/python3 /root/scripts-faits-maison/forwarder-mqtt-influxdb/votre_script.py
User = root
Group = root
Restart = always
SyslogIdentifier = <Name of logs for the service>
RestartSec = 5
TimeoutStartSec = infinity
StandardInput = tty-force
[Install]
WantedBy = multi-user.target
Maintenant, il faut le recharger pour prendre en compte le nouveau service :
sudo systemctl daemon-reload
Démarrer le service et l'activer au démarrage de l'ordinateur :
sudo systemctl start votre_service.service
sudo systemctl enable votre_service.service
Vérifier le statut du service :
sudo systemctl status votre_service.service