IMA3/IMA4 2018/2020 P10
Sommaire
Présentation générale
Administration système, déploiement et surveillances de logiciels dans un réseau de capteurs
Description
Dans le cadre de recherches dans le domaine des réseaux de capteurs et des objets connectés, notre projet consiste à développer une solution de maintenance et de reconfiguration à distance d'un ensemble de nœuds déployés dans un environnement réel. Afin de faciliter la vie de ces chercheurs sur le test de leurs hypothèses, ils pourront facilement et rapidement déployer leurs créations sur tout les nœuds souhaités grâce à un système de sélection ou au téléchargement du nouveau code sur tous les nœuds du réseau.
Objectifs
L'objectif principal de notre projet est de créer une interface permettant de tester des programmes ou logiciels en les déployant sur le vaste réseau de capteurs. Nous devons rendre accessible chaque nœud indépendamment des autres, tout en permettant un lien entre tous, afin d'envoyer le contenu vers tout ou une partie des nœuds disponibles.
Enfin, nous allons permettre la mise à jour et l'adaptation du chemin d'envoi des données des nœuds, entre eux, et avec l'application de gestion.
Analyse du projet
Positionnement par rapport à l'existant
Analyse du premier concurrent
Notre concurrent principal reste le FIT(Future Internet Testing Falicity)/IoT-Lab. Il s'agit d'un laboratoire dont les recherches se portent sur les différents domaines scientifiques tel que les adresses de communications sans fils, des réseaux de capteurs, des protocoles de routages basse consommation et applications embarquées. Ce laboratoire dispose de plus de 1500 de nœuds de capteurs sans fils propagés à travers les six sites différents en France qui sont : Inria Grenoble (640), Inria Lille (293), Inria Saclay (264), ICube Strasbourg (400), Institut Mines-Télécom Paris (160) and CITI Lab Lyon (29). Chaque site dispose de capacités matérielles et de nœuds différentes, mais tous les sites sont interconnectés et disponibles via le même portail Web,
Analyse du second concurrent
Il y aussi une autre équipe au sein du laboratoire de recherches en informatique(LRI) qui est en train de faire un projet sur les capteurs de réseaux. Les questions abordées par l’équipe concernent les réseaux ad hoc sans fil et mobiles, les réseaux de capteurs et les réseaux fixes, et concernent la qualité de service, la sécurité, le contrôle d’admission, la réservation de ressources, le calcul des limites déterministes et la consommation d’énergie. L'analyse de la performance est donnée à la fois théoriquement, pour déterminer les limites, et par simulation, pour enrichir l'analyse et inclure un support pour un environnement dynamique.
Scénario d'usage du produit ou du concept envisagé
De nombreux chercheurs et développeurs créent de nouveaux codes adaptés à l'utilisation d'un réseau de capteurs. Ces codes doivent être facilement déployés sur le réseau afin de pouvoir y réaliser des essais rapides. Cela permet de corriger rapidement les erreurs liées à leur mauvais fonctionnement.
Supposons que notre réseau est réparti sur une très grande surface. Le chercheur voulant tester son code doit l'envoyer à partir de son ordinateur sur le réseau. Notre projet va lui permettre de rester assis dans son bureau et de ne pas devoir charger le code sur chaque nœud de capteurs un par un.
A travers notre projet, nous voulons rendre possible ces exports rapides de données. Il nous faudra utiliser un routeur qui permettra la liaison entre chaque nœud et un serveur de données. Dans chacun de ses nœuds, on trouve plusieurs nœuds de mesures comportant chacun un microcontrôleur associé à des capteurs.
Pour pouvoir envoyer ses codes sur le réseau, le chercheur dispose d'une interface web graphique connectée au même serveur que les nœuds de collecte et le routeur. Cette interface permettra la sélection de tout ou d'une partie du réseau sur laquelle il doit effectuer les modifications. Ceci se fera à l'aide des microcontrôleurs du réseau et de Raspberry Pi gérant chaque nœud. Une fois la zone d'export choisie, il pourra envoyer ses codes et les mettre à jour en quelques clics. Le code sera envoyé sur le serveur et distribué par le routeur sur les nœuds sélectionnés. Les différents nœuds feront un retour sur la réception à travers le serveur via le routeur, et le chercheur pourra ainsi tester rapidement sa réalisation.
Dans le cas où le chercheur veut tester l'envoi de données par radio par exemple, il pourra placer un grand nombre de nœuds communiquant en filaire avec le routeur et par radio entre eux. Les nœuds seront capables de transmettre l'information au suivant et de choisir un autre chemin (contourner un nœud par exemple) en cas de perturbations (présence de réseau Wi-Fi à proximité, etc...), pour envoyer l'information. Ces nœuds seront capables de communiquer avec le serveur pour indiquer la bonne réception des données, les résultats obtenus ou éventuellement le mauvais fonctionnement d'un ou plusieurs capteurs.
Bibliographie et webographie
Préparation du projet
Cahier des charges du groupe
Nous allons devoir répondre à plusieurs problématiques.
Tout d'abord nous devons créer un site web dynamique permettant l'envoi des données au serveur et au final, aux nœuds de capteurs sélectionnés. Pour cela, nous allons devoir implémenter un système d'envoi de fichiers vers un routeur. Le routeur (Banana Pi) va filtrer les informations reçues, et envoyer les fichiers C aux différents nœuds représentés par des Raspberry Pi.
Ensuite, il faudra que les Raspberry envoient correctement le code reçu aux différents capteurs de leur nœud et puissent récupérer les informations à retourner.
Pour se faire, on utilise l'utilitaire Python Ansible, permettant la gestion et la configuration des nœuds de capteurs. Celui-ci va récupérer les fichiers C et les distribuer sur les différents capteurs affectés. Le retour d'information se fera par le chemin inverse jusqu'au serveur web sous forme de fichiers contenant les données issues des capteurs.
Cahier des charges des équipes
Equipe 1 : Ziyad HOUSSAINI
Dans notre équipe, il faudra configurer le routeur afin de pouvoir assurer la communication entre la Rasberry Pi qui sera configurée par l'équipe 1 et le serveur web qui sera mise en place par l'équipe 3. Pour ce faire, on va utiliser une banana pi sur laquelle sera installer OpenWRT (fonctionnement à revoir).
Equipe 2 : Eymeric CAPRONNIER
- Dans un premier temps, il faudra que les Raspberry Pi envoient correctement le code reçu aux différents capteurs sélectionnés.
- Puis il faudra retourner le fichier contenant les différentes données générés par les capteurs.
Equipe 3 : Guillaume ROUILLÉ
Dans un premier temps, notre équipe devra réaliser une interface web utilisateur permettant la connexion au serveur de données. Pour se faire, on va utiliser les langages HTML et CSS pour la forme du site, et les langages PhP et SQL pour lier le site à la base de données.
Ensuite, il faudra créer un système de sélection des capteurs sur lesquels envoyer le ou les fichiers. Il faudra faire correspondre chaque capteur des différents nœuds avec un type prédéfini et créer une page de sélection sur le site.
Enfin, nous devrons envoyer les fichiers sur le serveur, où ils seront récupérés par le routeur pour être traiter. Il faudra créer une page permettant la mise en ligne de fichiers. Cette page affichera la progression de l'envoi et sera capable de valider la bonne réception des données.
Choix techniques : matériel et logiciel
Equipe 1
- Une Banana Pi de type comme routeur ;
- Une image (OS) de type Debian ou OpenWrt afin de pouvoir utiliser la carte.
- Un carte SD à laquelle on va mettre l'image ;
- Un cable HDMI afin de pouvoir visualiser l'interface.
Equipe 2
- Une Raspberry Pi et son alimentation ;
- Un câble Ethernet ;
- 4 diodes et résistances ;
- Un câble HMDI/VGA ;
- Ansible pour faciliter le déploiement des fichiers C sur les nœuds.
Equipe 3
- Une base de données PostgreSQL pour le stockage des données ;
- Un interpréteur PhP et un serveur web (Apache) ;
- Un site moderne basé sur les Frameworks CSS Bootstrap et Vue.js.
Liste des tâches à effectuer
Equipe 1
Déploiement d'un routeur à base de Banana Pi R1. Ce routeur permettra l'accès internet aux différentes Raspberry Pi et il filtrera les accès. Déploiement de OpenWRT sur ce routeur.
- Documentation sur le fonctionnement du routeur Banana Pi ;
- Documentation sur le fonctionnement de OpenWRT ;
- Déploiement de OpenWRT sur le routeur et configuration ;
- Création d'un point d'accès filaire sur la carte routeur.
Equipe 2
Déploiement des logiciels sur les Raspberry Pi avec la création de différents scripts pour faciliter ce déploiement, en utilisant notamment Ansible.
- Documentation sur le fonctionnement des Raspberry pi ;
- Documentation sur Ansible ;
- Création du code afin d'envoyer le code reçu aux différents capteurs, et par la suite un ficher sera créé afin d'envoyer les données issus des capteurs.
Equipe 3
Déploiement d'un serveur permettant de récupérer les différentes données issues des capteurs (création d'une base de données et d'un site web dynamique pour l'affichage).
- Documentation sur les Frameworks Web Bootstrap.css et Vue.js ;
- Documentation sur PhP et Apache ;
- Création d'une interface web utilisateur ;
- Création d'une base de données relationnelle pour gérer les nœuds ;
- Envoi du fichier C sur le serveur ;
- Envoi du numéro du capteur sur le serveur.
Calendrier prévisionnel
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.
Equipe 1
Dates | Objectifs |
---|---|
05/02 |
|
19/02 |
|
05/03 |
|
19/03 |
|
02/04 |
objectif |
16/04 |
objectif |
30/04 |
objectif |
14/05 |
objectif |
28/05 |
objectif |
04/06 |
objectif |
Equipe 2
Dates | Objectifs |
---|---|
05/02 |
objectif |
19/02 |
objectif |
05/03 |
objectif |
19/03 |
objectif |
02/04 |
objectif |
16/04 |
objectif |
30/04 |
objectif |
14/05 |
objectif |
28/05 |
objectif |
04/06 |
objectif |
Equipe 3
Dates | Objectifs |
---|---|
05/02 |
|
19/02 |
|
05/03 |
|
19/03 |
|
02/04 |
|
16/04 |
|
30/04 |
|
14/05 |
|
28/05 |
|
04/06 |
|
Réalisation du Projet
Projet S6
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.
Semaine 4
Pour l'équipe 1 :
Première recherche sur la carte Banana PI, à l'aide de la datasheet, dont le lien est ci-dessous.
L'utilisation de la datasheet va nous permettre de voir l'intégralité des données de la carte BPI-R1
c'est à dire les branchements, le courant d'alimentaion et les composants.
https://www.electronicsdatasheets.com/datasheet/BPI-R1.pdf
Pour l'équipe 2 : Documentation sur l'utilisation d'Ansible et sur les Raspberry Pi
Pour l'équipe 3 :
Première recherche sur la création du site web. Recherche des ressources PhP, HTML, CSS nécessaires (Bootstrap).
J'ai laissé de côté la partie JavaScript et Vue.js car elles ne sont pas utiles pour commencer le site.
Création de la base de données projetCapteurs sur Houplin et des fonctions de connexion du site à celle-ci.
La base contient 2 tables :
- capteurs : numéro du capteur | nom du capteur | Raspberry à laquelle le capteur est relié | type de capteur
- membres : numéro du membre | nom | prénom | mot de passe
La table capteurs stocke les informations concernant les capteurs et permettra la sélection au moment de l'envoi du fichier binaire compilé.
La table membres répertorie les informations concernant les membres et permettra la connexion sur le site web.
Semaine 5
Pour l'équipe 1 :
Pour l'équipe 1 :
Après avoir effectué des recherches sur la carte BPI R1, cette séance va me permettre de faire des recherches sur l'image qui va me permettre de faire marcher la BPI R1 et après avoir fait des recherches, on a finalement retrouvé le site qui a l'image OpenWrtLa première que je devais faire était d'installer un fichier OpenWrt dans une carte SD, et ce fichier servait à faire fonctionner la banana pi. Voici le lien qui nous a permis de trouver l'image:
https://openwrt.org/toh/view/toh_fwdownload?dataflt%5B0%5D=supported%20current%20rel_%3D18.06.2.
Voici une image du site d'openwrt :
Pour l'équipe 2 :
Pour l'équipe 3 :
Début de la création du site : mise en place d'un système de connexion basique et d'un minimum de design pour rendre clair le site.
Je me suis limité à des fonctions de connexion et déconnexion sans modifier le reste des pages en fonction de l'état de connexion, et sans créer de variables de session.
Pour cela, j'ai utilisé des fonctions Php telles que pg_connect et pg_close, fonctions liées à une base de données PostgreSQL.
Semaine 6
Pour l'équipe 2 :
Afin d'installer Ansible, deux lignes de commande ont dû être lancé dans le terminal d'un pc en E306 ( car l'installation d'ansible n'était pas possible dans les autres salles) :
apt install ansible
puis
export https_proxy=https://proxy.polytech-lille.fr:3128
L'utilisation d'ansible se fera ensuite de la manière suivante : Ecriture d'un fichier .yml contenant les différentes tâches à effectuer sur un serveur (réseau de capteur) spécifique puis le lancement s'effectuera ensuite en lanceant la commande ansible suivi du nom du serveur sur lequel on souhaite travailler.
Pour l'équipe 3 :
Adaptation du système de connexion avec création de variables de session. Ces variables permettent de maintenir une connexion ouverte en changeant de page et à structurer les pages afin qu'elles affichent les bonnes choses.
En effet, un individu connecté ne verra pas la page de connexion par exemple.
Amélioration du système de compte avec la mise en place du hachage des mots de passe.
Semaine 7
Pour l'équipe 1 :
Pour l'équipe 2 : Création du script de base d'allumage d'une led en fonction du binaire envoyé par le serveur.
Pour l'équipe 3 :
Création de la page de sélection des capteurs sous forme d'un formulaire Php. La sélection n'est pas au point mais l'affichage est correct.
Je laisse toujours de côté la partie dynamique, en essayant de rendre possible la sélection multiple pour l'envoi du formulaire.
Cette page contiendra aussi une partie de chargement du fichier à envoyer (unique pour le moment).
Semaine 8
Pour l'équipe 1 :
Pour l'équipe 2 :
Documentation sur le montage qui permet de contrôler une led grâce à une raspberry et à un code créé permettant d'allumer ou d'éteindre la led
Pour l'équipe 3 :
Modification de la page principale (sélection d'un capteur possible). Possibilité de joindre un seul fichier binaire compilé.
Un fichier XML est créé avec le numéro du capteur sélectionné. Ce fichier sera transmis avec le fichier binaire compilé.
Documentation sur le protocole XMLHttpRequest : XMLHttpRequest
Le fichier XML contient le code suivant :
<?xml version='1.0' encoding='ISO-8859-1'?>
<sensor><numero>3</numero></sensor>
Semaine 9
Pour l'équipe 1 :
Pour l'équipe 2 :
Pour l'équipe 3 :
Upload d'un fichier binaire compilé sur le serveur.
Il faut normaliser le nom du fichier en ligne et récupérer les fichiers binaire compilé et XML.
Semaine 10
Pour l'équipe 1 :
Pour l'équipe 2 :
Pour l'équipe 3 :
Récupération des données de localisation et du nom du fichier uploadé et stockage dans le fichier XML.
Création du script de récupération du fichier XML et du fichier binaire compilé à partir du routeur.
Pour télécharger le fichier binaire et le fichier XML stockés sur le serveur, on utilise la commande wget dans un script nommé script.sh :
Pour exécuter un script automatique : Règle Cron
Voici le script de téléchargement automatique des fichiers toutes les minutes :
Il s'agit d'une crontab qui s’exécute toutes les minutes.
Cette crontab va lancer le script de téléchargement à chaque exécution, permettant ainsi de garder le fichier binaire à jour.