Laboratoire de Systèmes d'Information (SIn) de 3ème année en énergie et techniques environnementales
https://github.com/Iomys/lab_DataNetworks
En Python, on travaille souvent dans des environnements virtuels, ils permettent de travailler avec les mêmes versions des paquets, quels que soit la machine utilisée et les versions installée "de base"
Dans ce projet, nous développons sur notre laptop, puis excécutons les programmes sur le raspberry-pi. L'intérêt d'un environnement virtuel est totalement justifié.
Pour que le programme fonctionne correctement, il est nécessaire d'installer les librairies de requirements.txt
pip3 install virtualenv
Exécuter les commandes dans le dossier du répertoire
virtualenv -p python3 venv # création d'un environnement virtuel avec python3
source venv/bin/activate # activation de l'environnement virtuel
pip install -r requirements.txt # installation des paquets requis
deactivate
source venv/bin/activate
Il est nécessaire de remplir le fichier de configuration crendentials.toml avec les données du broker mqtt, de la mystrom switch et du server influxdb, selon ce format :
[MQTT]
broker =
username =
password =
[InfluxDB]
token =
org =
bucket =
[MyStromSwitch]
name =
macAdress =
Afin que les scripts fonctionnent en arrière-plan sur la raspberry-pi, nous allons créer un service avec systemd.
sudo nano /etc/systemd/system/plug_2_mqtt.service
2. Coller la configuration en veillant à ce que le chemin du répertoire (ici /home/pi/lab_DataNetworks
) soit le bon
[Unit]
Description=Plug to MQTT
After=multi-user.target
[Service]
Type=simple
Restart=always
ExecStart=/home/pi/lab_DataNetworks/venv/bin/python /home/pi/lab_DataNetworks/plug_2_mqtt.py
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload # Recharge les fichiers de configuration
sudo systemctl enable plug_2_mqtt.service # Activer le service
sudo systemctl start plug_2_mqtt.service # Démarrer le service (pour la première fois, ensuite il sera automatiquement activé)
Il est possible de vérifier le status du service en entrant sudo systemtl status plug_2_mqtt.service
sudo nano /etc/systemd/system/mqtt_2_influx.service
2. Coller la configuration en veillant à ce que le chemin du répertoire (ici /home/pi/lab_DataNetworks
) soit le bon
[Unit]
Description=MQTT to influxdb
After=multi-user.target
[Service]
Type=simple
Restart=always
ExecStart=/home/pi/lab_DataNetworks/venv/bin/python /home/pi/lab_DataNetworks/mqtt_2_influx.py
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload # Recharge les fichiers de configuration
sudo systemctl enable mqtt_2_influx.service # Activer le service
sudo systemctl start mqtt_2_influx.service # Démarrer le service (pour la première fois, ensuite il sera automatiquement activé)
Il est possible de vérifier le status du service en entrant sudo systemtl status mqtt_2_influx.service
Le serveur Flask permet de lier le bouton grafana au reste du système en transformant la reqête REST en requête MQTT.
Attention, le serveur utilisé ici est un serveur de développement, il n'est pas sécurisé et ne doit pas être allumé par un service 24h/24. Il serait nécessaire d'utiliser un autre service pour lancer un serveur WSGI comme Waitress. Le cas d'un serveur en mode production n'a pas été abordé dans ce laboratoire. La documentation Flask donne les informations pour le déploiement du serveur sur cette page.
Cette commande permet de générer un certificat SSL pour que le serveur tourne en https. Seulement, il n'est pas vérifié, donc la plupart des navigateurs ou outils comme requests refusent de s'y connecter.
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
Pour faire tourner le serveur en https, il est nécessaire de modifier la ligne de lancement de celui-ci par app.run(host='blackpi009.hevs.ch',port=8080,ssl_context=('cert.pem', 'key.pem'))
L'utilisation depuis grafana ne fonctionne cependant pas : une possibilité est que le raspberry pi est sur le réseau device de la HES alors que le serveur grafana est accessible depuis l'extérieur. Ce serait une faille de sécurité pour le réseau de l'école de pouvoir effectuer des requêtes à l'intérieur du serveur grafana pour accéder aux autres appareils. Le serveur grafana est probablement isolé du reste de l'infrastructure.
Une dashboard grafana a été développée pour visualiser les données de la DB Influx et agir sur les boutons (cela ne fonctionne pas)
Accéder à Grafana : grafana.sdi.hevs.ch
Le schéma Grafana JSON est disponible dans le fichier grafana.json