IoT-Tutorials

Grafana-MQTT-Datenquelle: Live-Streaming-Panels direkt von Ihrem Broker

Installieren und konfigurieren Sie das MQTT-Datenquellen-Plugin von Grafana, streamen Sie numerische und JSON-Payloads von broker.connectmq.com in Live-Panels und entscheiden Sie, wann eine Zeitreihendatenbank wie InfluxDB die bessere Wahl ist.

Grafana-MQTT-Datenquelle, die Live-Temperaturwerte von einem Broker in ein Echtzeit-Dashboard-Panel streamt
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

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:

  1. 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.
  2. 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

  1. Erstellen Sie ein neues Dashboard und fügen Sie eine Visualisierung hinzu.
  2. Wählen Sie die MQTT-Datenquelle.
  3. Geben Sie im Abfrage-Editor das Topic ein, zum Beispiel connectmq/demo/a1b2c3/room1/temperature.
  4. Wählen Sie die Visualisierung Time series. Innerhalb von Sekunden erscheinen Werte.
  5. 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.

Verwandte Artikel

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.

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.