Le protocole MQTT dans l’IoT

La mascotte de mosquitto, librairie MQTT (Pixabay, CC0 Creative Commons)

L’IoT (Internet of Things ou Internet des Objets en français) est un terme à la mode ces dernières années dans les milieux technologiques. Le terme d’IoT fait généralement référence à l’écosystème des objets connectés qui comprend le marché de ces objets, mais également tous les modèles économiques et marketing issus de leur développement.

Il recouvre un ensemble de technologies très vaste, qui vont de l’embarqué temps réel jusqu’au stockage dans le Cloud. Il s’agit de faire dialoguer et d’automatiser le comportement des objets du quotidien (capteurs, volet, frigos, vidéosurveillance) pour qu’ils fournissent des services ou envoient des informations sur leur état ou leur environnement afin d’en extraire de la valeur.

L’une des façons de dialoguer avec ces objets connectés est d’utiliser un protocole de communication comme MQTT. Il existe d’autres protocoles comme AMQP ou STOMP, mais nous allons nous intéresser ici à MQTT.

MQTT a été inventé en 1999 par des chercheurs d’IBM qui cherchaient à avoir un protocole de messagerie léger pour faire communiquer des machines dans un environnement où les déconnexions sont fréquentes. Et devinez quoi, dans l’IoT les déconnexions des capteurs ne sont pas rares et il faut quand même pouvoir recevoir les informations lors de la reconnexion.

Étrangement, le MQ dans MQTT ne signifie pas Message Queue, mais juste… MQ, le nom du projet d’IBM pour lequel ce protocole avait été développé dans les années 90. TT signifie Telemetry Transport.

Principe de fonctionnement

Contrairement au principe du client/serveur utilisé sur le Web, MQTT utilise celui de la publication/souscription : plusieurs clients se connectent à un serveur unique (appelé broker) pour soit publie des informations, soit souscrire à leur réception.

Voici le principe de fonctionnement comparé d’un système client/serveur web et d’un système MQTT broker/client :

Client/serveur (HTTP/web)

Publication/Souscription (MQTT)

 

Les topics

Les clients de souscription MQTT s’enregistrent auprès du broker sur des topics, des sortes de chemins d’accès à une ressource. Ils demandent ainsi à être notifiés lorsque quelqu’un publie sur ces topics.

Cela peut être un topic de température par exemple : /sensor/1/temperature.

On peut souscrire à un ensemble de topics en utilisant des wildcards # ou +.

Par exemple, si un client publie sur les topics /sensor/1/temperature et /sensor/1/humidity, un autre client peut écouter ces deux topics à la fois : /sensor/1/#.

Si plusieurs clients publient leurs températures et humidités en intercalant leur numéro de client sur leur topic, un autre client peut écouter toutes les températures ainsi : /sensor/+/temperature. Il recevra alors les températures du client 1 (/sensor/1/temperature), du client 2 (/sensor/2/temperature), etc.

Avantages de MQTT

Légèreté

Beaucoup moins verbeux que HTTP, avec un côté asynchrone natif.

Flexibilité

MQTT est basé sur la couche réseau TCP/IP, utilisée par les protocoles internet dont HTTP.

On peut donc le trouver sur n’importe quelle plateforme matérielle, que ce soit un Arduino, un Raspberry Pi, un PC ou même un Cloud Microsoft Azure ou Amazon AWS.

De plus, on peut faire passer n’importe quel message sur les topics, par exemple du binaire ou du JSON, selon les besoins.

Sécurité

De nombreuses possibilités de sécurisation sont disponibles. Mot de passe, authentification par certificats client et serveur, chiffrement SSL/TLS, listes de contrôle d’accès…

C’est une qualité à ne pas négliger dans un monde où les objets connectés constituent un vecteur d’attaque important.

Intégrité des données

MQTT introduit la notion de qualité de service (QOS) qui permet à un client de s’assurer qu’un message a bien été transmis, avec différents niveaux de fiabilité.

Il y a aussi une fonctionnalité assez formidable : le will message, qu’on pourrait traduire par “testament”. Il s’agit d’un topic qui est envoyé automatiquement lorsqu’un client se déconnecte. Cela permet à n’importe quel client d’être notifié post mortem de la déconnexion d’un autre client et d’agir en conséquence.

Inconvénients

Arborescence des topics

Comme nous l’avons vu, les topics forment une arborescence dont les éléments sont séparés par des “/”. Cette arborescence doit être conçue correctement a priori afin de pouvoir supporter toute évolution des nouveaux topics susceptibles d’apparaître dans la vie du projet. Cela permettra de garantir la rétrocompatibilité des clients amenés à se connecter en MQTT.

Prix de la sécurité

Il n’y a pas de miracle : comme partout ailleurs, l’utilisation du protocole SSL/TLS a un coût non négligeable en termes de performances sur de l’embarqué contraint.

On ne peut déployer du MQTT sécurisé qu’avec un matériel suffisamment puissant. Pour donner un ordre d’idée, il faut l’équivalent de la puissance d’un Raspberry Pi 2 pour que les performances soient suffisantes. Un Arduino permettra de mettre en place du MQTT non sécurisé mais les couches de sécurité additionnelles seront trop lourdes pour lui.

De plus, l’échange de certificats client/serveur est relativement compliqué à mettre en œuvre.

Un couche de sécurité propriétaire est donc la bienvenue, mais complexifie le développement.

Implémentations

MQTT depuis sa version 3.1.1 est maintenant un standard OASIS, (Consortium mondial qui travaille pour la standardisation de formats de fichiers ouvert). Il existe de nombreuses implémentations dans la plupart des langages de programmation (C, C++, Java, Python, …).

La plus connue est nommée mosquitto (avec deux t), mais des implémentations propriétaires existent aussi comme HiveMQ, qui propose de meilleures performances et une plus grande facilité de passage à l’échelle sur des serveurs positionnés dans le Cloud par exemple.

Conclusion

MQTT est donc un protocole léger, facile à appréhender, très souple et sécurisable.

Il est de plus en plus au cœur des projets IoT et supporté par la plupart des services de Cloud.

MQTT est un protocole dynamique qui continue à évoluer. Par exemple, il intègre dorénavant les WebSockets qui lui ouvrent une porte sur le monde du Web.

Au sein des équipes de SII, notamment à Grenoble, nous mettons d’ores et déjà en œuvre ce protocole sur des systèmes éclectiques comme des équipements de gestion de réseau électrique, des box telecom et domotiques, des puces spécialisées pour l’intelligence artificielle, ou encore des poubelles connectées.

N’hésitez pas à nous contacter si vous souhaitez approfondir le sujet !

 

Références

2 thoughts on “Le protocole MQTT dans l’IoT”

  1. Bonjour

    Merci pour votre article. très clair.
    Une question : comment archive t-on les données publiées ou sont elles stockées ?
    peut on utiliser une base de données type MySQL ?

    merci

    1. Bonjour,
      le type de base de donnée dépend de l’implémentation du protocole MQTT.
      Par exemple, mosquitto qui est l’implémentation open source la plus utilisée permet de stocker les données persistantes dans son propre format qui est un gros fichier .db.
      Une solution de contournement est de créer un client MQTT qui écoute tous les topics (#) et les stocke lui-même dans une database au format requis.
      HiveMQ, implémentation professionnelle, a lui un système de plugin qui permet d’écrire directement dans une database. Voir https://www.hivemq.com/blog/mqtt-sql-database

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

vingt − 7 =