Mit dem Plugin für die Grafana-MQTT-Datenquelle kann ein Dashboard Broker-Topics abonnieren und Werte in dem Moment darstellen, in dem sie veröffentlicht werden, ganz ohne Datenbank dazwischen. In diesem Tutorial installieren Sie das Plugin, verbinden es mit broker.connectmq.com, bauen Live-Panels aus numerischen und JSON-Payloads und erfahren genau, wann Sie stattdessen eine Zeitreihendatenbank hinzufügen sollten.
So funktioniert die Grafana-MQTT-Datenquelle
Die meisten Grafana-Datenquellen sind abfragebasiert: Ein Panel fragt eine Datenbank nach einem Zeitraum und zeichnet das Ergebnis. Die MQTT-Datenquelle ist anders. Sie ist eine Streaming-Datenquelle auf Basis von Grafana Live. Wenn ein Panel geöffnet wird, abonniert der Grafana-Server das angegebene Topic, und jede Nachricht wird über ein WebSocket an den Browser gepusht und an das Diagramm angehängt.
Dieses Design hat zwei Konsequenzen, die Sie verstehen sollten, bevor Sie etwas Ernsthaftes bauen:
- Die Latenz ist hervorragend. Ein von einem Gerät veröffentlichter Wert erscheint fast sofort im Panel, was ideal für Inbetriebnahmen, Live-Demos und Leitstand-Ansichten ist.
- Es gibt keine Historie. Das Plugin zeigt nur, was eintraf, während das Panel geöffnet war. Laden Sie das Dashboard neu, beginnt das Diagramm leer. Sie können nicht auf gestern herauszoomen, weil gestern nie gespeichert wurde.
Behalten Sie beides im Hinterkopf. Die MQTT-Datenquelle ist ein Fenster in den Live-Datenstrom, keine Aufzeichnung davon.
Das Plugin installieren
Die Plugin-ID lautet grafana-mqtt-datasource. Bei einer nativen Grafana-Installation:
grafana cli plugins install grafana-mqtt-datasource
sudo systemctl restart grafana-server
Ältere Grafana-Versionen verwenden das Binary grafana-cli statt grafana cli. Mit Docker lassen Sie den Container das Plugin beim Start installieren:
services:
grafana:
image: grafana/grafana:11.3.0
ports:
- "3000:3000"
environment:
GF_INSTALL_PLUGINS: grafana-mqtt-datasource
volumes:
- grafana-data:/var/lib/grafana
volumes:
grafana-data:
Führen Sie docker compose up -d aus und öffnen Sie http://localhost:3000. Die Standardanmeldung ist admin / admin, und Grafana fordert Sie auf, sie zu ändern.
Die Verbindung konfigurieren
Gehen Sie in Grafana zu Connections, dann Data sources, dann Add data source, und suchen Sie nach MQTT. Die Einstellungsseite fragt nach einer URI und optionalen Zugangsdaten.
| Einstellung | Öffentlicher MQTT-Broker | Privater Broker (Produktion) |
|---|---|---|
| URI | tcp://broker.connectmq.com:1883 |
tls://broker.connectmq.com:8883 |
| Username | leer | YOUR_USERNAME |
| Password | leer | YOUR_PASSWORD |
| TLS-Optionen | keine | CA leer lassen; das Let's-Encrypt-Zertifikat ist öffentlich vertrauenswürdig |
Klicken Sie auf Save and test. Eine grüne Bestätigung bedeutet, dass der Grafana-Server, nicht Ihr Browser, den Broker erreicht hat. Diese Unterscheidung ist in abgeschotteten Netzwerken wichtig: Der Server benötigt ausgehenden Zugriff auf Port 1883 oder 8883. Zeigt Ihre Plugin-Version ein Feld für die Client-ID und verbinden Sie sich mit einem verwalteten MQTT-Broker, der Client-IDs an Zugangsdaten bindet, geben Sie die mit Ihrem Benutzernamen ausgestellte Client-ID ein.
Testdaten veröffentlichen
Wählen Sie ein eindeutiges Präfix wie connectmq/demo/a1b2c3, damit Ihre Test-Topics auf dem öffentlichen MQTT-Broker getrennt bleiben. Diese Bash-Schleife veröffentlicht alle zwei Sekunden eine einfache numerische Temperatur:
ID=a1b2c3
while true; do
T=$(awk -v r=$RANDOM 'BEGIN { printf "%.2f", 20 + r / 32767 * 5 }')
mosquitto_pub -h broker.connectmq.com -p 1883 -i "pub-$ID" \
-t "connectmq/demo/$ID/room1/temperature" -m "$T"
sleep 2
done
Und diese veröffentlicht ein JSON-Objekt mit mehreren Werten:
ID=a1b2c3
while true; do
T=$(awk -v r=$RANDOM 'BEGIN { printf "%.2f", 20 + r / 32767 * 5 }')
H=$(awk -v r=$RANDOM 'BEGIN { printf "%.1f", 40 + r / 32767 * 15 }')
mosquitto_pub -h broker.connectmq.com -p 1883 -i "pubjson-$ID" \
-t "connectmq/demo/$ID/room1/telemetry" \
-m "{\"temperature\": $T, \"humidity\": $H}"
sleep 2
done
Für viele Geräte gleichzeitig starten Sie den MQTT-Gerätesimulator in Python und richten Panels auf einzelne Geräte-Topics.
Ein Live-Panel mit der Grafana-MQTT-Datenquelle bauen
- Erstellen Sie ein neues Dashboard und fügen Sie eine Visualisierung hinzu.
- Wählen Sie die MQTT-Datenquelle.
- Geben Sie im Abfrage-Editor das Topic ein, zum Beispiel
connectmq/demo/a1b2c3/room1/temperature. - Wählen Sie die Visualisierung Time series. Innerhalb von Sekunden erscheinen Werte.
- Stellen Sie den Zeitraum des Dashboards auf etwas Kurzes, etwa die letzten 5 Minuten. Automatisches Aktualisieren ist nicht nötig, da das Panel streamt.
Beim JSON-Topic macht das Plugin aus jedem numerischen Schlüssel im Objekt ein eigenes Field, sodass temperature und humidity zwei Serien im selben Panel werden. Nutzen Sie Field Overrides, um die Luftfeuchte auf eine rechte Achse zu legen oder jeder Serie eine eigene Einheit zu geben. Stat- und Gauge-Panels eignen sich gut für einzelne aktuelle Werte; stellen Sie deren Berechnung auf "Last", damit sie immer den neuesten Messwert zeigen.
Neuere Versionen des Plugins akzeptieren die Wildcards + und # im Topic-Feld, was praktisch ist, um eine Gruppe von Sensoren in einem Panel zu beobachten. Ist Ihr Broker als Unified Namespace (UNS) nach ISA-95 aufgebaut, zeigt eine Wildcard wie acme/werk-muenchen/montage/linie-1/+/temperatur alle Zellen einer Linie in einer Leitstand-Ansicht. Lehnt Ihre Version Wildcards ab, fügen Sie stattdessen eine Abfrage pro Topic hinzu, da jedes Panel mehrere Abfragen enthalten kann.
Häufige Probleme und Lösungen
| Symptom | Ursache | Lösung |
|---|---|---|
| "Save and test" schlägt fehl | Grafana-Server erreicht den Broker nicht | Vom Server aus mit mosquitto_sub testen; Firewalls und URI-Schema prüfen |
| Panel bleibt leer | Topic passt nicht oder noch nichts veröffentlicht | Mit mosquitto_sub -t "connectmq/demo/a1b2c3/#" -v prüfen |
| Diagramm nach Neuladen leer | Erwartetes Verhalten; es wird keine Historie gespeichert | Eine Zeitreihendatenbank für die Historie ergänzen |
| Text statt Zahlen | Payload enthält Einheiten, etwa 21.5 C |
Reine Zahlen oder JSON-Zahlen veröffentlichen |
| Panel friert im Browser ein | Sehr hohe Nachrichtenrate auf einem Topic | Seltener veröffentlichen oder vor dem Veröffentlichen aggregieren |
| Unauthorized bei einem privaten Broker | Falsche Zugangsdaten oder Client-ID | Die Werte erneut aus dem Broker-Portal kopieren |
Wann Sie eine Zeitreihendatenbank ergänzen sollten
Die Streaming-Datenquelle ist das richtige Werkzeug für eine schmale Auswahl an Aufgaben. Sobald Sie Historie, Aggregation oder Alarme über Zeiträume brauchen, gehört eine Datenbank zwischen Broker und Grafana.
| Anforderung | Nur MQTT-Datenquelle | Telegraf + InfluxDB + Grafana |
|---|---|---|
| Live-Ansicht unter einer Sekunde | Ja | Annähernd, begrenzt durch das Flush-Intervall |
| Letzte Woche ansehen | Nein | Ja |
| Mittelwerte, Min/Max pro Stunde | Nein | Ja, in der Abfrage |
| Alarmregeln über Zeitfenster | Eingeschränkt | Ja |
| Übersteht Neuladen des Dashboards | Nein | Ja |
| Zusätzlich zu betreibende Komponenten | Keine | Zwei |
Ein verbreitetes Muster kombiniert beides: ein datenbankgestütztes Panel für den Trend und ein Streaming-Panel für den aktuellen Wert. Das Tutorial zum Telegraf MQTT Consumer zeigt, wie Sie dieselben Topics in InfluxDB schreiben, und der TIG-Stack mit Docker Compose liefert den gesamten Stack in einer Datei mit provisionierten Dashboards. Sobald eine Historie existiert, werden Grafana-Alarme auf IoT-Sensordaten möglich.
Hinweise für die Produktion
Der öffentliche MQTT-Broker ist für jeden lesbar und für Tests und Prototypen gedacht; nutzen Sie ihn also nur für Testdaten. Verbinden Sie Grafana für echte Anlagen mit einem privaten, TLS-geschützten Broker. Ein verwalteter MQTT-Broker von ConnectMQ bietet TLS auf Port 8883 und Zugangsdaten aus dem Portal, und Grafana verbindet sich damit wie jeder andere MQTT-Client. Denken Sie daran, dass jede Verbindung des Grafana-Servers auf das Verbindungslimit Ihres Plans angerechnet wird, das im Plan Serverless (Free) bei 25 liegt.
Für reine Browser-Anwendungsfälle, in denen Sie gar keinen Grafana-Server wollen, kann eine kleine Webseite mit MQTT über WebSocket auf Port 8084 Live-Werte direkt anzeigen. Um dafür oder für Gerätecode den passenden Client-Stack zu wählen, lesen Sie den Leitfaden zu MQTT-Client-Bibliotheken. Die eigene Seite der Grafana-MQTT-Datenquelle dokumentiert die aktuellen Optionen des Plugins.
Starten Sie mit ConnectMQ
Richten Sie das Plugin auf broker.connectmq.com, und Sie haben in wenigen Minuten ein Live-Panel. Wenn das Dashboard echte Geräte zeigen soll, betreiben Sie Ihren Broker auf ConnectMQ, wo Sie zusätzlich einen MQTT-Client im Browser und einen Live-Topic-Explorer erhalten, um Topics zu prüfen, bevor Sie Panels verknüpfen. Erstellen Sie unter app.connectmq.com einen kostenlosen Serverless-Broker, ohne Kreditkarte. Planen Sie einen größeren Rollout? Unser Leitfaden zum Cloud-MQTT-Broker beschreibt, was sich bei Skalierung ändert.
Häufig gestellte Fragen
Speichert die Grafana-MQTT-Datenquelle Daten?
Nein. Sie streamt Nachrichten über Grafana Live an geöffnete Panels und behält nichts, sobald das Panel geschlossen wird. Verwenden Sie eine Zeitreihendatenbank wie InfluxDB, wenn Sie eine Historie brauchen.
Kann ich Wildcards im Topic-Feld verwenden?
Neuere Plugin-Versionen unterstützen + und #. Bei älteren Versionen fügen Sie eine Abfrage pro Topic hinzu.
Welche Payload-Formate funktionieren mit dem Plugin?
Einfache numerische Payloads und JSON-Objekte mit numerischen Werten funktionieren am besten. Jeder numerische JSON-Schlüssel wird zu einem eigenen Field im Panel.
Verbindet sich der Browser direkt mit dem Broker?
Nein. Der Grafana-Server hält die MQTT-Verbindung und leitet Daten über Grafana Live an Browser weiter, sodass nur der Server Netzwerkzugriff auf den Broker benötigt.



