Tutoriels IoT

Les meilleurs outils CLI MQTT pour tester, scripter et déboguer

Un comparatif pratique de mosquitto_pub/sub, MQTTX CLI, HiveMQ MQTT CLI, la CLI MQTT.js, curl et mqttui, avec le même test exécuté sur le serveur MQTT public gratuit broker.connectmq.com pour choisir le bon outil pour le scripting et le débogage.

Plusieurs panneaux de terminal comparant des outils CLI MQTT abonnés au même topic d'un broker MQTT cloud
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

Les outils CLI MQTT sont le moyen le plus rapide de répondre à la question « mon appareil publie-t-il vraiment ? » sans écrire une ligne de code. Ce comparatif soumet les mêmes tâches à six clients en ligne de commande, mosquitto_pub/sub, MQTTX CLI, HiveMQ MQTT CLI, la CLI MQTT.js, curl et mqttui, pour que vous puissiez comparer leur syntaxe côte à côte et choisir le bon. Toutes les commandes ciblent le serveur MQTT public gratuit broker.connectmq.com : vous pouvez donc les essayer au fil de la lecture.

Ce qui fait un bon client MQTT en ligne de commande

Avant de comparer, il est utile de clarifier ce que vous attendez d'un outil de terminal. Chaque usage favorise un outil différent :

  • Vérifications rapides : publier un message, surveiller un topic. La vitesse de démarrage et une syntaxe courte comptent.
  • Scripting et CI : codes de sortie prévisibles, « recevoir N messages puis quitter », délais d'expiration, sortie exploitable par une machine.
  • Débogage protocolaire : afficher le flux de paquets, les reason codes et les propriétés MQTT 5.
  • Exploration : parcourir de manière interactive une arborescence de topics inconnue.
  • Charge et simulation : nombreux clients, payloads générés (traité séparément dans les outils de test de charge MQTT).

Sur le serveur public, définissez toujours un client ID unique, utilisez un préfixe de topic unique comme connectmq/demo/c1t9/, et gardez à l'esprit que tout ce qui s'y trouve est lisible par n'importe qui.

Les six outils CLI MQTT en un coup d'œil

Outil Installation MQTT 5 TLS Point fort Point faible
mosquitto_pub / mosquitto_sub Package système mosquitto-clients Oui Oui Omniprésent, léger, scriptable, excellent formatage de la sortie Binaires séparés, erreurs laconiques
MQTTX CLI npm, Homebrew ou binaire Oui Oui Sortie conviviale, benchmarks et simulateurs intégrés Installation plus lourde (basée sur Node)
HiveMQ MQTT CLI Homebrew, package ou JAR Oui (par défaut) Oui Mode shell interactif, sortie MQTT 5 claire Nécessite un runtime Java pour certaines installations
CLI MQTT.js npm install -g mqtt Oui Oui Déjà présente si vous utilisez Node Moins d'options que les autres
curl Généralement préinstallé Non (3.1.1) Oui (mqtts://) Aucune installation sur la plupart des systèmes QoS 0 uniquement, fonctions de base
mqttui Cargo ou binaire Selon la version Oui Interface interactive en terminal avec arborescence des topics Pas conçu pour le scripting

mosquitto_pub et mosquitto_sub

Les outils de référence. Si un serveur ou un Raspberry Pi dispose d'un client MQTT, c'est probablement celui-ci.

mosquitto_sub -h broker.connectmq.com -p 1883 -i cli-cmp-sub1 -t 'connectmq/demo/c1t9/#' -v
mosquitto_pub -h broker.connectmq.com -p 1883 -i cli-cmp-pub1 -t connectmq/demo/c1t9/test -m 'hello' -q 1

Pour le scripting, on retient surtout -C (quitter après N messages), -W (délai d'expiration) et -F avec %j pour une sortie JSON à rediriger vers jq. -d affiche chaque paquet, ce qui tranche instantanément les débats sur le comportement de la QoS. Nous avons rassemblé 25 commandes prêtes à l'emploi dans les exemples mosquitto_pub et mosquitto_sub.

# Health check in a script: fail if no reading within 10 seconds
if ! mosquitto_sub -h broker.connectmq.com -p 1883 -i health-c1t9 \
     -t connectmq/demo/c1t9/sensor/temp -C 1 -W 10 > /dev/null; then
  echo "sensor silent" >&2; exit 1
fi

MQTTX CLI

MQTTX CLI est le pendant en ligne de commande de l'application desktop MQTTX. Sa sortie est colorée et lisible, et elle inclut les sous-commandes bench et simulate dont les autres outils sont dépourvus.

mqttx sub -h broker.connectmq.com -p 1883 -i cli-cmp-sub2 -t 'connectmq/demo/c1t9/#' -v
mqttx pub -h broker.connectmq.com -p 1883 -i cli-cmp-pub2 -t connectmq/demo/c1t9/test -m 'hello' -q 1
mqttx conn -h broker.connectmq.com -p 8883 -l mqtts -i cli-cmp-conn2

Le flag -l mqtts active TLS ; -V 5 ou -V 3.1.1 choisit la version du protocole (MQTT 5 est la valeur par défaut dans les versions récentes). Pour obtenir rapidement des données réalistes, la commande simulate publie des payloads générés à partir de scénarios intégrés ou personnalisés, ce qui est pratique quand le firmware n'est pas encore prêt. Gardez les débits générés dans les limites du broker ; sur le serveur public, cela signifie au maximum 10 messages par seconde par client.

HiveMQ MQTT CLI

La CLI de HiveMQ est une commande unique mqtt avec des sous-commandes, et elle utilise MQTT 5 par défaut. Sa fonctionnalité phare est le mode shell : vous vous connectez une fois, puis saisissez des commandes de manière interactive, comme dans un REPL pour MQTT.

mqtt sub -h broker.connectmq.com -p 1883 -i cli-cmp-sub3 -t 'connectmq/demo/c1t9/#'
mqtt pub -h broker.connectmq.com -p 1883 -i cli-cmp-pub3 -t connectmq/demo/c1t9/test -m 'hello' -q 1

# Interactive shell
mqtt shell

Dans le shell, con -h broker.connectmq.com -i cli-cmp-shell3 ouvre une connexion, et les commandes pub et sub suivantes la réutilisent. Ajoutez -V 3 lorsque vous devez tester le comportement de MQTT 3.1.1, et -s pour TLS avec le trust store par défaut.

Attention à un conflit de noms : la CLI HiveMQ et la CLI MQTT.js installent toutes deux une commande appelée mqtt. Si vous avez les deux, c'est celle qui apparaît en premier dans votre PATH qui l'emporte.

CLI MQTT.js

Si vous travaillez déjà en Node.js, le package MQTT.js fournit sa propre CLI. Elle couvre l'essentiel et reprend les mêmes lettres d'options que mosquitto pour les flags courants.

npm install -g mqtt
mqtt sub -h broker.connectmq.com -p 1883 -i cli-cmp-sub4 -t 'connectmq/demo/c1t9/#' -v
mqtt pub -h broker.connectmq.com -p 1883 -i cli-cmp-pub4 -t connectmq/demo/c1t9/test -m 'hello'

Ce n'est pas l'option la plus riche en fonctionnalités, mais c'est la même bibliothèque que celle de votre application Node : le comportement est donc strictement identique. Pour le code applicatif, poursuivez avec MQTT.js dans Node.js.

curl

Peu de gens savent que curl parle MQTT. Il ne prend en charge que MQTT 3.1.1 en QoS 0 et n'offre ni retained ni Will, mais il est installé sur la plupart des systèmes Linux et macOS ainsi que dans de nombreuses images de base de conteneurs (vérifiez la présence de mqtt dans la liste des protocoles de curl -V).

# Subscribe (prints raw payloads; Ctrl+C to stop)
curl -s mqtt://broker.connectmq.com:1883/connectmq%2Fdemo%2Fc1t9%2Ftest

# Publish
curl -d 'hello from curl' mqtt://broker.connectmq.com:1883/connectmq%2Fdemo%2Fc1t9%2Ftest

Encodez les slashs du topic en %2F. curl génère son propre client ID : vous ne pouvez donc pas l'utiliser avec des brokers qui exigent un client ID spécifique par identifiant. Au-delà d'un simple smoke test, utilisez l'un des outils dédiés.

mqttui

mqttui est une interface utilisateur en terminal écrite en Rust. Elle affiche une arborescence de topics en direct, le dernier payload et des graphiques d'historique simples pour les valeurs numériques, le tout dans le terminal : parfait en SSH, là où vous ne pouvez pas lancer d'application desktop.

mqttui --broker mqtt://broker.connectmq.com:1883 'connectmq/demo/c1t9/#'

C'est un outil d'exploration, pas de scripting. Pour une vue graphique plus riche, consultez les applications desktop d'exploration MQTT.

Le même test dans chaque outil

Une comparaison équitable consiste à réaliser une même tâche partout : s'abonner à connectmq/demo/c1t9/#, publier un message QoS 1 sur connectmq/demo/c1t9/test, et quitter après l'avoir reçu.

Outil Recevoir et quitter (un message ou délai expiré)
mosquitto_sub mosquitto_sub -h broker.connectmq.com -i s1-c1t9 -t 'connectmq/demo/c1t9/#' -C 1
MQTTX CLI timeout 10 mqttx sub -h broker.connectmq.com -i s2-c1t9 -t 'connectmq/demo/c1t9/#' (ou une option de comptage si votre version en dispose)
HiveMQ CLI timeout 10 mqtt sub -h broker.connectmq.com -i s3-c1t9 -t 'connectmq/demo/c1t9/#'
CLI MQTT.js timeout 10 mqtt sub -h broker.connectmq.com -i s4-c1t9 -t 'connectmq/demo/c1t9/#'
curl timeout 5 curl -s mqtt://broker.connectmq.com/connectmq%2Fdemo%2Fc1t9%2Ftest

C'est pourquoi mosquitto_sub reste le choix par défaut dans les pipelines CI : -C et -W font de « attendre exactement un message ou échouer » une simple ligne. Consultez --help dans les versions installées des autres outils, car les options évoluent d'une version à l'autre.

Quel outil CLI MQTT choisir ?

  1. Sur les serveurs, les Raspberry Pi et en CI : les clients mosquitto. Légers, packagés partout, idéaux pour les scripts.
  2. Pour le développement quotidien sur un portable : MQTTX CLI ou HiveMQ CLI. Sortie lisible et détails MQTT 5 par défaut.
  3. Pour déboguer le comportement de MQTT 5 de manière interactive : le mode shell de la CLI HiveMQ.
  4. Dans un projet Node : la CLI MQTT.js, pour que les tests correspondent au comportement en production.
  5. Dans un conteneur nu sans rien d'installé : curl pour un smoke test en QoS 0.
  6. En SSH pour explorer des topics inconnus : mqttui.

Beaucoup d'équipes en gardent deux : les clients mosquitto pour l'automatisation et un outil plus convivial pour les humains. Si vous préférez ne jamais quitter votre éditeur, le guide de l'extension MQTT pour VS Code présente ce workflow.

Utiliser les outils CLI avec un broker privé

Tous les outils ci-dessus acceptent les trois mêmes éléments pour un broker de production : l'hôte et le port TLS, les identifiants et le client ID. Avec ConnectMQ, le portail génère les trois lorsque vous créez un broker :

mosquitto_sub -h YOUR_BROKER_HOST -p 8883 --capath /etc/ssl/certs \
  -i YOUR_CLIENT_ID -u YOUR_USERNAME -P YOUR_PASSWORD -t '#' -v

Comme les client ID sont liés aux identifiants émis, utilisez exactement le client ID fourni par le portail ; un ID aléatoire sera rejeté. Le certificat est émis par Let's Encrypt : les trust stores système fonctionnent donc sans fichier supplémentaire sur la plupart des distributions Linux. Le broker accepte aussi WebSocket sur 8083 et WebSocket sécurisé sur 8084 avec le chemin /mqtt pour les outils qui le prennent en charge.

Utilisez le serveur MQTT public gratuit pour apprendre et expérimenter rapidement, et un broker MQTT managé pour tout ce qui implique de vrais appareils ou de vraies données. Pour voir comment les tests en CLI s'intègrent dans un workflow de développement plus large, le panorama des bibliothèques client MQTT fait le lien entre les vérifications en CLI et le code dans chaque langage.

Démarrer avec ConnectMQ

Créez un broker privé sur app.connectmq.com avec le plan Serverless gratuit, sans carte bancaire, et pointez-y votre outil CLI préféré. Le client MQTT intégré au navigateur et l'explorateur de topics en direct du portail offrent une seconde vue pratique pendant que vous déboguez depuis le terminal.

Questions fréquentes

Quel est le meilleur outil CLI MQTT pour débuter ?

MQTTX CLI ou la CLI HiveMQ, car leur sortie est plus lisible et elles utilisent MQTT 5 par défaut. Apprenez ensuite mosquitto_pub et mosquitto_sub, car vous les trouverez sur presque tous les serveurs.

Peut-on tester MQTT sans rien installer ?

Souvent, oui : curl prend en charge la publication et l'abonnement MQTT de base sur la plupart des systèmes. Le portail ConnectMQ inclut aussi un client MQTT dans le navigateur pour votre propre broker.

Quel outil CLI affiche les reason codes MQTT 5 ?

Tous les outils compatibles MQTT 5 les signalent, mais les clients mosquitto avec -d et la CLI HiveMQ montrent l'échange de paquets le plus clairement.

Pourquoi mon client CLI est-il déconnecté à répétition ?

Le plus souvent, un autre client utilise le même client ID, et le broker déconnecte la connexion la plus ancienne. Donnez à chaque terminal son propre ID.

Articles liés

Comment stocker des données MQTT dans InfluxDB avec Python

Construisez une passerelle Python avec paho-mqtt et influxdb-client qui s'abonne à un broker, transforme les niveaux de topic en tags InfluxDB, écrit les valeurs JSON numériques comme fields par lots et gère les payloads invalides et les conflits de type.

8 min de lecture

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.