Middleware for IoT / M2M - Semestre 9

Annee academique : 2024-2025 Enseignant : T. Monteil (LAAS-CNRS) ECTS : 2.5 Categorie : IoT, Protocoles de communication, Middleware

Cours connexes :


PART A - Presentation Generale

Vue d'ensemble

Le cours “Middleware for IoT / M2M” aborde les architectures logicielles intermediaires (middleware) et les protocoles de communication dedies a l’Internet des Objets (IoT) et aux communications Machine-to-Machine (M2M). Il couvre l’ensemble de la chaine, depuis les protocoles de messagerie leger comme MQTT jusqu’aux standards de gestion de ressources comme oneM2M, en passant par le prototypage rapide d’applications IoT avec Node-RED.

L’objectif est de former des ingenieurs capables de concevoir, deployer et integrer des systemes IoT complets, en maitrise des protocoles de communication adaptes aux contraintes des objets connectes (bande passante limitee, consommation energetique, fiabilite).

Objectifs pedagogiques :

Position dans le cursus

Ce module s’appuie sur les bases acquises anterieurement :

Il prepare et se connecte a :


PART B - Experience et Contexte

Organisation et ressources

Le module combinait cours theoriques et travaux pratiques progressifs :

Cours magistraux :

Travaux pratiques (TP) :

Bureau d’Etudes (BE) :

Outils utilises :

Ressources :

Methodologie d'apprentissage

Phase 1 : Comprendre les fondamentaux : Etudier l’architecture IoT, les modeles de communication (publish/subscribe vs request/response) et les contraintes specifiques des objets connectes.

Phase 2 : Maitriser MQTT : Installer un broker, tester la communication en ligne de commande, puis programmer un microcontroleur pour publier et s’abonner a des topics.

Phase 3 : Decouvrir oneM2M : Comprendre l’arbre de ressources, deployer un CSE, creer des Application Entities et des conteneurs via API REST.

Phase 4 : Prototypage rapide : Utiliser Node-RED pour integrer tous les elements (capteurs, MQTT, dashboard, notifications) en un systeme fonctionnel.

Phase 5 : Integration et projet : Combiner toutes les briques dans le BE M2M pour realiser une architecture IoT complete.

Mon role et mes responsabilites

Au cours de ce module, j’ai ete amene a :

Difficultes rencontrees

Configuration reseau du broker : La mise en place de Mosquitto avec les bons parametres d’ecoute et d’authentification a necessite plusieurs iterations pour fonctionner correctement avec le NodeMCU.

Programmation ESP8266 : L’integration de la bibliotheque ArduinoMqttClient avec la gestion WiFi sur le NodeMCU a demande une bonne comprehension du cycle de vie de la connexion.

Standard oneM2M : La richesse du standard oneM2M (nombreux types de ressources, droits d’acces ACP, structure hierarchique) est intimidante au debut. La documentation du MOOC a ete essentielle pour progresser.

Integration Node-RED : La coordination entre les noeuds MQTT, les fonctions JavaScript et le dashboard a necessite du temps de mise au point pour obtenir un systeme reactif et fiable.


PART C - Aspects Techniques Detailles

1. Protocole MQTT - Architecture et principes

MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie leger, concu pour les environnements contraints (bande passante limitee, ressources reduites). Il repose sur le modele publish/subscribe avec un intermediaire central appele broker.

Architecture MQTT :

Composant Role Description
Publisher Emetteur Publie des messages sur des topics
Subscriber Recepteur S’abonne a des topics pour recevoir les messages
Broker Intermediaire Gere la distribution des messages entre publishers et subscribers
Topic Canal Chaine hierarchique identifiant le sujet du message (ex: sensor/temperature)
Message Donnee Contenu publie sur un topic (payload)

Principes du publish/subscribe :

Fonctionnement detaille :

  1. Le subscriber s’abonne a un topic aupres du broker (ex: insa/luminosity)
  2. Le publisher publie un message sur ce topic
  3. Le broker transmet le message a tous les subscribers abonnes a ce topic
  4. Le decoupage hierarchique des topics permet une organisation flexible (ex: building1/floor2/room3/temperature)

Figure : Architecture MQTT - Modele publish/subscribe avec broker central


Niveaux de QoS (Quality of Service) :

MQTT propose trois niveaux de qualite de service pour la livraison des messages :

QoS Nom Garantie Usage
0 At most once Aucune garantie, “fire and forget” Donnees non critiques, telemetrie frequente
1 At least once Message livre au moins une fois (doublons possibles) Donnees importantes, tolerance aux doublons
2 Exactly once Message livre exactement une fois (handshake en 4 etapes) Donnees critiques (facturation, commandes)

Autres fonctionnalites MQTT :

Securite MQTT :

Protocole de transport : MQTT fonctionne au-dessus de TCP/IP, ce qui garantit une communication fiable avec un overhead minimal. La taille de l’en-tete MQTT est de seulement 2 octets minimum, ce qui le rend ideal pour les reseaux contraints.

2. Installation et test du broker MQTT Mosquitto

Mosquitto est l’implementation open-source de reference du protocole MQTT. J’ai installe et configure le broker sur un environnement Linux, puis teste la communication publish/subscribe en ligne de commande.

Installation et demarrage :

# Installation
sudo apt-get install mosquitto mosquitto-clients

# Demarrage du broker
mosquitto -v

# Abonnement a un topic
mosquitto_sub -h localhost -t "test/topic"

# Publication d'un message
mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT"

Figure : Demarrage du broker Mosquitto en mode verbose

Figure : Test publish/subscribe avec mosquitto_pub et mosquitto_sub


Configuration avancee du broker :

Les tests ont permis de valider le bon fonctionnement de la chaine de communication : le subscriber recoit instantanement les messages publies par le publisher via le broker, confirmant le modele asynchrone du publish/subscribe.

3. Programmation NodeMCU/ESP8266 avec MQTT

Le NodeMCU est une carte de developpement basee sur le microcontroleur ESP8266, integrant un module WiFi. J’ai programme cette carte pour qu’elle communique via MQTT avec le broker Mosquitto, en utilisant l’Arduino IDE et la bibliotheque ArduinoMqttClient.

Caracteristiques du NodeMCU/ESP8266 :

Fonctionnalites implementees :

  1. Connexion WiFi : le NodeMCU se connecte au reseau WiFi local
  2. Connexion MQTT : etablissement de la connexion avec le broker Mosquitto
  3. Publication de l’etat du bouton : a chaque pression sur le bouton physique, publication de l’etat sur le topic button/state
  4. Publication de la luminosite : lecture du capteur de luminosite (ADC) et publication sur le topic light/state a chaque pression du bouton
  5. Abonnement a des topics : reception de commandes depuis d’autres dispositifs

Extrait de la logique de programmation :

// Connexion WiFi
WiFi.begin(ssid, password);

// Connexion au broker MQTT
mqttClient.connect(broker, port);

// Publication sur topic
mqttClient.beginMessage("button/state");
mqttClient.print(buttonState);
mqttClient.endMessage();

// Lecture luminosite et publication
int luminosity = analogRead(A0);
mqttClient.beginMessage("light/state");
mqttClient.print(luminosity);
mqttClient.endMessage();

Figure : Schema de l'application NodeMCU - publication des etats bouton et luminosite via MQTT


Points techniques importants :

4. Standard oneM2M - Architecture et ressources

oneM2M est un standard international pour les communications M2M et l’IoT. Il definit une architecture de middleware universelle permettant l’interoperabilite entre differents systemes IoT, independamment du reseau sous-jacent.

Architecture oneM2M :

Composant Sigle Role
Common Services Entity CSE Fournit les services communs (enregistrement, decouverte, gestion des donnees, securite)
Application Entity AE Represente une application IoT qui interagit avec le CSE
Infrastructure Node IN Noeud serveur hebergeant le CSE principal
Middle Node MN Noeud intermediaire (passerelle)
Application Service Node ASN Noeud capteur/actionneur

Arbre de ressources oneM2M :

L’architecture oneM2M organise les donnees sous forme d’un arbre de ressources hierarchique :

CSEBase (in-cse)
  |-- ACP (Access Control Policy)
  |-- AE (Application Entity - ex: Mon_AE)
  |     |-- Container (DATA)
  |     |     |-- ContentInstance (valeur capteur)
  |     |     |-- ContentInstance (valeur capteur)
  |     |-- Container (COMMAND)
  |           |-- ContentInstance (commande actionneur)
  |-- AE (Autre application)

Types de ressources principaux :

Type Code (ty) Description
ACP 1 Politique de controle d’acces (droits CRUD + Notify + Discovery)
AE 2 Application Entity - represente une application
Container 3 Conteneur de donnees (structure hierarchique)
ContentInstance 4 Instance de contenu (donnee individuelle)
Subscription 23 Abonnement pour notification automatique

Operations CRUD via API REST :

L’interaction avec le CSE se fait par des requetes HTTP RESTful :

# Creation d'une Application Entity
POST /~/in-cse/in-name
Headers: X-M2M-Origin: '', Content-Type: application/json;ty=2
Body: {"m2m:ae": {"api": "app.iot", "rr": "true", "rn": "Mon_AE"}}

# Creation d'un Container
POST /~/in-cse/in-name/Mon_AE
Headers: X-M2M-Origin: admin:admin, Content-Type: application/json;ty=3
Body: {"m2m:cnt": {"rn": "DATA"}}

# Creation d'un ContentInstance
POST /~/in-cse/in-name/Mon_AE/DATA
Headers: X-M2M-Origin: admin:admin, Content-Type: application/json;ty=4
Body: {"m2m:cin": {"con": "42"}}

# Recuperation du dernier contenu
GET /~/in-cse/in-name/Mon_AE/DATA/la
Headers: X-M2M-Origin: admin:admin, Accept: application/json

Droits d’acces (ACP) :

Les ACP definissent les permissions sur les ressources :

Valeur Permission
1 CREATE
2 RETRIEVE
4 UPDATE
8 DELETE
16 NOTIFY
32 DISCOVERY
63 Toutes les permissions

ACME CSE :

Pour les travaux pratiques, nous avons utilise ACME, une implementation open-source du standard oneM2M developpee pour la recherche et l’enseignement. ACME fournit un CSE complet avec interface web, support HTTP/MQTT/CoAP, et une base de donnees locale.

5. Prototypage rapide avec Node-RED

Node-RED est un outil de programmation visuelle base sur Node.js, concu pour le prototypage rapide d’applications IoT. Il permet de creer des flux de donnees en connectant des noeuds graphiques, simplifiant considerablement le developpement et l’integration de systemes IoT.

Principes de Node-RED :

Types de noeuds utilises :

Categorie Noeuds Fonction
Entree mqtt in, inject Reception de messages MQTT, injection de donnees
Traitement switch, function, change Logique conditionnelle, transformation de donnees
Sortie mqtt out, debug, email Publication MQTT, affichage de debug, envoi email
Dashboard gauge, chart, button, text Composants d’interface utilisateur

Figure : Flux Node-RED integrant reception MQTT, logique de controle et actionneurs


a. Verification de la connectivite MQTT

La premiere etape a consiste a ajouter un noeud mqtt in dans Node-RED, configure pour se connecter au broker Mosquitto et s’abonner au topic insa/luminosity. Le noeud debug a permis de confirmer la bonne reception des valeurs envoyees par le NodeMCU.

b. Gestion des capteurs et actionneurs

Un flux a ete cree pour simuler la logique de controle d’un systeme d’eclairage automatique :

Cette logique illustre le patron de base d’un systeme IoT reactif : capteur → traitement → actionneur.

c. Dashboard de visualisation et controle

Grace au module node-red-dashboard, un tableau de bord interactif a ete cree pour :

Figure : Dashboard Node-RED - visualisation capteurs et controle LED


d. Notifications email

Le module node-red-node-email a ete integre pour envoyer des alertes automatiques par email lors de :

Ce mecanisme de notification proactive est essentiel dans les systemes IoT pour assurer une reaction rapide aux evenements critiques.

6. Comparaison des protocoles IoT : HTTP vs MQTT vs CoAP

Le choix du protocole de communication est une decision architecturale majeure dans tout projet IoT. Chaque protocole presente des avantages et contraintes specifiques.

Critere HTTP MQTT CoAP
Modele Request/Response Publish/Subscribe Request/Response
Transport TCP TCP UDP
Overhead Eleve (en-tetes texte) Faible (2 octets min) Tres faible (4 octets)
QoS Non natif 3 niveaux (0, 1, 2) Confirmable/Non-confirmable
Decouverte Non Non Oui (ressource .well-known/core)
Observe Non Oui (subscribe) Oui (option Observe)
Securite TLS TLS DTLS
Usage typique API web, REST Telemetrie, notification Objets tres contraints
Consommation Elevee Moderee Faible
Latence Moderee Faible Tres faible

Quand utiliser quel protocole :

7. API RESTful pour l'IoT

L’architecture REST (Representational State Transfer) est au coeur de l’IoT moderne, notamment dans le standard oneM2M. Les principes REST appliques a l’IoT :

Principes REST :

Application au standard oneM2M : Dans oneM2M, l’arbre de ressources est accessible via des URL RESTful. Les en-tetes HTTP specifiques (X-M2M-Origin, Content-Type avec type de ressource) permettent au CSE d’identifier l’appelant et le type de creation demande.

8. Pile protocolaire IoT

L’IoT utilise une pile protocolaire adaptee aux contraintes des objets connectes :

Couche Protocoles standard Protocoles IoT
Application HTTP, FTP MQTT, CoAP, AMQP, oneM2M
Transport TCP, UDP TCP (MQTT), UDP (CoAP)
Reseau IPv4, IPv6 6LoWPAN, RPL
Liaison Ethernet, WiFi IEEE 802.15.4, BLE, LoRa, Sigfox
Physique Cables, ondes RF sub-GHz, 2.4 GHz

Specificites de la pile IoT :

9. Patrons de communication M2M

Les communications Machine-to-Machine suivent plusieurs patrons architecturaux :

1. Publish/Subscribe (MQTT) :

2. Request/Response (HTTP, CoAP) :

3. Observer (CoAP Observe, oneM2M Subscription) :

4. Pipeline / Data Flow (Node-RED) :

10. Prototypage rapide avec Node-RED - Approfondissement

Node-RED se revele un outil extremement puissant pour le prototypage IoT grace a plusieurs caracteristiques avancees :

Flux JSON exportable : Les flux Node-RED sont serialises en JSON, permettant le versionnement (Git), le partage et le deploiement automatise. Lors du TP, nous avons exporte notre configuration dans le fichier Boukouiss_Chanfreau_Node-Red.json.

Noeuds personnalises (function) : Le noeud function permet d’ecrire du code JavaScript pour des traitements complexes :

// Exemple : transformation de donnees capteur
var luminosity = msg.payload;
if (luminosity > 50) {
    msg.payload = "ON";
    msg.topic = "led/command";
} else {
    msg.payload = "OFF";
    msg.topic = "led/command";
}
return msg;

Integration multi-protocole : Node-RED supporte nativement MQTT, HTTP, WebSocket, TCP, UDP et peut etre etendu pour supporter CoAP, oneM2M, bases de donnees (InfluxDB, MongoDB), services cloud (AWS IoT, Azure IoT Hub).

Avantages pour le prototypage IoT :


PART D - Analyse Reflexive et Perspectives

Competences acquises

Maitrise des protocoles IoT : Comprehension approfondie de MQTT (publish/subscribe, QoS, broker), des API RESTful pour oneM2M, et des principes de CoAP. Capacite a choisir le protocole adapte selon les contraintes du projet.

Programmation embarquee IoT : Competence pour programmer un ESP8266/NodeMCU et l’integrer dans une architecture MQTT : connexion WiFi, publication/abonnement, gestion des capteurs et actionneurs.

Architecture middleware M2M : Comprehension du standard oneM2M, de l’arbre de ressources, des ACP, et de l’interaction avec un CSE via API REST. Capacite a deployer et configurer une infrastructure oneM2M.

Prototypage rapide : Maitrise de Node-RED pour concevoir des flux IoT complets, integrant capture de donnees, logique de traitement, dashboard de visualisation et systemes de notification.

Integration systeme : Capacite a combiner toutes les briques (capteurs, broker MQTT, CSE oneM2M, Node-RED, dashboard) dans une architecture IoT coherente et fonctionnelle.

Points cles a retenir

1. MQTT est le protocole de reference pour l’IoT : Sa legerete, son modele publish/subscribe et ses niveaux de QoS en font le choix privilegie pour la telemetrie et la communication entre objets connectes.

2. oneM2M standardise l’interoperabilite M2M : Ce standard international fournit une couche d’abstraction au-dessus des protocoles de transport, permettant l’interoperabilite entre systemes heterogenes.

3. Node-RED accelere considerablement le prototypage : La programmation visuelle permet de passer rapidement de l’idee au prototype fonctionnel, ce qui est crucial dans les projets IoT ou l’iteration rapide est essentielle.

4. Le choix du protocole depend du cas d’usage : HTTP pour les API web, MQTT pour la telemetrie temps reel, CoAP pour les objets tres contraints. Il n’existe pas de solution universelle.

5. La securite IoT est un enjeu majeur : L’authentification, le chiffrement (TLS/DTLS) et le controle d’acces doivent etre integres des la conception de l’architecture.

Auto-evaluation

Ce cours a constitue ma premiere experience approfondie avec les protocoles IoT comme MQTT et le standard oneM2M. J’ai trouve ces technologies relativement accessibles grace aux nombreuses bibliotheques existantes et a la documentation disponible. La progression pedagogique des TP (de la ligne de commande Mosquitto a l’application Node-RED complete) a permis une montee en competence progressive et solide.

La mise en oeuvre pratique m’a permis de comprendre l’utilite concrete de ces concepts. J’ai par la suite reutilise certains de ces outils dans notre projet innovant pour mettre en place une communication efficace entre dispositifs, ce qui confirme la pertinence de cet enseignement.

La richesse du standard oneM2M m’a impressionne : la structure hierarchique des ressources, le systeme de droits d’acces et les mecanismes de notification permettent de construire des architectures IoT robustes et interoperables. Cependant, cette richesse implique une courbe d’apprentissage non negligeable.

Mon avis

Ce cours a ete l’un de mes favoris du semestre car il combine parfaitement les aspects materiel et logiciel. En tant qu’aspirant ingenieur en systemes embarques, cette association entre programmation de microcontroleurs et architectures logicielles middleware correspond exactement a mon profil de competences vise.

Points forts :

Points a ameliorer :

La demarche progressive des labs a rendu l’apprentissage a la fois agreable et tres formateur. Partir de la communication MQTT basique en ligne de commande, evoluer vers la programmation Arduino avec la bibliotheque MQTT, puis integrer le tout avec Node-RED offre une vision complete de la chaine IoT. C’est exactement le type de cours qui prepare a des projets professionnels concrets.

Applications professionnelles

Ingenieur IoT :

Ingenieur systemes embarques :

Architecte solutions M2M :

Liens avec les autres cours :


Documents de Cours

Planning MOOC oneM2M

Planning et contenu du MOOC oneM2M suivi en autonomie : introduction au standard, architecture, types de ressources.

Telecharger


Rapports et Projets

Rapport Middleware for IoT - BE

Rapport complet du bureau d'etudes : architecture IoT deployee, integration MQTT, oneM2M et Node-RED, resultats experimentaux.

Telecharger le rapport BE

Rapport TP1-2 : MQTT et NodeMCU

Rapport des travaux pratiques 1 et 2 : installation Mosquitto, communication publish/subscribe, programmation ESP8266.

Telecharger le rapport TP1-2

Ouvrir le sujet de TP

Cours suivi en 2024-2025 a l’INSA Toulouse, Departement Genie Electrique et Informatique, specialite ISS (Innovative Smart Systems).