MQTT signifie Message Queuing Telemetry Transport. Il s’agit d’un protocole de messagerie publish-subscribe basé sur le protocole TCP/IP.
Publish-subscribe (littéralement : publier-s’abonner) est une structure d’échange de message différente d’une relation client-serveur plus répandue. Ici des diffuseurs (ou publisher) n’envoient pas spécifiquement des messages à des destinataires (subscriber). À la place, le message est assigné à une catégorie (topic) et le diffuseur ne sait pas s’il y a des destinataires. Les destinataires de leur coté s’abonnent aux catégories qui les intéressent et ne reçoivent que les messages correspondant, sans savoir s’il y a des diffuseurs.
L’objectif de la création de MQTT est d’avoir un protocole efficace en bande passante, léger et utilisant peu d’énergie de batterie, car la liaison satellite qu’ils utilisaient était très coûteuse à cette époque.
Broker
Tous les appareils, ou clients, communiquent via un élément intermédiaire que l’on appelle le broker dans le cas de MQTT. le broker peut être installé sur un PC, un mac, la plupart des systèmes linux, comme d’ailleurs raspbian sur le Raspberry Pi. Que cela soit via une installation en container ou bien dans le cloud. Il y a d’ailleurs beaucoup de services MQTT en cloud disponibles. Les brokers les plus connus sont HiveMQ et Mosquito un broker libre et open source qui est très souvent utilisé.
Publish Subscribe
Les appareils “client” transfèrent ou reçoivent de l’information, soit depuis le broker, ou via un mécanisme d’abonnement à des sujets “topics” spécifiques. Ils peuvent aussi publier des messages sur un “topic” particulier au broker. Un client n’est donc pas en contact direct avec les autres clients puisque toutes les connections passent par le broker. Un client n’est pas limité seulement à la publication ou à l’abonnement. Tout type d’appareils peuvent accéder aux clients, comme des microcontrôleurs, comme Arduino, ou bien les ordinateurs,
Topics
Les topics sont une façon de catégoriser le type de message qui peuvent être envoyés. Les clients peuvent envoyer des messages sur un topic bien défini, et peuvent aussi s’abonner à des topics donnés. Le broker reçois tous les messages puis il retransmet les messages à tous les clients qui se sont abonnés au topic en question. Les topics sont basiquement des catégories hiérarchisées. Si vous voulez qu’un appareil reçoive les messages de plusieurs topics, un peut utiliser des “caractères joker” ou wildcards. Les wildcards à un niveau sont indiqués avec un icône “+” qui remplace un niveau de topic. Par exemple
ebc/machine/robot/axis1/temperature
ebc/machine/robot/ + /temperature
permet de recevoir des messages au sujet des températures de tous les axes du robot.
Les wildcards à plusieurs niveaux, sont indiqués par un hashtag. Ils remplacent n’importe quel niveau hiérarchique inférieur.
Par exemple :
ebc/axelle/robot/axis1/temperature
ebc/axelle/robot/ #
permet d’avoir accès à toutes les données de tous les axes.
S’il n’y a pas d’abonné à un topic le broker ne conserve pas le message, mais le publisher peut dire au broker de garder jusqu’à ce qu’un client s’abonne à ce topic. Cela peut avoir du sens si vous voulez qu’un nouveau client accède à la dernière valeur au moment où il s’inscrit.
Quality of service : QoS
En fonction de vos besoins, par exemple vous assurer qu’un message a bien été reçu, ou qu’il n’a bien été reçu qu’un seule fois, trois types de paramètres sont disponibles pour la QoS pour les messages envoyés.
QoS 0, “fire an forget”, c’est le plus léger en ce qui concerne l’utilisation du réseau, le message est envoyé une seule fois, quel que soit le feedback du broker.
QoS 1, le client va envoyer son message de manière répétée, jusqu’à ce qu’il reçoive un message de confirmation de la part du broker. Cela peut entraîner la livraison de plusieurs messages aux abonnés.
QoS 2, est un handshake en 4 étapes : Cela garanti que chaque message n’est reçu qu’une seule fois en confirmant le statu de part et d’autre.
MQTT est très léger en terme de poids de donnée, et d’énergie consommée. C’est pour cela qu’il est disponible sur une très grande quantité de machines. Même avec très peu de ressources.
La taille de la donnée peut n’être que de 2 bytes, mais peut aussi contenir jusqu’à 256 Mbytes
Mqtt transmet la donnée, principalement sur le protocole TCP/IP. Il existe une variation de MQTT, MQTT SN qui ouvre le protocole à encore plus d’appareils, pour les réseaux non TCP/IP comme par exemple Bluetooth et Zigbee, c’est pourquoi c’est un outil très important dans le monde de l’IOT
Articles connexes :