Le protocole MQTT

MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie léger basé sur TCP/IP et conçu spécifiquement pour l’Internet des Objets (IoT → Internet of Things) et les communications machine à machine (M2M)

Principes fondamentaux

MQTT repose sur un modèle de communication publish/subscribe (publication/abonnement).

Dans ce modèle, on trouve :

  • Des publishers :
    clients qui peuvent publier des messages sur des topics (sujets) spécifiques.

  • Des subscribers :
    clients qui s’abonnent à ces topics pour recevoir les messages correspondants.

  • Un broker :
    serveur central qui gère la réception, filtrage et distribution des messages entre les publishers et les subscribers.

Les clients MQTT peuvent être :

  • des applications

  • des capteurs connectés (température, humidité, CO2, …​)

  • des actionneurs connectés (voyant, haut-parleur, électro-vanne, …​)

  • …​ou tout autre dispositif capable de communiquer via MQTT (ex. : smartphone).

mqtt architecture
Exemple de mise en œuvre

Caractéristiques clés

  • Légèreté : MQTT utilise une faible bande passante et consomme peu d’énergie, ce qui le rend idéal pour les appareils IoT à ressources limitées

  • Flexibilité : Le protocole s’adapte à divers environnements réseau, y compris les connexions sans fil instables

  • Extensibilité : MQTT peut gérer un grand nombre de clients simultanément, ce qui est crucial pour les déploiements IoT à grande échelle

  • Qualité de service : Le protocole offre différents niveaux de fiabilité pour la livraison des messages, s’adaptant aux besoins spécifiques de chaque application

Applications industrielles

Exemples :

  • L’industrie 4.0 et l’IIoT (Internet Industriel des Objets)

  • Les smart cities et la gestion des infrastructures urbaines

  • La domotique et les maisons intelligentes

  • La logistique et la gestion de la chaîne d’approvisionnement

  • Les systèmes de surveillance environnementale

Sécurité

MQTT prend en charge divers mécanismes de sécurité, notamment :

  • Authentification des clients par nom d’utilisateur et mot de passe

  • Chiffrement des communications via SSL/TLS.

  • Contrôle d’accès basé sur les topics (→ ACL : Access Control List)

Topics

Les topics de MQTT permettent d’organiser et de filtrer efficacement les messages transitant par le protocole.

Ils prennent la forme de chaîne de caractères organisées hiérarchiquement en utilisant le caractère ‘/’ comme séparateur (comme dans un chemin d’accès Unix).

Lors d’un abonnement à un topic, on peut utiliser 2 caractères “joker” :

  • le ‘+’ qui remplace un seul niveau de topic

  • le ‘#’ qui remplace l’ensemble des topics situés plus bas dans la hiérarchie (doit être placé en fin)

Exemples :

  • lab/ciel/c12/co2

    topic sur lequel est publié le taux de CO2 relevé en salle C12 de la section de BTS CIEL au lycée Alphonse Benoit

  • lab/ciel/c25/co2

    topic sur lequel est publié le taux de CO2 relevé en salle C25 de la section de BTS CIEL au lycée Alphonse Benoit

  • lab/ciel/c12/temperature

    topic sur lequel est publié la température relevée en salle C12 de la section de BTS CIEL au lycée Alphonse Benoit

  • lab/ciel/+/co2

    → abonnement aux topics sur lesquels sont publiés les taux de CO2 relevés dans toutes les salles de la section de BTS CIEL au lycée Alphonse Benoit

  • lab/ciel/#

    → abonnement aux topics sur lesquels sont publiés tous les indicateurs environnementaux (températures, taux de CO2) de toutes les salles de la section de BTS CIEL au lycée Alphonse Benoit

Ne pas utiliser de ‘/’ en début ou en fin de topic :

  • syntaxes incorrectes :

    • /lab/ciel/c12/co2,

    • lab/ciel/c12/co2/,

    • /lab/ciel/c12/co2/

  • syntaxe correcte : lab/ciel/c12/co2

Même si ce n’est pas défini dans la spécification MQTT, la majorité des brokers propose une hiérarchie de topics système qui débute par $SYS.
Exemples dans le broker Mosquitto :

  • $SYS/broker/bytes/received

    → Le nombre total d’octets reçus depuis que le broker a démarré

  • $SYS/broker/clients/connected

    → Le nombre de clients actuellement connectés

Last Will & Testament

Cette fonctionnalité permet au broker de signaler une déconnexion inattendue d’un client à l’ensemble des autres clients souhaitant en être informés.

Ce signalement se matérialise par l’émission d’un message sur un topic.

Ce topic, message et qualité de service sont définis individuellement sur le broker par le client souhaitant avertir de son “décés” lors de sa connexion au broker.

Ce dernier se charge alors de publier “l’avis de décés” sur le topic associé lorsqu’il détecte une déconnexion soudaine du client concerné.

Tous les clients abonnés à ce topic sont alors prévenus.

Qualité de service

Les clients MQTT peuvent spécifier le niveau de fiabilité — ou de QoS (Quality of Service) — souhaité pour la transmission des messages.

Fonctionnement

Le niveau de QoS est défini par l’émetteur du message

Il s’applique à la transmission entre l’émetteur et le broker, puis entre le broker et le récepteur.

En cas de niveaux différents, c’est le plus bas qui est utilisé.

Niveaux de QoS

MQTT définit 3 niveaux de QoS :

  • QoS 0 / At Most Once (au plus une fois) :

    Ce niveau utilise une séquence de paquets PUBLISH

    le publisher envoie un message une seule fois au broker et ce dernier transmet ce message une seule fois aux subscribers. Aucun mécanisme ne garantit la réception du message et le broker ne l’enregistre pas non plus.

  • QoS 1 / At Least Once (au moins une fois) :

    Ce niveau utilise une séquence de paquets PUBLISH/PUBACK (Publish Acknowledge) entre le publisher et son broker, ainsi qu’entre le broker et les subscribers.

    Un paquet de confirmation vérifie que le contenu a été reçu et un mécanisme de renvoi du contenu d’origine est déclenché si l’accusé de réception n’est pas reçu en temps voulu. Cela signifie que le subscriber peut recevoir plusieurs copies du même message

  • QoS 2 / Exactly Once (exactement une fois) :

    Ce niveau délivre le message avec deux paires de paquets. La première est appelée PUBLISH/PUBREC et la seconde, PUBREL/PUBCOMP.

    Les deux paires s’assurent que quel que soit le nombre de tentatives, le message ne sera délivré qu’une seule fois.

mqtt qos

🕮 Sources :


🞄  🞄  🞄