Il existe de nombreux clients et serveurs MQTT dans des langages et pour des systèmes d’exploitation variés : c’est une excellente solution pour faire communiquer des appareils utilisant des technologies différentes. Et bien sûr, il existe des clients JavaScript  pour les applications web.

A notre avis les principales forces de MQTT sont :

Quel est le principe de fonctionnement ?

MQTT permet à des clients de publier et/ou de s’abonner à des informations. L’ensemble des clients communiquent avec un broker : un programme en charge de réceptionner les informations publiées et de les retransmettre aux clients abonnés :

MQTT : une architecture broker/client
Exemple de réseau MQTT

Les clients peuvent publier ou s’abonner à des « topics » MQTT, par exemple  « /data/A » ce qui permet d’identifier les informations simplement. Les clients peuvent s’abonner à plusieurs topics.

Il faut faire fonctionner un broker, l’ensemble des informations transitent par lui. La communication entre clients n’est jamais directe ce qui peut être un inconvénient pour certain projets.

Pourquoi gérer la Qualité de service alors que MQTT utilise TCP ?

Pour chaque topic, MQTT permet de gérer la QoS désirée, les messages seront délivrés :

TCP assure la fiabilité des transmissions sur le réseau. Mais MQTT permet en plus de gérer les pertes de connexion, lors d’une reconnexion, en QoS 1 et QoS 2, les informations non transmises sont retransmises.

En QoS 1, les messages sont acquittés par le receveur, si cet acquittement n’arrive pas le message est retransmis :

Capture réseau wireshark avec la QoS MQTT à 1
Capture réseau QoS MQTT à 1

En QoS 2, l’acquittement est lui même validé afin de garantir que le message n’arrive qu’une seule fois :

Capture réseau wireshark avec la QoS MQTT à 2
Capture réseau QoS MQTT à 2

En QoS 0 par contre, les informations sont simplement transmises et validées uniquement par TCP :

Capture réseau wireshark avec la QoS MQTT à 0
Capture réseau QoS MQTT à 0

Utiliser MQTT pour un système embarqué sous Linux

Il existe beaucoup de clients et de broker MQTT.  Et faire un choix n’est pas aisé. Wikipedia présente les fonctionnalitées implémentées par ces logiciels, c’est un bon point de départ.

Dans notre cas, nous cherchions une librairie utilisable dans un programme en C embarqué sous Linux. Ainsi qu’un broker fonctionnant sur un appareil embarqué lui aussi sous Linux. L’objectif est de faire transiter des flux d’informations découpés en paquets de  1/10 de seconde sur une dizaine de topics.

En résumé

MQTT est une excellente solution pour assurer la communication entre appareils et son adoption devrait être de plus en plus large à l’avenir. Dans le cadre d’un logiciel écrit en langage C, il simplifie beaucoup la gestion du réseau, notamment les cas de connexion/reconnexion.