IoT-Tutorials

Die besten MQTT-CLI-Tools zum Testen, Skripten und Debuggen

Ein praxisnaher Vergleich von mosquitto_pub/sub, MQTTX CLI, HiveMQ MQTT CLI, der MQTT.js-CLI, curl und mqttui – mit demselben Test gegen broker.connectmq.com, damit Sie das richtige Tool zum Skripten und Debuggen wählen.

Mehrere Terminalfenster, in denen MQTT-CLI-Tools dasselbe Topic eines Cloud-MQTT-Brokers abonnieren
Probieren Sie es auf Ihrem eigenen MQTT-Broker ausHolen Sie sich im Free-Tarif einen privaten, verwalteten MQTT-Broker und starten Sie mit fertigen Codebeispielen.
Kostenlos testen Codebeispiele Keine Kreditkarte erforderlich

MQTT-CLI-Tools sind der schnellste Weg, die Frage „Veröffentlicht mein Gerät überhaupt?“ zu beantworten, ohne eine Zeile Code zu schreiben. Dieser Vergleich führt dieselben Aufgaben mit sechs Kommandozeilen-Clients aus – mosquitto_pub/sub, MQTTX CLI, HiveMQ MQTT CLI, MQTT.js-CLI, curl und mqttui –, damit Sie ihre Syntax nebeneinander sehen und das richtige Tool auswählen können. Jeder Befehl zielt auf den kostenlosen öffentlichen MQTT-Broker broker.connectmq.com, sodass Sie alles direkt beim Lesen ausprobieren können.

Was einen guten MQTT-Kommandozeilen-Client ausmacht

Vor dem Vergleich hilft es, klar zu benennen, was Sie von einem Terminal-Tool erwarten. Unterschiedliche Aufgaben begünstigen unterschiedliche Tools:

  • Schnelle Checks: eine Nachricht veröffentlichen, ein Topic beobachten. Startgeschwindigkeit und kurze Syntax zählen.
  • Skripting und CI: vorhersehbare Exit-Codes, „N Nachrichten empfangen und dann beenden“, Timeouts, maschinenlesbare Ausgabe.
  • Protokoll-Debugging: Paketfluss, Reason Codes und MQTT-5-Properties anzeigen.
  • Erkundung: einen unbekannten Topic-Baum interaktiv durchsuchen.
  • Last und Simulation: viele Clients, generierte Payloads (separat behandelt in MQTT-Lasttest-Tools).

Setzen Sie auf dem öffentlichen MQTT-Broker immer eine eindeutige Client ID, verwenden Sie ein eindeutiges Topic-Präfix wie connectmq/demo/c1t9/ und denken Sie daran, dass dort alles für jeden lesbar ist; er ist für Tests und Prototypen gedacht, nicht für Produktionsdaten.

Die sechs MQTT-CLI-Tools im Überblick

Tool Installation MQTT 5 TLS Stärke Schwachstelle
mosquitto_pub / mosquitto_sub OS-Paket mosquitto-clients Ja Ja Allgegenwärtig, winzig, skriptfähig, exzellente Ausgabeformatierung Getrennte Binaries, knappe Fehlermeldungen
MQTTX CLI npm, Homebrew oder Binary Ja Ja Freundliche Ausgabe, integrierte Benchmarks und Simulatoren Größere Installation (Node-basiert)
HiveMQ MQTT CLI Homebrew, Paket oder JAR Ja (Standard) Ja Interaktiver Shell-Modus, klare MQTT-5-Ausgabe Manche Installationen benötigen eine Java-Runtime
MQTT.js-CLI npm install -g mqtt Ja Ja Schon vorhanden, wenn Sie Node nutzen Weniger Optionen als die anderen
curl Meist vorinstalliert Nein (3.1.1) Ja (mqtts://) Auf den meisten Systemen ohne Installation nutzbar Nur QoS 0, Basisfunktionen
mqttui Cargo oder Binary Abhängig von der Version Ja Interaktive Terminal-Oberfläche mit Topic-Baum Nicht zum Skripten gedacht

mosquitto_pub und mosquitto_sub

Die Referenz-Tools. Wenn auf einem Server oder Raspberry Pi überhaupt ein MQTT-Client installiert ist, dann wahrscheinlich dieser.

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

Für das Skripting stechen -C (nach N Nachrichten beenden), -W (Timeout) und -F mit %j für JSON-Ausgabe hervor, die Sie an jq weiterleiten können. -d gibt jedes Paket aus und beendet Diskussionen über das QoS-Verhalten im Nu. Wir haben 25 fertige Befehle in mosquitto_pub- und mosquitto_sub-Beispiele zusammengestellt.

# Health Check in einem Skript: fehlschlagen, wenn binnen 10 Sekunden kein Messwert kommt
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

Dasselbe Muster eignet sich als einfacher Watchdog auf einem Edge-Gateway in der Fertigung: Abonnieren Sie dort einen Teilbaum Ihres Unified Namespace (UNS), etwa acme/werk-muenchen/montage/linie-1/#, und schlagen Sie Alarm, wenn eine Linie verstummt. Die Topic-Struktur folgt dabei typischerweise der ISA-95-Hierarchie aus Enterprise, Site, Area, Line und Cell; mehr dazu unter Sparkplug B und Unified Namespace.

MQTTX CLI

MQTTX CLI ist das Kommandozeilen-Gegenstück zur Desktop-App MQTTX. Die Ausgabe ist farbig und gut lesbar, und es enthält die Unterbefehle bench und simulate, die den anderen Tools fehlen.

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

Das Flag -l mqtts wählt TLS; -V 5 oder -V 3.1.1 bestimmt die Protokollversion (MQTT 5 ist in neueren Versionen Standard). Für schnell realistische Daten veröffentlicht der Simulate-Befehl generierte Payloads aus integrierten oder eigenen Szenarien – praktisch, wenn die Firmware noch nicht fertig ist. Halten Sie die erzeugten Raten innerhalb der Broker-Limits; auf dem öffentlichen MQTT-Broker heißt das höchstens 10 Nachrichten pro Sekunde und Client.

HiveMQ MQTT CLI

Die CLI von HiveMQ ist ein einziger mqtt-Befehl mit Unterbefehlen und nutzt standardmäßig MQTT 5. Ihr herausragendes Merkmal ist der Shell-Modus: Sie verbinden sich einmal und geben dann interaktiv Befehle ein – wie eine REPL für 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

# Interaktive Shell
mqtt shell

In der Shell öffnet con -h broker.connectmq.com -i cli-cmp-shell3 eine Verbindung, und nachfolgende pub- und sub-Befehle nutzen sie weiter. Ergänzen Sie -V 3, wenn Sie das Verhalten von MQTT 3.1.1 testen müssen, und -s für TLS mit dem Standard-Truststore.

Achten Sie auf einen Namenskonflikt: Sowohl die HiveMQ CLI als auch die MQTT.js-CLI installieren einen Befehl namens mqtt. Haben Sie beide, gewinnt der, der zuerst in Ihrem PATH steht.

MQTT.js-CLI

Wenn Sie ohnehin mit Node.js arbeiten, bringt das Paket MQTT.js eine eigene CLI mit. Sie deckt die Grundlagen ab und verwendet für gängige Flags dieselben Optionsbuchstaben wie Mosquitto.

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'

Sie ist nicht die funktionsreichste Option, aber es ist dieselbe Bibliothek, die auch Ihre Node-Anwendung verwendet – das Verhalten stimmt also exakt überein. Für Anwendungscode geht es weiter mit MQTT.js in Node.js.

curl

Nur wenige wissen, dass curl MQTT spricht. Es unterstützt nur MQTT 3.1.1 mit QoS 0 und hat keine Retained- oder Will-Optionen, ist aber auf den meisten Linux- und macOS-Systemen sowie in vielen Container-Basis-Images installiert (prüfen Sie mit curl -V, ob mqtt in der Protokollliste steht).

# Abonnieren (gibt rohe Payloads aus; Strg+C zum Beenden)
curl -s mqtt://broker.connectmq.com:1883/connectmq%2Fdemo%2Fc1t9%2Ftest

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

Kodieren Sie die Schrägstriche im Topic als %2F. curl erzeugt seine eigene Client ID, sodass Sie es nicht gegen Broker einsetzen können, die pro Zugangsdaten eine bestimmte Client ID verlangen. Für alles, was über einen Smoke-Test hinausgeht, nutzen Sie eines der spezialisierten Tools.

mqttui

mqttui ist eine in Rust geschriebene Terminal-Oberfläche. Sie zeigt einen Live-Topic-Baum, den neuesten Payload und einfache Verlaufsgrafiken für numerische Werte – alles im Terminal und damit ideal über SSH, wo Sie keine Desktop-App starten können.

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

Es ist ein Erkundungs-, kein Skripting-Tool. Eine reichhaltigere grafische Ansicht bieten die Desktop-Apps zum Erkunden von MQTT.

Derselbe Test in jedem Tool

Ein fairer Vergleich ist eine Aufgabe, die überall gleich erledigt wird: connectmq/demo/c1t9/# abonnieren, eine QoS-1-Nachricht an connectmq/demo/c1t9/test veröffentlichen und nach deren Empfang beenden.

Tool Empfangen und beenden (eine Nachricht oder Timeout)
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/#' (oder eine Count-Option, falls Ihre Version eine hat)
HiveMQ CLI timeout 10 mqtt sub -h broker.connectmq.com -i s3-c1t9 -t 'connectmq/demo/c1t9/#'
MQTT.js-CLI 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

Deshalb bleibt mosquitto_sub die Standardwahl in CI-Pipelines: Mit -C und -W wird „auf genau eine Nachricht warten oder fehlschlagen“ zum Einzeiler. Prüfen Sie bei den anderen Tools --help in Ihrer installierten Version, da sich Optionen zwischen Releases ändern.

Welches MQTT-CLI-Tool sollten Sie verwenden?

  1. Auf Servern, Raspberry Pis und in CI: Mosquitto-Clients. Klein, überall paketiert, am besten für Skripte.
  2. Für die tägliche Entwicklung am Laptop: MQTTX CLI oder HiveMQ CLI. Lesbare Ausgabe und MQTT-5-Details standardmäßig.
  3. Zum interaktiven Debuggen von MQTT-5-Verhalten: der Shell-Modus der HiveMQ CLI.
  4. In einem Node-Projekt: die MQTT.js-CLI, damit Tests dem Produktivverhalten entsprechen.
  5. In einem nackten Container ohne installierte Tools: curl für einen QoS-0-Smoke-Test.
  6. Über SSH beim Erkunden unbekannter Topics: mqttui.

Viele Teams behalten zwei: Mosquitto-Clients für die Automatisierung und ein freundlicheres Tool für Menschen. Wenn Sie Ihren Editor am liebsten nie verlassen, zeigt der Leitfaden zur MQTT-Erweiterung für VS Code diesen Workflow.

CLI-Tools mit einem privaten Broker nutzen

Jedes der obigen Tools erwartet für einen Produktiv-Broker dieselben drei Dinge: Host und TLS-Port, Zugangsdaten und Client ID. Bei ConnectMQ erzeugt das Portal alle drei, wenn Sie einen Broker anlegen:

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

Da Client IDs an die ausgestellten Zugangsdaten gebunden sind, verwenden Sie genau die Client ID aus dem Portal; eine zufällige ID wird abgelehnt. Das Zertifikat stammt von Let's Encrypt, daher funktionieren die System-Truststores der meisten Linux-Distributionen ohne zusätzliche Dateien. Der Broker akzeptiert außerdem WebSocket auf 8083 und sicheres WebSocket auf 8084 unter dem Pfad /mqtt für Tools, die das unterstützen.

Nutzen Sie den kostenlosen öffentlichen MQTT-Broker zum Lernen und für schnelle Experimente und einen verwalteten MQTT-Broker für alles, was echte Geräte oder Daten betrifft. Wie sich CLI-Tests in einen umfassenderen Entwicklungsworkflow einfügen, zeigt die Übersicht der MQTT-Client-Bibliotheken, die CLI-Checks dem Code in jeder Sprache zuordnet.

Starten Sie mit ConnectMQ

Erstellen Sie unter app.connectmq.com einen privaten Broker im kostenlosen Serverless-Plan, ganz ohne Kreditkarte, und richten Sie Ihr bevorzugtes CLI-Tool darauf aus. Der MQTT-Client im Browser und der Live-Topic-Explorer des Portals sind eine praktische zweite Ansicht, während Sie im Terminal debuggen.

Häufig gestellte Fragen

Welches MQTT-CLI-Tool eignet sich am besten für Einsteiger?

MQTTX CLI oder die HiveMQ CLI, weil ihre Ausgabe leichter zu lesen ist und sie standardmäßig MQTT 5 verwenden. Lernen Sie als Nächstes mosquitto_pub und mosquitto_sub, denn die finden Sie auf fast jedem Server.

Kann ich MQTT testen, ohne etwas zu installieren?

Oft ja: curl unterstützt auf den meisten Systemen einfaches Veröffentlichen und Abonnieren per MQTT. Das ConnectMQ-Portal enthält außerdem einen MQTT-Client im Browser für Ihren eigenen Broker.

Welches CLI-Tool zeigt MQTT-5-Reason-Codes an?

Alle MQTT-5-fähigen Tools melden sie, am deutlichsten zeigen den Paketaustausch jedoch die Mosquitto-Clients mit -d und die HiveMQ CLI.

Warum wird mein CLI-Client wiederholt getrennt?

Meist nutzt ein anderer Client dieselbe Client ID, sodass der Broker die ältere Verbindung trennt. Geben Sie jedem Terminal eine eigene ID.

Verwandte Artikel

MQTT-Daten mit Python in InfluxDB speichern

Bauen Sie mit paho-mqtt und influxdb-client eine Python-Bridge, die einen Broker abonniert, Topic-Ebenen in InfluxDB-Tags verwandelt, numerische JSON-Werte als Fields in Batches schreibt und fehlerhafte Payloads sowie Typkonflikte behandelt.

8 Min. Lesezeit

Alle Artikel →

Ihr privater MQTT-Broker ist nur wenige Klicks entfernt

Konto anlegen, Broker-Zugangsdaten erhalten und das erste Gerät verbinden — ohne Server, die installiert, gepatcht oder skaliert werden müssen.