Vous êtes sur la page 1sur 10

Dakar Institute of Technology (DIT) 2021 ⎯ 2022

Projet – Internet des Objets | Dr Ousmane SADIO M1 Intelligence Artificielle


_______________________________________________________________________________________________________________

Application IoT : prévention et prédiction des inondations en milieu urbain

Consignes :
˗ Le projet peut se faire en binôme ou en individuel
˗ Rédiger un rapport de projet (intégrer des captures des différentes tâches effectuées)
˗ Créer un fichier zip contenant votre code Arduino
˗ A rendre au plus tard le 03 Juillet 2022 à l’adresse email ousmane.sadio@ucad.edu.sn

Contexte
Plus de la moitié de la population mondiale vit en ville, notamment dans les pays en développement.
L’installation spontanée des nouveaux urbains se fait souvent dans des espaces à risque (bas-fonds,
zones inondables, marécages, rivages…) dans lesquels l’absence de gestion des eaux de pluie peut
entraîner des conséquences graves sur la santé (contact prolongé avec des eaux contaminées),
l’environnement, l’économie ou la sécurité.
L’assainissement en milieu urbain remplit deux fonctions essentielles associées à l’hygiène, à la sécurité
et au confort, qui sont d’éviter les contacts humains avec les déchets (eaux usées) et d’empêcher
l’inondation des surfaces urbaines (eaux pluviales). Les inondations dues à des canalisations obstruées
sont un phénomène très courant en milieu urbain, surtout dans les pays en développement.
L’objectif de ce projet est de concevoir une solution IoT pour la prévention et la prédiction des
inondations en milieu urbain.
Description du système
La solution à déployer est constituée de deux systèmes : un système de prévention des inondations et un
système de prédiction des inondations.
Analyse fonctionnelle
L’analyse fonctionnelle s’occupe des fonctions que le système devra accomplir.
• Système de nettoyage du canal
Ce système est à placer dans les canalisations d’eau usées et pluviales. Il remplit des fonctions suivantes :
̶ F1 : Filtrer les déchets présents dans les canaux
̶ F2 : Déterminer le niveau remplissage du filtre à déchet
̶ F3 : Elever et éliminer les déchets si la quantité atteint un niveau seuil
̶ F4 : Envoyer un message à la passerelle IoT en cas d’obstruction du canal
• Station de surveillance météorologique
La station météo mesure les conditions météorologiques puis les envoie à la passerelle.
̶ F5 : Détecter le niveau d’eau dans le canal
̶ F7 : Mesurer les conditions météorologiques : température, degré hygrométrique…
̶ F8 : Envoyer toutes les 1 minutes les mesures vers la passerelle IoT
• Passerelle IoT
La passerelle IoT recueille les données envoyées par les dispositifs IoT puis les transmet vers le cloud.
̶ F9 : Recueillir les données envoyées par les dispositifs IoT
̶ F10 : Transmettre les données vers une plateforme Cloud pour analyse

______________________________________________________________________________
ousmane.sadio@ucad.edu.sn
Dakar Institute of Technology (DIT) 2021 ⎯ 2022
Projet – Internet des Objets | Dr Ousmane SADIO M1 Intelligence Artificielle
_______________________________________________________________________________________________________________

• Plateforme Cloud
La plateforme Cloud sera responsable du traitement, du stockage et de l’analyse des données IoT.
̶ F11 : Traiter les données IoT
̶ F12 : Stocker les données IoT
̶ F13 : Analyser les données recueillies afin de prédire une inondation
̶ F14 : Envoyer des SMS en cas de prédiction d’une éventuelle inondation
Analyse organique
L’analyse organique s’occupe de la façon dont sera construit le système pour répondre aux attentes de
l’analyse fonctionnelle.
• Système de nettoyage du canal
C’est le système de prévention des inondations, il est basé sur un contrôleur chargé de recueillir les
données de capteurs et de commander les actionneurs.
̶ Filet : est chargé de filtrer les déchets
̶ Plateforme élévatrice : chargée de stocker et d'éliminer les déchets
̶ Arduino UNO : carte basée sur le microcontrôleur ATmega328p. Elle servira de contrôleur.
̶ Servomoteur : chargé de soulever la plateforme élévatrice (comme sur les bennes à ordures)
̶ HC-SR04 : capteur de distance à ultrason qui permet de mesurer le niveau de remplissage du
filtre à déchet. Ce capteur est à placer au-dessus du filtre à déchet.
̶ Module LoRa : module de transmission pour connecter terminal LoRa (le contrôleur) au réseau
LoRaWAN (NB : ne sera pas utilisé dans le projet).
• Station météo
La station de surveillance météorologique est constituée d’un contrôleur chargé de recueillir et de
transmettre les données de capteurs vers la passerelle.
̶ Arduino UNO : carte basée sur le microcontrôleur ATmega328p. Elle servira de contrôleur.
̶ Capteur de niveau d’eau
̶ DHT11 : capteur de température et d’humidité (degré hygrométrique)
̶ Module LoRa : module de transmission pour connecter terminal LoRa (le contrôleur) au réseau
LoRaWAN (NB : ne sera pas utilisé dans le projet).
• Passerelle IoT
La passerelle sera chargée de transférer les données de capteurs vers Google Cloud Platform (GCP) où
une analyse de ces données sera effectuée.
̶ Raspberry Pi 3 ou 4 : ordinateur monocarte où s’exécutera le script Python de la passerelle.
̶ Module LoRa : module de transmission pour connecter terminal LoRa (le contrôleur) au réseau
LoRaWAN (NB : ne sera pas utilisé dans le projet).
NB : la carte Raspberry Pi peut être remplacée par un ordinateur portable ou de bureau.
• Plateforme Cloud
Google Cloud Plateform : ensemble de services Cloud, notamment Cloud IoT Core pour la gestion des
appareils (objets connectés) et les services de traitement, de stockage et d’analyse des données.

______________________________________________________________________________
ousmane.sadio@ucad.edu.sn
Dakar Institute of Technology (DIT) 2021 ⎯ 2022
Projet – Internet des Objets | Dr Ousmane SADIO M1 Intelligence Artificielle
_______________________________________________________________________________________________________________

Architecture IoT
L’architecture des systèmes à déployer est décrite par la figure ci-dessous. Elle englobe la partie système
de prévention des inondations et la partie système de prédiction des inondations.

Voici quelques rappels des services Google Cloud Platform présents sur l’architecture :
˗ IoT Core : sert à créer un registre d'appareils Cloud IoT Core et d’enregistrer le nœud capteur par
le biais de la passerelle L2/L3.
˗ Pub/Sub : c’est le service d’ingestion des données issues du nœud capteur. Reçois les données des
systèmes de prévention et de prédiction des inondations puis les publie dans des topics.
˗ Dataflow : permet de créer un pipeline de traitement des données de capteurs. Le traitement
consiste à stocker les données brutes dans BigQuery ainsi qu’à horodater ces données puis de
calculer la moyenne pour une fenêtre de temps spécifique avant le stockage dans BigQuery.
˗ BigQuery : permet de créer des datasets afin de stocker les mesures brutes de capteurs ainsi que les
moyennes calculées précédemment.
˗ BigQuery ML : service qui permet de créer et d'exécuter des modèles de machine learning
dans BigQuery à l'aide de requêtes SQL standards.
˗ Cloud Function : service FaaS (Function as a Service) qui exécute un code en cas de
réception d’un message indiquant l’obstruction du canal.
˗ Datalab : permet d’explorer les données de capteur stockées dans BigQuery à l’aide d’un notebook
Jupyter. (Ne sera pas utilisé dans ce projet).
˗ Data Studio : sert à créer des dashboard montrant l’évolution de la température et de l’humidité.
(Ne sera pas utilisé dans ce projet).
IoT Core Gateway
Une passerelle est un appareil qui connecte ses appareils clients à Cloud IoT Core et effectue plusieurs
tâches en leur nom. Cloud IoT Core accepte les connexions et la communication via MQTT et HTTP.

______________________________________________________________________________
ousmane.sadio@ucad.edu.sn
Dakar Institute of Technology (DIT) 2021 ⎯ 2022
Projet – Internet des Objets | Dr Ousmane SADIO M1 Intelligence Artificielle
_______________________________________________________________________________________________________________

Pour comprendre les passerelles, vous devez connaître les concepts suivants :
̶ lier/dissocier (bind/unbind) : Créez ou supprimez une association entre l'appareil et la passerelle.
La liaison permet aux appareils d'accéder à Cloud IoT Core via la passerelle sans avoir à fournir
leur propre token Web JSON (JWT).
̶ associer/détacher (attach/detach) : (MQTT uniquement) Activez ou désactivez la
communication entre un appareil authentifié et Cloud IoT Core via la passerelle.
Pour plus de détails consulter la page de documentation sur les passerelles1.
Authentification :
Pour pouvoir utiliser Cloud IoT Core, les appareils autres que des passerelles doivent être authentifiés
auprès de Cloud IoT Core via la passerelle. Une fois les appareils authentifiés, la passerelle peut
effectuer diverses tâches en leur nom. La méthode qu'une passerelle peut utiliser pour authentifier un
appareil auprès de Cloud IoT Core varie selon que vous utilisez le pont MQTT ou HTTP.
Pour plus de détails consulter la page de documentation sur l’authentification dans Cloud IoT Core2.

1
https://cloud.google.com/iot/docs/how-tos/gateways
2
https://cloud.google.com/iot/docs/how-tos/gateways/authentication

______________________________________________________________________________
ousmane.sadio@ucad.edu.sn
Dakar Institute of Technology (DIT) 2021 ⎯ 2022
Projet – Internet des Objets | Dr Ousmane SADIO M1 Intelligence Artificielle
_______________________________________________________________________________________________________________

Travail à faire
Le travail se fera en 3 phases : déploiement du système de prévention des inondations, déploiement de
la station de surveillance météorologique, et enfin déploiement de l’infrastructure et des services Cloud.
Phase 1 : déploiement du système de prévention des inondations
(1) Réaliser un montage électronique constitué d’une carte Arduino UNO, d’un capteur HC-SR04 et
d’un servomoteur.
(2) Ecrire un programme qui permet d’effectuer les actions suivantes :
̶ Insérer les lignes suivantes dans la fonction setup de votre croquis (programme) Arduino. Ces
lignes permettent d’associer (attach) votre station de surveillance météorologique à la passerelle
IoT identifié par le id =1 (sera remplacé dans IoT Core par id=weather-station)
Serial.begin(9600);
Serial.println("#detach,1");
Serial.println("#attach,1");

̶ Mesurer la distance de l’obstacle (dans notre cas les déchets).


̶ Si la distance est inférieure à 20 cm pendant plus de 10 minutes, envoyer une commande de
rotation de 180° au servomoteur afin de de soulever la plateforme élévatrice de déchets.
̶ Si la distance est inférieure à 5 cm pendant plus de 30 minutes, on considère qu’il y a obstruction
du canal.
̶ En cas d’obstruction du canal, signaler cela à la passerelle en envoyant simplement un message
via l’interface série UART (id=1 pour le système nettoyage du canal) :
Serial.println("#1,1");

Exemple : #1,1
̶ Si après obstruction, il y a désobstruction, signaler cela à la passerelle en envoyant simplement
un message via l’interface série UART :
Serial.println("#1,0");

̶ Ouvrir le moniteur série d’Arduino et vérifier si le format des messages est correct.
NB : la fonction millis() permet de mesurer une durée. Pour simplifier votre travail, vous pouvez ignorer
les contraintes de durée dans votre programme (envoyer directement les données).
Phase 2 : déploiement de la station de surveillance météorologique
(3) Réaliser un montage électronique constitué de la carte Arduino UNO, du capteur DHT11
(température et humidité) et d’un capteur de niveau d’eau.
(4) Ecrire un programme qui permet d’effectuer les actions suivantes :
̶ Insérer les lignes suivantes dans la fonction setup de votre croquis (programme) Arduino. Ces
lignes permettent d’associer (attach) votre station de surveillance météorologique à la passerelle
IoT identifié par le id =2 (sera remplacé dans IoT Core par id=canal-cleaner)
Serial.begin(9600);
Serial.println("#detach,2");
Serial.println("#attach,2");

̶ Mesurer la température, l’humidité et le niveau d’eau (FULL=2, HALF_FULL=1 et EMPTY=0)

______________________________________________________________________________
ousmane.sadio@ucad.edu.sn
Dakar Institute of Technology (DIT) 2021 ⎯ 2022
Projet – Internet des Objets | Dr Ousmane SADIO M1 Intelligence Artificielle
_______________________________________________________________________________________________________________

̶ Envoyer les mesures à la passerelle toutes les 60 secondes (id=2 pour la station de surveillance
météorologique):
Serial.println("#2,"+ String(humidite) + "," + String(temperature) +
"," + String(niveau_eau));

Exemple : #2,68.00,26.00,1
̶ Ouvrir le moniteur série d’Arduino et vérifier si le format des messages est correct.
Phase 3 : déploiement de la partie Cloud
Le déploiement se fera par le biais d’un ensemble de scripts Python d’automatisation. Cette méthode
permet d’accéder aux ressources GCP sans pour autant avoir un compte Google App (professionnel). A
la place vous allez utiliser un compte de service (GCP service account) au format json.
(5) Télécharger le dossier nommé PROJET_IOT_M1IA en suivant le lien google drive suivant :
https://drive.google.com/drive/folders/1rZx8aZcSRY3cRKLKnlcbherr2q5PXRvb?usp=sharing
(6) Créer un nouveau projet nommé deploy_infrastructure depuis votre IDE Pycharm avec un
environnement virtuel Python.
̶ Copier le contenu du dossier deploy_infrastructure présent dans le dossier
PROJET_IOT_M1IA vers le dossier (de même nom) du projet Python.
̶ Installer les dépendances indiquées dans le fichier requirements.txt en allant dans Tools puis
cliquer sur Sync Python Requirements. Une nouvelle fenêtre va s’ouvrir, cliquer sur OK.
(7) Noter le numéro de port utilisé par Arduino, ensuite fermer tous les moniteurs série Arduino ouverts.
(8) Editer le fichier de configuration config.json. Ce fichier sera utilisé par plusieurs scripts Python.
Renseigner les valeurs des clés suivantes :
̶ "my_id": indiquer votre nom en minuscule, sans caractères accentués ou spéciaux.
̶ "serial_port": indiquer le numéro de port obtenu à l’étape 7.
NB : ne modifier pas les autres valeurs de clé au risque de créer des bugs lors du déploiement.
(9) Créer un registre d’appareils (Registry) en exécutant le script create_registry.py.
̶ En se basant sur le code et sur la console python, décrire de façon succincte ce que fait le script.
(10) Générer une paire de clés RSA autosignée en exécutant le script generate_certificate.py. Cette
paire de clés permettra d’authentifier la passerelle auprès du service IoT Core.
(11) Ajouter une passerelle (Gateway) en exécutant le script add_gateway.py.
̶ En se basant sur le code et sur la console python, décrire de façon succincte ce que fait le script.
(12) Ajouter une passerelle (Gateway) en exécutant le script add_devices.py.
̶ En se basant sur le code et sur la console python, décrire de façon succincte ce que fait le script.
(ignorer le message " Device exists, skipping").
(13) Afficher l’état de votre infrastructure Cloud (architecture IoT) et des services associés en exécutant
le script infrastructures_status.py.
̶ Vérifier si les ressources suivantes ont été créées : registre, gateway, devices, pubsub topics.
̶ Dans la section GATEWAYS, vérifier si les appareils sont y sont liées (bound devices).
̶ Dans la section REGISTRY, vérifier si les PubSub topics correspondent à ceux listés dans la
section PUBSUB.

______________________________________________________________________________
ousmane.sadio@ucad.edu.sn
Dakar Institute of Technology (DIT) 2021 ⎯ 2022
Projet – Internet des Objets | Dr Ousmane SADIO M1 Intelligence Artificielle
_______________________________________________________________________________________________________________

NB : par défaut, tous les messages envoyés par les appareils sont publiés dans le topic PubSub par
défaut du registre. Pour publier les messages dans un topic spécifique, on créer un subfolder qui sera
associé à ce topic. Ainsi, si par exemple un appareil publie un message dans le topic MQTT
/devices/DEVICE_ID/events/weather_station, alors le subfolder correspond à
weather_station. Ce message sera redirigé vers le topic PubSub associé à ce subfolder, c’est-à-dire
projects/projet-iot-m1a/topics/weather_station_myid.

Si l’état de votre infrastructure Cloud est correct et les paramètres de vos services cohérents, alors Cloud
IoT est prêt à recevoir vos données de capteurs.
(14) Réaliser le montage électronique de la Phase 2, puis téléverser le code correspondant sur la carte
Arduino. Revérifier si le numéro de port de la carte Arduino correspond à celui indiqué dans le fichier
config.json (voir étape 8) puis fermer le moniteur série d’Arduino s’il est ouvert.
(15) Vérifier si les messages issus de la carte Arduino sont reçus sur le port série indiqué et s’ils sont
bien décodés en exécutant le script test_serial.py. Ensuite arrêter le programme.
Si cette étape s’est bien déroulée, vous être maintenant prêt à envoyer les données de capteurs de la
station météo à la passerelle. Cette dernière sera chargée de transférer ces données vers Cloud IoT Core.
(16) Mettez en marche la passerelle en exécutant le script gateway.py.
̶ Observer le log (console python) et assurez-vous que tout fonctionne bien.
Ce script est issu d’un projet de la communauté GoogleCloudPlatform3. Des modifications y ont été
apportées afin de supporter la transmission série et la logique de votre architecture IoT.
NB : Attention, la passerelle doit être en marche en continue afin de toujours transférer les données
de capteurs vers Cloud IoT Core. Par conséquent, le script gateway.py ne doit pas être stoppé. Pour
exécuter les autres scripts, ouvrez une nouvelle fenêtre PyCharm.
(17) Vérifier si les données de capteurs de la station météo sont publiées dans le topic PubSub ci-dessous
en exécutant le script test_pubsub.py.
̶ projects/projet-iot-m1a/topics/weather_station_myid

NB : Il est nécessaire parfois d’exécuter le script test_pubsub.py à plusieurs reprises avant de recevoir
les messages. Assurez-vous aussi que la passerelle est en marche et les données bien transférées.
Arrivé à ce niveau, vous être maintenant prêt à traiter vos données et les stocker dans BigQuery. Le
service Dataflow étant très couteux, en plus du nombre de vCPU limités, vous n’allez pas effectuer le
déploiement du pipeline Dataflow. A la place, vous allez exécuter un pipeline de traitement des données
en local (non optimal).
(18) Créer un nouveau projet nommé data_process_pipeline depuis votre IDE Pycharm avec un
environnement virtuel Python.
̶ Copier le contenu du dossier data_process_pipeline présent dans le dossier
PROJET_IOT_M1IA vers le dossier (de même nom) du projet Python.
̶ Installer les dépendances indiquées dans le fichier requirements.txt en allant dans Tools puis
cliquer sur Sync Python Requirements. Une nouvelle fenêtre va s’ouvrir, cliquer sur OK.
(19) Editer le fichier de configuration config.json en renseigner les valeurs des clés suivantes :
̶ "my_id": indiquer la même valeur que celle du projet deploy_infrastructure.

3
https://github.com/GoogleCloudPlatform/community/blob/master/tutorials/cloud-iot-gateways-
rpi/cloudiot_mqtt_gateway.py

______________________________________________________________________________
ousmane.sadio@ucad.edu.sn
Dakar Institute of Technology (DIT) 2021 ⎯ 2022
Projet – Internet des Objets | Dr Ousmane SADIO M1 Intelligence Artificielle
_______________________________________________________________________________________________________________

(20) Démarrer le pipeline de traitement de données de la station météo en exécutant le script process.py.
̶ Si tout se passe bien, vous devez observer après quelques instants des messages commençant
par "New rows have been added in table…"
NB : Attention, pour une première exécution, le pipeline peut ne pas marcher dû à des problèmes de
synchronisation (création simultanée d’une même table BigQuery à cause de la réception en
simultanée de plusieurs messages PubSub). Dans ce cas relancer immédiatement le script process.py.
(21) Vérifier que les données de la station météo sont bien stockées dans BigQuery en exécutant le script
test_bigquery.py présent dans le projet deploy_infrastructure.
̶ Ce script permet d’afficher les 10 premières lignes de la table où sont stockées les données des
capteurs de la station météo : meteorological_station_dataset.station_myid
Vous être maintenant en mesure de créer et d’évaluer un modèle de Machine Learning pour la prédiction
de la pluie en se basant sur des données météorologiques (12 dernières heures).
(22) Afficher l’état de votre infrastructure Cloud (architecture IoT) et des services associés en exécutant
le script infrastructures_status.py.
̶ Dans la section BIGQUERY, assurez-vous que le dataset ml_meteo_dataset est présent
ainsi que ses tables weather_azure et weather_azure_evaluation.
̶ Dans la section BIGQUERY, assurez-vous que le dataset ml_model_meteo est présent.
(23) Créer et évaluer un modèle BigQuery ML pour la prédiction de la pluie en exécutant le script
rainfall_prediction_training.py.
̶ Commenter les résultats liés à l’entrainement du modèle.
̶ Discuter des performances du modèle en se basant sur le résultat de l’évaluation.
̶ Commenter le résultat de la prédiction de pluie à partir des données de capteurs de la station
météo (le label = 1 correspond à une prédiction positive de la pluie).
Vous êtes maintenant arrivé dans la dernière partie du déploiement de l’architecture IoT. Vous allez
dans ce qui suit, déployer une instance de fonction serveless dans le service Cloud Functions.
(24) Ouvrir le script main.py présent dans l’emplacement (dossier) cloud-functions/flood_prediction.
Ensuite compléter le code afin d’intégrer les actions suivantes :
̶ Implémenter un rules engine (moteur de règles) qui exécute les actions suivantes :
1. Il y a un haut risque d’inondation (HIGH) s’il y a une prédiction de pluie probable et que le
niveau du canal (water_level) est plein (FULL).
2. Il y a un risque modéré d’inondation (MODERATE) s’il y a une prédiction de pluie probable
et que le niveau du canal (water_level) est à moitié plein (HALF_FULL).
3. Il y a un faible risque d’inondation (LOW) s’il y a une prédiction de pluie probable et que
le niveau du canal (water_level) est vide (EMPTY).
4. Il y a un faible risque d’inondation (LOW) s’il y a une prédiction de pluie non probable et
que le niveau du canal (water_level) est vide (FULL).
5. Sinon, il n’y a aucun risque d’inondation (NULL).
̶ Envoyer une alerte SMS lorsqu’il y a un haut risque ou un risque modéré d’inondation. Vous
pouvez utiliser le service Twilio4 pour l’envoi gratuit de SMS (budget de 15.50$ offert).

4
https://www.twilio.com/fr/docs/sms/quickstart/python

______________________________________________________________________________
ousmane.sadio@ucad.edu.sn
Dakar Institute of Technology (DIT) 2021 ⎯ 2022
Projet – Internet des Objets | Dr Ousmane SADIO M1 Intelligence Artificielle
_______________________________________________________________________________________________________________

NB : dans un premier temps, vous devez créer un compte Twilio. Ensuite, activer le service de
messagerie SMS. Cela vous permettra d’obtenir un numéro de téléphone d’envoi (sender_number).
Enfin, le numéro du destinataire (indicatif y compris) doit être enregistré dans Twilio (utiliser le numéro
utilisé pour l’activation de votre compte). Ce n’est pas la peine d’installer la CLI Twilio sur votre
machine.
(25) Déployer la fonction en exécutant le script deploy_function.py. Patienter quelques minutes le
temps que la fonction soit prête. Le nom de la fonction est flood-prediction-myid.
(26) Afficher l’état de votre infrastructure Cloud (architecture IoT) et des services associés en exécutant
le script infrastructures_status.py.
̶ Vérifier si toutes les entités et services de l’architectures sont présentes et opérationnelles.
̶ Dans la section PUBSUB, assurez-vous que le topic projects/projet-iot-
m1a/topics/canal_cleaner_myid est bien présent.

̶ Dans la section REGISTRY, assurez-vous que le topic projects/projet-iot-


m1a/topics/canal_cleaner_myid ainsi que le subfolder canal_cleaner sont bien
présents.
̶ Dans la section CLOUD FUNCTIONS, assurez-vous que le statut de la fonction flood-
prediction-myid est actif.

(27) Afficher le journal (logs) de la fonction flood-prediction-myid en exécutant le script


logs_explorer.py.
̶ Patienter quelques secondes puis observer le log afin de détecter d’éventuels erreurs.
(28) Arrêter la passerelle en arrêtant l’exécution du script gateway.py.
(29) Réaliser le montage électronique de la Phase 1, puis téléverser le code correspondant sur la carte
Arduino. Revérifier si le numéro de port de la carte Arduino correspond à celui indiqué dans le fichier
config.json (voir étape 8) puis fermer le moniteur série d’Arduino s’il est ouvert.
(30) Vérifier si les messages issus de la carte Arduino sont reçus sur le port série indiqué et s’ils sont
bien décodés en exécutant le script test_serial.py. Ensuite arrêter le programme.
Vous être maintenant prêt à envoyer les données du système de nettoyage du canal à la passerelle. Cette
dernière sera chargée de transférer ces données vers Cloud IoT Core.
(31) Mettez en marche la passerelle en exécutant le script gateway.py.
̶ Observer le log (console python) et assurez-vous que tout fonctionne bien.
(32) Vérifier si les données de capteurs du système de nettoyage du canal sont publiées dans le topic
PubSub ci-dessous en exécutant le script test_pubsub.py.
̶ projects/projet-iot-m1a/topics/canal_cleaner_myid

NB : Il est nécessaire parfois d’exécuter le script test_pubsub.py à plusieurs reprises avant de recevoir
les messages. Assurez-vous aussi que la passerelle est en marche et les données bien transférées.
(33) Si le message d’obstruction du canal est publié par PubSub, la fonction flood-prediction-
myid s’exécutera automatiquement. Suivant le moteur de règles implémenté, vous devrez recevoir une
alerte SMS lorsqu’il y a un haut risque ou un risque modéré d’inondation.
NB : Vous risquer d’obtenir plusieurs SMS d’affilé (couteux). Pour éviter cela, arrêter la passerelle (le
script gateway.py). Il est possible de concevoir un système d’alerte gérant la fréquence des alertes,
leurs suivis… Dans ce projet, cette fonctionnalité ne sera pas intégrée.

______________________________________________________________________________
ousmane.sadio@ucad.edu.sn
Dakar Institute of Technology (DIT) 2021 ⎯ 2022
Projet – Internet des Objets | Dr Ousmane SADIO M1 Intelligence Artificielle
_______________________________________________________________________________________________________________

Pour aller plus loin…


Si la solution devait être déployée à une large échelle, c’est-à-dire le placement de plusieurs systèmes
de nettoyage dans divers emplacements du réseau d’évacuation d’eau :
̶ Dites comment cela pourrait-il améliorer la précision des prédictions des risques inondations ?
̶ Quelles autres informations peut-on en tirer ? (Exemple : détection les zones d’obstruction
fréquentes des canaux. Ce qui permet de faire une descente afin de connaitre les causes : jet
d’ordures par la population, mauvais emplacement du système de nettoyage…).
̶ Si les mesures de débit d’eau (vitesse d’écoulement) sont intégrées dans le système, quel apport
cela apporterait-il sur la précision des prédictions des risques inondations ?
̶ A part la prédiction des risques inondations, peut-on valoriser ces données ? Quelles autres
mesures de données vous semble-t-il pertinent d’intégrer dans le réseau d’évacuation d’eau ?
Comment comptez-vous implémenter les principes pour les alertes (voir chapitre 2 cours).
Conclusion
Faire une conclusion du projet : bilan, apport du projet, difficultés rencontrées…

______________________________________________________________________________
ousmane.sadio@ucad.edu.sn

Vous aimerez peut-être aussi