IoT : MQTT, faire communiquer les objets connectés

IOT
À l’heure de l’IoT et de la démocratisation des objets connectés, il est important de se poser la question des communications entre ces équipements. Le protocole MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie bidirectionnel qui s’appuie sur la couche applicative TCP/IP.

Un principe simple

Développé en 1999 par Andy Stanford-Clark (IBM) et Arlen Nipper (Eurotech), ce protocole a été conçu afin de permettre la communication dans des environnements à faible bande passante, avec des déconnexions fréquentes et nécessitant peu d’énergie. Basé sur un système publish/subscribe, le protocole MQTT est léger et relativement simple à mettre en place. C’est pourquoi il est très souvent utilisé dans des environnements très contraints comme le M2M (Machine to Machine) et l’IoT (Internet of Things).

MQTT s’articule autour de 4 notions

Le publisher est l’élément en charge de transmettre une information. Cette donnée est envoyée au broker, qui va garder les informations reçues pour les transmettre ensuite aux subscribers. Enfin, le topic lui va transiter dans tout le système et permettre aux subscribers de recevoir les informations qui les intéressent. Prenons l’exemple d’une maison connectée avec : un capteur de température permettant de déclencher l’allumage d’une chaudière, un capteur de luminosité qui active ou non l’allumage d’une ampoule et un tableau de bord pour le monitoring. Chaque subscriber (ici les capteurs) va s’abonner à un topic et ne recevra que les informations qui lui sont utiles.

Représentation des topics

Les topics quant à eux peuvent être représentés sous la forme d’un arbre. Cette arborescence permet à un subscriber de s’abonner à un topic en particulier.

Maison/Cuisine/Température pour s’abonner à la température de la cuisine par exemple.

MQTT intègre deux niveaux de wildcard

+ : le niveau simple, permet de remplacer un élément de la chaîne de topic par n’importe quoi d’autre

Exemple : /Maison/Chambres/+/Température : permet ici de s’abonner aux températures de toutes les chambres

# : Le niveau multiple, permet de s’abonner à tous les éléments « enfants »

Exemple : /Maison/Cuisine/# : permet de s’abonner à la fois à la température et à la luminosité de la cuisine.

L’un des avantages du protocole MQTT porte sur le tampon du broker. Celui-ci, contrairement à un schéma classique de file d’attente de messages, peut distribuer la même information à plusieurs abonnés. Par ailleurs il est résistant aux déconnexions. Ainsi, si un subscriber se déconnecte, les données sont conservées puis renvoyées lors de la reconnexion.

De la qualité de service

Cette gestion de distribution de données s’appuie sur la QoS (Quality of Service) intégrée à MQTT. Le protocole se base sur 3 niveaux de QoS :

QoS 0 : Les messages sont transmis une fois maximum entre le publisher, le broker et le subscriber. Il n’y a ici pas de vérification concernant la bonne réception d’une information.

QoS 1 : Les messages sont transmis au moins une fois. Un acquittement est envoyé pour avertir de la bonne réception du message.

QoS 2 : Les messages ne sont reçus qu’une seule fois peu importe le nombre de fois qu’ils ont été transmis. Ce niveau est plus sûr mais aussi plus gourmand en bande passante.

Le niveau de qualité de service peut être défini par topic et par entité. Ainsi un publisher peut envoyer un message sur le topic A avec une QoS 0, tandis que le subscriber s’abonnera à ce topic avec une QoS 1.

Sans oublier la sécurité

À la base, Le protocole MQTT n’est pas un protocole chiffré. Il faut pour cela utiliser sa déclinaison SSL/TLS : MQTTS. Même si sa mise en place n’est pas particulièrement difficile, il nécessite quand même plus de puissance de calcul. C’est pour cela qu’actuellement beaucoup d’utilisations de MQTT se font sans chiffrement de la connexion. Par ailleurs les principaux acteurs de ce protocole mettent à disposition des développeurs des brokers publics sans chiffrement.

Ce sont ces différentes caractéristiques qui font de MQTT un protocole très utilisé dans le monde de l’IoT et du M2M notamment chez les grands acteurs du cloud avec Amazon et Azure ainsi que chez Facebook avec Messenger.


Alexandre RUBERT, 

Référent technique pôle START