MQTT : le protocole que tout le monde devrait connaître

MQTT (Message Queuing Telemetry Transport) est devenu incontournable dans l’univers de l’IoT et des architectures événementielles. Pourtant, ce protocole créé par IBM dans les années 1990 reste méconnu de nombreux développeurs. Changeons ça et regardons de plus près…

Pourquoi MQTT ?

Contrairement à HTTP qui fonctionne en requête/réponse, MQTT implémente un modèle publish/subscribe ultra-léger. Son principal atout ? Une empreinte réseau minimale, parfaite pour les objets connectés aux ressources limitées ou les connexions instables.

Là où HTTP envoie des headers volumineux à chaque requête, MQTT peut transmettre un message avec seulement 2 octets de surcharge. Sur une connexion 3G instable ou un capteur alimenté par batterie, la différence est considérable.

Architecture : topics et QoS

MQTT repose sur trois acteurs : les publishers qui publient des messages, les subscribers qui s’abonnent à des topics, et le broker qui fait la jonction en tant que serveur. Le broker (Mosquitto, HiveMQ, AWS IoT Core) gère le routage des messages selon une arborescence de topics.

Un topic ressemble à un chemin de fichier : maison/salon/temperature ou usine/ligne3/capteur12/vibration. On peut s’abonner avec des wildcards : maison/+/temperature (+ pour un niveau) ou maison/# (# pour tous les sous-niveaux).

MQTT propose trois niveaux de qualité de service (QoS) :

  • QoS 0 : fire and forget, aucune garantie de livraison
  • QoS 1 : au moins une fois, avec accusé de réception
  • QoS 2 : exactement une fois, avec handshake en quatre étapes

Exemple pratique : monitoring de température

Voici un publisher Python avec Paho MQTT :

import paho.mqtt.client as mqtt
import json
import time
import random

def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connecté au broker MQTT")
    else:
        print(f"Échec de connexion, code: {rc}")

# Configuration
client = mqtt.Client(client_id="capteur_temp_salon")
client.on_connect = on_connect
client.username_pw_set("username", "password")

# Connexion au broker
client.connect("mqtt.exemple.com", 1883, 60)
client.loop_start()

# Publication en boucle
while True:
    temperature = 20 + random.uniform(-2, 5)
    payload = json.dumps({
        "temp": round(temperature, 2),
        "timestamp": int(time.time()),
        "unit": "celsius"
    })
    
    result = client.publish(
        "maison/salon/temperature",
        payload,
        qos=1,
        retain=True  # Garde le dernier message pour les nouveaux subscribers
    )
    
    print(f"Message publié: {payload}, status: {result.rc}")
    time.sleep(60)

Et le subscriber correspondant :

import paho.mqtt.client as mqtt
import json

def on_connect(client, userdata, flags, rc):
    print(f"Connecté avec le code: {rc}")
    # S'abonner à la connexion garantit la réabonnement après déconnexion
    client.subscribe("maison/+/temperature", qos=1)

def on_message(client, userdata, msg):
    data = json.loads(msg.payload.decode())
    room = msg.topic.split('/')[1]
    print(f"🌡️  {room}: {data['temp']}°C à {data['timestamp']}")
    
    # Logique métier
    if data['temp'] > 25:
        print(f"⚠️  Alerte: température élevée dans {room}")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set("username", "password")

client.connect("mqtt.exemple.com", 1883, 60)
client.loop_forever()

Fonctionnalités avancées

Last Will and Testament (LWT) : chaque client peut définir un message qui sera automatiquement publié par le broker en cas de déconnexion inattendue. Pratique pour détecter des capteurs hors ligne.

client.will_set("maison/salon/status", "offline", qos=1, retain=True)

Retained messages : le broker conserve le dernier message publié avec le flag retain=True. Les nouveaux subscribers le reçoivent immédiatement, sans attendre une nouvelle publication.

Sessions persistantes : avec clean_session=False, le broker conserve les abonnements et messages QoS>0 pendant une déconnexion.

Cas d’usage concrets

J’ai vu MQTT briller dans des contextes variés : une ferme urbaine avec 200 capteurs d’humidité du sol communiquant via LoRaWAN puis MQTT, un système de suivi de flotte où chaque véhicule publie sa position GPS toutes les 30 secondes, ou encore une usine avec des milliers de machines publiant leurs métriques de production en temps réel. Plus loin ? Une ville et des capteurs sur les conteneurs à ordures présents dans les rues : s’ils sont pleins, une alerte via MQTT est relativement rapide et simple à envoyer, déclenchant l’intervention d’un camion poubelle.

Un cas particulièrement élégant : un système domotique où la simple publication sur maison/salon/lumiere/set avec payload {"state": "ON", "brightness": 80} contrôle l’éclairage, tandis que la lampe confirme son état sur maison/salon/lumiere/state.

MQTT et ses alternatives

Comparé à WebSockets, MQTT gère nativement la reconnexion, les QoS et le routage par topics. Face à AMQP, il est beaucoup plus simple et léger. CoAP est encore plus compact mais moins mature en termes d’écosystème.

La version MQTT 5.0 ajoute des fonctionnalités intéressantes : propriétés utilisateur dans les messages, raison de déconnexion, expiration des messages, et request/response pattern pour simplifier les interactions bidirectionnelles.

Pour démarrer

Sur Linux, installez Mosquitto localement (apt install mosquitto mosquitto-clients sur Ubuntu), lancez un subscriber dans un terminal avec mosquitto_sub -t "test/#" -v, et publiez depuis un autre avec mosquitto_pub -t "test/hello" -m "Hello MQTT". Vous verrez immédiatement l’intérêt !

MQTT n’est pas la solution universelle, mais pour tout ce qui touche à l’événementiel, l’IoT ou les architectures temps réel, il mérite clairement sa place dans votre boîte à outils et dans vos développements.

Publications similaires

  • Au vol : nouveau rebondissement (MAJ 17/01/11)

    Souvenez-vous de cette escroquerie par carte bancaire, cf ce billet, et l’incompétence du Crédit Agricole pour donner une suite judiciaire à cette affaire en s’associant à ma plainte. Je viens de relancer le service de gendarmerie compétent, voici la réponse : « Je vous donne quleques nouvelles de ce type d’affaire : notre service s’est particulièrement investit dans ce type d’escroquerie depuis plusieurs mois et les investigations ont permis de cibler plusieurs commanditaires agissant depuis l’afrique francophone principalement . Les personnes…

  • |

    (MAJ) Viveole sort V-Box

    Chaque entreprise a coutume de sortir sa propre Box, Vivéole, l’opérateur satellite, n’y coupe pas, avec l’annonce de la V-Box dans le communiqué suivant : Du nouveau chez Viveole ! Une fois de plus, Viveole innove en étant le 1er FAI à sortir sa propre box : la V-Box pour l’Internet par satellite. Le lancement de la V-Box s’accompagne d’une nouvelle offre Dual Play, baptisée Smart. Elle comprend l’accès à Internet à 1 Mbit/s avec un volume d’échange de données limité à 2…

  • Leclerc Drive : l’informatique bugguée

    Rien à voir avec le WiFi, mais un récit d’une expérience récente avec un Leclerc Drive. Faites l’essai vous aussi, arrivez un peu avant l’heure d’ouverture, 9h ici, scannez le code barre de votre commande, ouvrez le coffre et… attendez… attendez… attendez… 15 mn, jusqu’à ce qu’un employé ne s’inquiète de vous voir ainsi attendre, enfin ! Et là, l’incroyable se produit, on vous explique qu’il ne faut pas scanner de code AVANT l’heure d’ouverture, même 1 mn avant, puisque…

  • |

    Un robot WiFi pour votre sécurité, et plus encore…

    Jazz, un robot dernière génération, capable à la fois de surveiller vos locaux, mais également de participer à une conférence comme vous pourriez le faire en chair et en os, voici ce que propose Gostai. Certes, pour le modèle de surveillance, il vous faudra tout de même débourser 8400 €, une somme infime, après tout, comparée aux possibilités offertes par ce gardien sans sommeil. Pour la version de base, vous vous contenterez d’une dépense légère de 7900 €, avec la…

  • Sécuriser un accès, selon Hadopi

    Un bien amusant appel téléphonique passé par un employé de PC Inpact chez Hadopi : Résumons, pour sécuriser un accès, il vous faut : un antivirus un parefeu (ou firewall) utiliser une clé WEP ou WPA en WiFi Après un bon éclat de rire, voici quelques explications de texte, des fois que cet employé Hadopi sur-compétent lise un jour le billet : un antivirus protège un ordinateur des… VIRUS, si si !! Il n’empêchera personne de télécharger. un parefeu protègera…

  • Weemos D1 : contrôle MQTT du shield relai

    Votre petit Weemos D1 est LA puce idéale pour vos projets IoT (Internet Of Things) car il sait utiliser des tas de périphériques, de capteurs. Ici, nous allons nous intéresser au shield relai, une platine munie d’un seul et unique relai qui va venir s’enficher sur le Weemos D1 : Avant de débuter, nous allons poser quelques bases : vous avez déjà un broker MQTT d’installé votre Weemos D1 est flashé avec EasyESP dans la configuration, nous avons appelé notre…

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.