SmartKoulak

De fablab
Aller à : navigation, rechercher

La gestion d’une exploitation agricole est une tâche complexe et chronophage. Les agriculteurs doivent en effet tenir compte de nombreux paramètres souvent peu précis et utiliser des méthodes empiriques pour assurer la qualité de leur exploitation, sans toutefois garantir l’optimalité des dépenses.

Le secteur de l’agriculture, aujourd’hui encore, n’a que peu connu la révolution numérique. De nombreuses tâches manuelles pourraient ainsi être dématérialisées via un suivi ou une automatisation logicielle.

Le projet SmartKoulak vise à redonner aux agriculteurs un plein contrôle de leur exploitation ainsi que des ressources utilisées.

Code source

Disponible sur github

Membres de l'équipe

  • Jérome Theate
  • Ronan Demimuid
  • Rémi Battet
  • Anthony Suong
  • Samuel Bouhadana

Architecture de la solution

Infra.png

Des antennes embarquées sur des cartes Nulceo situées sur le terrain sont dotées de capteurs et transmettent des informations à intervalles de temps réguliers au serveur via le protocole radio LoRa.

L'antenne récepteur radio reçoit les données et les transmets à un broker MQTT à lora.campusiot.imag.fr. Ces données sont récupérées par un daemon Python via la GATEWAY 118 qui traite les paquets MQTT puis insert les données dans la base de données InfluxDB.

Cette base de données permet une surveillance efficace des terres agricoles. Elles peut ainsi être utilisée pour automatiser des actions ou aider l'utilisateur - via une interface web - à prendre des décisions sur les actions à effectuer, comme par exemple arroser un champ.

Récupération des données des capteurs

Nous avons utilisé 3 capteurs :

  • un capteur d'humidité des sols (YL-69)
  • un capteur de température et humidité de l'air (DHT11)
  • un capteur de luminosité (KY-018)

Ces trois capteurs sont connectés sur le shield mbed SX1272, qui est en fait le module avec l'antenne LoRa. Le YL-69 est branché sur le port ANA_A1, le DHT11 sur le port DIO_D6, et le KY-018 sur le port ANA_A3.

Ce shield est lui-même branché sur une carte SODAQ ExpLoRer, qui est une carte à base Arduino. Le programme Arduino chargé sur la carte permet de récolter les données des capteurs, et les envoyer (via LoRa normalement, ou via port Série USB avec le programme test pour les capteurs) à intervalle régulier (toutes les minutes).

Le payload envoyé est une chaîne de caractères de la forme suivante : "soilHumidity/airHumidity/airTemperature/brightness"

  • soilHumidity : entier sur 10 bits (0-1023) avec 0 correspondant à complètement sec
  • airHumidity : pourcentage (0-100) en float
  • airTemperature : degré Celcius en float
  • brightness : entier sur 10 bits (0-1023) avec 0 correspondant à complètement sombre

De LoRa à InfluxDB

L'antenne émettrice (notre ExpLoRer avec le SX1272), lors de sa mise en route, tente de rejoindre le réseau LoRa via OTAA (Over The Air Activation). C'est justement la partie qui n'a pas fonctionné chez nous, donc nous avons utilisé l'ABP (Authentication By Personalisation). Le problème avec ABP étant que pour qu'un message LoRa soit bien récupéré par le serveur LoRa, il fallait que le compteur UPLINK dans le serveur et dans l'antenne émettrice soit le même, ce qui demandait d'envoyer n messages dans le vide à chaque réinitialisation de l'antenne pour pouvoir synchroniser l'émetteur et le serveur.

Un fois toute la configuration LoRa correcte, un message de l'émetteur est récupéré par une Gateway LoRa, et envoyé sur le serveur LoRa. Ce dernier est accessible à l'addresse https://lora.campusiot.imag.fr. Il s'agit d'un broker MQTT fourni par l'école. En allant à cette adresse avec un navigateur, on a accès à un panneau de contrôle qui permet notamment de visualiser les trames reçues par le broker. La connexion entre l'antenne réceptrice et le broker MQTT était préconfigurée.

Il faut ensuite se connecter au broker MQTT via un mqtt-client, nous avons utilisé pour cela Pyhton et "paho-client" pour réaliser un daemon localisé sur une machine distincte (Dans notre cas, il s'agit d'une Raspberry Pi distante). Il reçoit les données sous la forme d'un string JSON qu'il est possible de convertir en dictionnaire. Enfin, il stocke ces données dans une base de données InfluxDB - orientée Time Series - située sur la même machine.

Attention, les réseaux publics Eduroam ou Wifi-campus bloquent la connexion vers le broker, il faut donc passer par un autre réseau, typiquement le réseau 4G.

Serveur web

Page principale de l'application web

Le serveur Web est hébergé sur le Raspberry Pi principal hébergeant également la base de données InfluxDB, d'où sont extraites les données pour permettre les visualisations graphiques via le framework de visualisation Grafana.

Écrit en Javascript, le serveur web fonctionne avec nodeJS. Son rôle est de permettre une visualisation synthétique et interactive des données des capteurs et d'interagir avec les systèmes contrôlables présent sur les surfaces agricoles telles qu'un système d'irrigation. L'interface web offre également la possibilité de consulter la météo, facteur déterminent dans le suivi des cultures agricoles.

Concernant les technologies, plusieurs packages NodeJS ont été utilisés. Parmi les principaux nous pouvons citer : express-sse permettant la gestion d'évènement. Le frontend est ainsi mit à jour automatiquement si le serveur détecte une modification de nos systèmes contrôlables ; influx facilitant les interactions avec la base de données éponyme ; jsonWebToken pour la gestion de l'authentification.

L'application web est sécurisée par un système de compte. Nous avons défini quelques compte par défaut, tel que "admin" (mot de passe : "admin"). Il est possible d'ajouter des comptes et d'en modifier les identifiants depuis l'application. Les données des comptes sont stockées dans une base de données SQLite située à la racine de l'application.

Contrôlables

Lorsque certaines conditions sont satisfaites - déduites de l'état courant de la surface agricole grâce aux données capteur - les systèmes contrôlables peuvent s'activer ou se désactiver. Par exemple en fonction du taux d'humidité du sol et de la température, on peut décider si un arrosage est nécessaire ou non.

Cette prise d'action est assurée par un daemon en Python, controllable-systems_daemon.py .

Les états des différents systèmes sur le terrain, une valve par exemple, sont stockés dans la base de données InfluxDB (orientée séries temporelles).

L'utilisateur peut prendre manuellement le contrôle des systèmes contrôlables depuis l'interface web, ceux-ci ne sont alors plus activés/désactivés par le daemon.

Compléments

Mise en œuvre dans le cadre de ce projet :

Le code remis à l'issu du projet est configuré pour fonctionner sur nos terminaux. Il est disponible à l'adresse : https://github.com/Theate/ProjetPILBI.git

Il est tout de même actuellement possible de démarrer le serveur web en installant Nodejs - sudo apt-get install nodejs - en configurant le script 'server.js' pour effectuer les requêtes sur notre base de données influxDB - ligne 30, remplacer 'localhost' par 'redtacos.ddns.net' - la commande - node server.js - permet de lancer le serveur. Dans le cas contraire, installer les packages Nodejs manquant - sudo npm install <package>.

Cette configuration sera valable jusqu'au rendu du matériel le 2 février 2019.

Pour positionner les graphiques sur l'IHM, veuillez noter que les données capteur ont principalement été recueillies sur la journée du 20 janvier.

Technologies utilisées

  • Raspberry Pi 3, Carte SODAQ ExpLoRer
  • LoRa pour les communications radios associé à un broker MQTT
  • Python (paho-mqtt), InfluxDB et SQLite pour la récupération et le stockage des données
  • JS, nodeJS, Grafana, HTML, CSS