Zum Hauptinhalt springen

Grafana

Die IoT-Plattform unterstützt zwei Grafana-Datenquellen:

  1. JSON-Datenquelle (simpod-json-datasource) - hosten Sie Ihr eigenes Grafana und zeigen Sie Zeitreihendaten der Plattform an.
  2. Infinity-Datenquelle - verwenden Sie beliebige REST-API-Endpunkte der IoT-Plattform, um Tabellen, Diagramme und Karten zu erstellen und den Alert Manager von Grafana zu steuern.

Diese Anleitung zeigt, wie man Panels erstellt. Um Grafana zunächst zu installieren und zu verbinden, siehe Grafana-Einrichtung. Wenn Sie keinen Zugriff auf Grafana über Ihr Plattformkonto haben, bitten Sie einen Admin, Ihnen Zugriff zu gewähren, oder kontaktieren Sie Ihren technischen Support.

Welche Datenquelle soll ich verwenden?​

Verwenden Sie die…wenn Sie…
JSON-Datenquelleschnell die Werte eines Geräts grafisch darstellen oder Geräte auf einer Karte anzeigen möchten (Gerät als „Metrik“ ausgewählt)
Infinity-Datenquelleeine beliebige REST-API-Antwort in eine Tabelle laden, Diagramme/Karten aus beliebigen Endpunkten erstellen oder Alarmierung einrichten möchten

Feldnamen sind die kanonischen Felder der IoT-Plattform (temperature, rssi, lnglat, …), sodass ein für ein Gerät erstelltes Panel auch für andere Geräte derselben Art funktioniert.


Panels mit der JSON-Datenquelle erstellen​

Zeitreihendiagramm​

  1. Wählen Sie Time series als Visualisierung (oben rechts).
  2. Wählen Sie die Metrik (den IoT-Node / das Gerät), das Sie grafisch darstellen möchten.
  3. Die Wahl der Platzhalter-Metrik (*) stellt Werte aller Ihrer aktiven Geräte dar.

lat / lng aus einem Diagramm ausblenden​

Wenn ein Gerät ein Feld lnglat hat, erscheinen dessen lat und lng im Zeitreihen- diagramm. Um sie auszublenden:

Ein Grafana-Zeitreihendiagramm aus der JSON-Datenquelle, mit ausgeblendeten lat und lng

  1. Stellen Sie sicher, dass eine Metrik (Gerät) ausgewählt ist.
  2. Klicken Sie auf Transform.
  3. Wählen Sie Filter by name.
  4. Deaktivieren Sie lat und lng.

Karte (Geomap)​

  1. Wählen Sie Geomap als Visualisierung (oben rechts).
  2. Wählen Sie die Metrik (Gerät), die dargestellt werden soll.
  3. Stellen Sie sicher, dass lat und lng aktiviert sind (Gegenteil des vorherigen Schritts).
  4. Die Wahl der Platzhalter-Metrik (*) stellt die GPS-Positionen aller Ihrer aktiven Geräte dar - nach Auswahl der Option Merge unter Transform.

Standortverlauf eines Trackers​

  1. Wählen Sie Geomap als Visualisierung (oben rechts).
  2. Wählen Sie die Metrik Your Tracker.lnglat - dies zeichnet die Spur automatisch auf der Karte.
  3. Fügen Sie optional eine zweite Abfrage hinzu, Your Tracker.speed, um die Spur farblich zu codieren.
  4. Wählen Sie im Seitenpanel Marker den Wert für die Farbcodierung aus und legen Sie die Schwellenwerte fest.

Ein Grafana-Geomap-Panel, das die Positionshistorie eines Trackers darstellt, nach Schwellenwerten eingefärbt tracker map coloured by value


Panels mit der Infinity-Datenquelle erstellen​

Die Infinity-Datenquelle ruft die REST-API der IoT-Plattform direkt auf. Der einfachste Weg, sie zu erlernen: Kopieren Sie eine vollständige Anfrage-URL aus Swagger (https://staging.yggio.net/swagger), fügen Sie sie in das Panel ein, fügen Sie dann Spalten mit den Feldnamen aus der JSON- Antwort hinzu (in Swagger sichtbar) und legen Sie den Datentyp jeder Spalte fest. Klicken Sie auf Aktualisieren, um es auszuprobieren.

Tabelle​

  1. Wählen Sie Table als Visualisierung (oben rechts).
  2. Geben Sie die GET-URL https://staging.yggio.net/api/iotnodes ein. Fügen Sie zum Filtern eine q- Query hinzu - z. B. liefert https://staging.yggio.net/api/iotnodes?q=temperature nur Geräte mit einem Feld temperature.
  3. Geben Sie unter Parsing options & Result fields die gewünschten Spalten ein, z. B.:
    • name als Name, Typ String
    • reportedAt als Reported, Typ Time
    • rssi als RSSI, Typ Number
    • snr als SNR, Typ Number

Ein Grafana-Tabellen-Panel auf Basis der Infinity-Datenquelle, mit den geparsten Gerätespalten Dasselbe Infinity-Tabellen-Panel mit mehr ausgefüllten Zeilen und Spalten

Um kontextuelle Parameter einzubeziehen, fügen Sie Selektor-Spalten wie contextMap.yourFieldName hinzu:

Ein Infinity-Tabellen-Panel mit einem contextMap-Feld als zusätzliche Spalte

Um dieselben Daten als Balkendiagramm anzuzeigen, ändern Sie einfach den Panel-Typ auf Bar chart:

Dieselben Infinity-Daten als Balkendiagramm-Panel

Zeitreihe​

  1. Wählen Sie Time series als Visualisierung (oben rechts).
  2. Geben Sie die GET-URL https://staging.yggio.net/api/iotnodes/<device _id>/stats?measurement=temperature&start=<start time in unix ms>&distance=3600 ein, um die Zeitreihe von temperature zu erhalten (distance ist die Bucket-Größe in Sekunden).
  3. Ordnen Sie unter Parsing options & Result fields die Spalten zu:
    • value als value, Typ Number
    • time als time, Typ Time

Ein Grafana-Zeitreihen-Panel auf der Infinity-Datenquelle, mit time als Time-Feld geparst Dasselbe Infinity-Zeitreihen-Panel über einen längeren Zeitraum

Karte (Geomap)​

  1. Wählen Sie Geomap als Visualisierung (oben rechts).
  2. Geben Sie die GET-URL https://staging.yggio.net/api/iotnodes?q=lnglat ein, um Geräte mit einem gültigen Standort zu erhalten.
  3. Ordnen Sie unter Parsing options & Result fields den Standort und die darzustellenden Werte zu - z. B. für eine Signalstärkekarte:
    • lnglat.coordinates.0 als Longitude, Typ Number
    • lnglat.coordinates.1 als Latitude, Typ Number
    • rssi als RSSI, Typ Number
    • snr als SNR, Typ Number
  4. Fügen Sie Schwellenwerte hinzu, um die Karte farblich zu codieren.

Ein Grafana-Geomap-Panel auf der Infinity-Datenquelle, mit nach Schwellenwert eingefärbten Geräten Dasselbe Infinity-Geomap-Panel, auf einen einzelnen Standort gezoomt


Einen Panel-Typ auswählen​

Grafana bietet viele Visualisierungen. Für die Daten der IoT-Plattform sind dies die gängigen Auswahlmöglichkeiten:

Um … zu zeigenVerwendenHinweise
Einen Wert im Zeitverlauf (Temperatur, Energie, Feuchtigkeit)Time seriesder Standard für Metriken
Den letzten Einzelwert, groß und fett (aktuelle Temp., Batterie %)StatSchwellenwerte zur Farbcodierung hinzufügen; zeigt eine Sparkline
Einen Wert innerhalb eines bekannten Bereichs (Batterie %, Tankfüllstand, Feuchtigkeit)Gaugemin/max und Schwellenwerte festlegen
Denselben Wert über viele Geräte (Batterie jedes Sensors)Bar gaugeein Balken pro Gerät - Platzhalter-Metrik * + eine Reduce-Transformation
Eine Liste von Geräten und ihren FeldernTableInfinity → /api/iotnodes
Gerätestandorte, Tracker-Pfade, HeatmapsGeomapbenötigt lnglat (lat/lng)
Einen booleschen / Ein-Aus-Zustand im Zeitverlauf (Belegung, Tür, Alarm)State timelineideal für presence, contact, *Alarm-Felder
Anzahlen oder Kategorien nebeneinander (Personen pro Zone)Bar chart
Die Verteilung/Streuung einer MessgrößeHistogram
Aktuelle AlarmeAlert listpasst zu Infinity-Alarmregeln

Tipps & Techniken​

  • Einheit festlegen (Panel → Standard options → Unit, z. B. Celsius (°C), Percent (0-100), Volts), damit Achsen, Tooltips und Stat/Gauge korrekt gerendert werden.
  • Schwellenwerte (Panel → Thresholds) färben Stat / Gauge / Time series je nach Wert - z. B. wird die Temperatur über 30 °C rot, die Batterie unter 20 % gelb.
  • Wertzuordnungen (Panel → Value mappings) verwandeln Zahlen in Wörter - bilden Sie 0 → Closed / 1 → Open ab, oder false → Vacant / true → Occupied für boolesche Felder wie contact oder presence.
  • Transformationen übernehmen den größten Teil der Formgebung, ohne die Abfrage zu ändern:
    • Filter by name - Felder wie lat / lng ausblenden.
    • Merge - Platzhalter-Ergebnisse (*) zu einer Serie oder Tabelle zusammenführen.
    • Organize fields - Spalten umbenennen, neu ordnen und ausblenden.
    • Reduce - eine Zeitreihe auf ihren letzten / max. / mittleren Wert reduzieren (versorgt ein Stat- oder Bar-Gauge-Panel).
    • Add field from calculation - abgeleitete Spalten (Differenz, Verhältnis usw.).
  • Geräte-Dropdown (Dashboard-Variablen): Erstellen Sie unter Dashboard settings → Variables eine Variable mit Gerätenamen und referenzieren Sie sie in Ihren Abfragen, sodass ein Dashboard jedes Gerät bedient. Kombinieren Sie es mit Repeat (Panel → Repeat options), um automatisch ein Panel pro ausgewähltem Gerät zu erzeugen.
  • Navigation zwischen Dashboards: Verknüpfen Sie Dashboards, um eine Landingpage-→-Drilldown-Erfahrung zu bauen. Optionen, einfachste zuerst:
    • Text panel - einfache Markdown-Links zu anderen Dashboards.
    • Dashboard list panel - listet Dashboards automatisch nach Tag oder Ordner, keine Konfiguration.
    • Data links / panel links - auf eine Serie oder ein Panel klicken, um zu einem anderen Dashboard zu springen, unter Übernahme der aktuellen Variablen (z. B. des ausgewählten Geräts).
    • Business Text panel (Volkov Labs, Community-Plugin marcusolsson-dynamictext-panel) - die leistungsstärkste Option: rendert benutzerdefiniertes Markdown/HTML aus Ihren Abfragedaten, sodass Sie ein datengetriebenes Navigationsmenü bauen können (z. B. ein Link pro Gerät, generiert aus einer Geräteliste, jeder übergibt dieses Gerät an die Variablen des Ziel-Dashboards). Installieren Sie es zuerst: grafana-cli plugins install marcusolsson-dynamictext-panel, dann neu starten.
  • Auto-Refresh & Zeitbereich: Legen Sie die Dashboard-Aktualisierung fest (z. B. jede 1 Min.) und einen sinnvollen Standardbereich (oben rechts) - Last 24 hours ist ein guter Anfang.
  • Legendenwerte: Zeigen Sie letzter / mittlerer / max. Wert in der Legende (Panel → Legend) für schnelle Werte auf einen Blick.
  • Alarmierung (nur Infinity): Sie können auf jeden REST-Wert alarmieren - Schwellenwerte oder offline-Geräte über No data - siehe Einen einfachen Alarm einrichten.
  • Öffentliche Dashboards (in eine Website einbetten, kein Login): Ein öffentliches Dashboard führt Abfragen ohne angemeldeten Nutzer aus, sodass es die IoT-Plattform nicht direkt abfragen kann - die Daten müssen zuerst in Ihren eigenen Speicher kopiert werden. Siehe Auf einem öffentlichen Dashboard veröffentlichen.

Gängige Rezepte​

End-to-End-Beispiele, die die obigen Schritte kombinieren - kopieren Sie die Einstellungen.

Aktuelle Temperatur, farbcodiert (Stat)

  1. Neues Panel → Stat. JSON-Datenquelle → Gerät auswählen → Feld temperature.
  2. Standard options → Unit = Celsius (°C).
  3. Thresholds: Basis grün, rot hinzufügen bei 30, blau bei 0. → Eine große aktuelle Temperaturzahl, die rot wird, wenn es heiß ist.

Batteriestand jedes Sensors (Bar gauge)

  1. Neues Panel → Bar gauge. JSON-Datenquelle → Metrik * → Feld batteryLevel.
  2. Transform → Reduce = Last (ein Wert pro Gerät).
  3. Unit = Percent (0-100); Thresholds: rot <20, gelb <50, sonst grün. → Ein Balken pro Sensor - zeigt sofort, welche Batterien niedrig sind.

Belegung im Zeitverlauf (State timeline)

  1. Neues Panel → State timeline. Gerät auswählen → Feld presence (oder occupied).
  2. Value mappings: true → Occupied, false → Vacant (jeweils eine Farbe zuweisen). → Ein farbiges Band, das zeigt, wann der Raum belegt war.

Alarm, wenn ein Gerät offline geht - richten Sie eine Infinity-Alarmregel ein (siehe Einen einfachen Alarm einrichten) und verwenden Sie deren Option No data → Alerting, damit Sie benachrichtigt werden, wenn ein Sensor aufhört zu melden.

Flottenübersichtstabelle (Table über Infinity)

  1. Neues Panel → Table. Infinity-Datenquelle → GET https://staging.yggio.net/api/iotnodes (fügen Sie ?q=batteryLevel hinzu, um es auf Ihre Sensoren zu beschränken).
  2. Parsing options & Result fields - fügen Sie die Spalten hinzu:
    • name als Device, Typ String
    • batteryLevel als Battery %, Typ Number
    • rssi als RSSI, Typ Number
    • snr als SNR, Typ Number
    • reportedAt als Last reported, Typ Time
  3. Färben Sie die Batteriespalte: Fügen Sie einen Field Override auf Battery % hinzu → Cell display mode = Colored background, mit Thresholds rot <20, gelb <50, sonst grün.
  4. Stille Geräte sichtbar machen: Sortieren Sie die Tabelle nach Last reported (auf die Spaltenüberschrift klicken oder als Standardsortierung festlegen), damit die am längsten nicht gesehenen Geräte nach oben wandern. → Eine Zeile pro Gerät mit Batterie, Signal und letzter Meldung - ein Überblick über den Flottenzustand auf einen Blick.

Energieverbrauch pro Tag (Bar chart)

  1. Führen Sie den Übersetzer calculate-energy-consumption-per-time-period auf dem Zähler aus - er verwandelt den kumulativen activeEnergyImport-Messwert in energyConsumptionDay / Week / Month (jeweils zurückgesetzt um lokale Mitternacht). Siehe Übersetzer entwickeln.
  2. Neues Panel → Bar chart (oder Time series). JSON-Datenquelle → Zähler auswählen → Feld energyConsumptionDay.
  3. Unit = kWh (Kilowattstunde); optional Schwellenwerte hinzufügen, um Tage mit hohem Verbrauch zu markieren. → Der Verbrauch jedes Tages; der Wert kurz vor Mitternacht ist der Tagesgesamtwert.

Kein Übersetzer auf dem Zähler? Fragen Sie den rohen kumulativen Messwert pro Tag über Infinity ab - /stats?measurement=activeEnergyImport&distance=86400 - und bilden Sie dann die Tag-über-Tag-Differenz in Grafana. Die /stats-Route der IoT-Plattform bucketed nach distance, differenziert aber nicht serverseitig, daher ist die Übersetzer-Route oben einfacher.


Einen einfachen Alarm einrichten (Infinity)​

Grafana kann über die Infinity-Datenquelle auf beliebige REST-Daten der IoT-Plattform alarmieren. Hier ist ein minimaler Schwellenwert-Alarm - „benachrichtige mich, wenn eine Temperatur über 30 °C steigt“ - mit Grafanas vereinheitlichter Alarmierung (Grafana 9+).

  1. Einen Kontaktpunkt erstellen (einmalig): Alerting → Contact points → Add contact point. Wählen Sie einen Typ (E-Mail, Slack, Webhook, …), füllen Sie die Details aus und testen Sie ihn.
  2. Neue Alarmregel: Alerting → Alert rules → New alert rule, und benennen Sie sie.
  3. Den Wert abfragen (Abfrage A): Wählen Sie die Infinity-Datenquelle und geben Sie eine GET-URL ein, die die zu beobachtende Zahl liefert, z. B. https://staging.yggio.net/api/iotnodes/<device _id>/stats?measurement=temperature&start=<ms>&distance=3600 (parsen Sie value als Number). Führen Sie sie aus, um zu bestätigen, dass Daten zurückkommen.
  4. Auf einen Wert reduzieren (Ausdruck B): Fügen Sie einen Reduce-Ausdruck hinzu, Funktion Last, Eingabe A. Alarmregeln bewerten eine einzelne Zahl, keine ganze Serie.
  5. Den Schwellenwert festlegen (Ausdruck C): Fügen Sie einen Threshold-Ausdruck auf B hinzu, z. B. IS ABOVE 30, und setzen Sie C als Alarmbedingung.
  6. Auswertung: Ordnen Sie die Regel einer Auswertungsgruppe mit einem Intervall zu (z. B. jede 1 Min.) und einer Pending-Periode (z. B. 5 Min.), damit ein kurzer Ausschlag nicht sofort auslöst.
  7. Benachrichtigungen: Fügen Sie eine summary-Annotation hinzu (die Nachricht, die Sie erhalten werden), und stellen Sie sicher, dass die Labels der Regel zu einer Benachrichtigungsrichtlinie passen, die zu Ihrem Kontaktpunkt weiterleitet (die Standardrichtlinie leitet alles an den Standardkontaktpunkt weiter, was der einfachste Anfang ist).
  8. Speichern. Wenn die Temperatur während der Pending-Periode über 30 °C bleibt, erhalten Sie eine Benachrichtigung; sie löst sich automatisch auf, wenn der Wert wieder sinkt.

Offline-Geräte-Alarme: Stellen Sie unter Configure no data and error handling der Regel den Zustand auf Alerting, wenn die Abfrage No data zurückgibt. Kombiniert mit einer Abfrage, die nur aktuelle Daten zurückgibt, benachrichtigt Sie dies, wenn ein Gerät aufhört zu melden.


Auf einem öffentlichen Dashboard veröffentlichen​

Sie können ein Dashboard unter einer öffentlichen URL bereitstellen und in eine Website einbetten, sodass jeder es ohne Login sehen kann - für Live-Luftqualität, Wasserstände, Parkplatz- belegung und Ähnliches.

Das eine Ding, das man zuerst verstehen muss​

Ein öffentliches Dashboard führt seine Abfragen serverseitig aus, ohne angemeldeten Nutzer. Die IoT- Plattform gibt konstruktionsbedingt niemals Daten ohne Autorisierung zurück, sodass ein öffentliches (nutzerloses) Dashboard die IoT-Plattform nicht direkt abfragen kann - die obigen JSON- und Infinity-Datenquellen setzen voraus, dass Sie angemeldet sind, was ein öffentlicher Betrachter nicht ist.

Die Daten müssen also bereits in einem Speicher liegen, den Grafana ohne Login zur IoT-Plattform lesen kann. Das Muster: Kopieren Sie die Live-Daten aus der IoT-Plattform in Ihre eigene InfluxDB und richten Sie das öffentliche Dashboard auf InfluxDB aus. Ein kleiner Node-RED-Flow übernimmt das Kopieren - und weil er sich beim MQTT-Broker der IoT-Plattform mit einem Basic Credential Set authentifiziert (ein dauerhafter Benutzername/Passwort, keine Nutzersitzung), läuft er unbeaufsichtigt. Der öffentliche Betrachter kommt nie mit der Plattform in Kontakt.

Yggio MQTT-Ausgabe ──(Basic Credential Set)──▶ Node-RED ──▶ InfluxDB ──▶ öffentliches Dashboard ──▶ iframe
dauerhafte Auth Bridge-Flow keine Yggio-Auth im öffentlichen Pfad

Viele Teams betreiben bereits Node-RED, sodass dies meist vorhandene Infrastruktur wiederverwendet.

Voraussetzungen​

  • Eine Node-RED-Installation, die den MQTT-Broker der IoT-Plattform erreichen kann (Node-RED-Anleitung).
  • Eine InfluxDB-Instanz (ein einzelner Docker-Container reicht - Schritt 1).
  • Ein selbst gehostetes Grafana, erreichbar aus dem Internet (Reverse-Proxy + HTTPS).
  • In der IoT-Plattform: ein Basic Credential Set und ein MQTT-Kanal auf jedem Gerät, das Sie veröffentlichen möchten (MQTT-Referenz).

Schritt 1 - InfluxDB aufsetzen​

Falls Sie noch keine haben:

docker run -d --name influxdb -p 8086:8086 \
-v influxdb-data:/var/lib/influxdb2 \
influxdb:2

Öffnen Sie http://<host>:8086, führen Sie den Einrichtungsassistenten aus und notieren Sie sich vier Dinge zur Wiederverwendung: die URL, die Organisation, ein API-Token und einen Bucket-Namen (z. B. yggio-public). Verwenden Sie einen separaten Bucket pro Kunde, damit jedes öffentliche Dashboard immer nur dessen eigene Geräte offenlegt.

Schritt 2 - Die Node-RED-Bridge bauen​

  1. Die InfluxDB-Nodes installieren: Manage palette → Install → node-red-contrib-influxdb.

  2. MQTT-in-Node - fügen Sie einen MQTT-Server für den Broker der IoT-Plattform hinzu:

    • Server mqtt.staging.yggio.net, Port 8883, TLS aktiviert.
    • Security: Benutzername/Passwort des Basic Credential Set.
    • Topic: das Topic aus dem MQTT-Kanal des Geräts in der IoT-Plattform (Gerät → Tab Channels → basicCredentialSet-Kanal → Topic kopieren). Siehe die MQTT-Referenz.
    • Setzen Sie Output auf „a parsed JSON object“, damit msg.payload ein Objekt ist.
  3. Function-Node - verwandelt den Messwert in einen InfluxDB-Punkt und behält nur die Geräte, die Sie veröffentlichen möchten:

    // Nur diese Geräte dürfen ins öffentliche Dashboard.
    const PUBLIC = ['device-id-1', 'device-id-2'];

    const deviceId = msg.topic.split('/').pop(); // oder aus msg.payload lesen
    if (!PUBLIC.includes(deviceId)) { return null; } // alles andere verwerfen

    // Nur numerische kanonische Felder behalten (temperature, batteryLevel, ...).
    const fields = {};
    for (const [k, v] of Object.entries(msg.payload)) {
    if (typeof v === 'number') { fields[k] = v; }
    }
    if (Object.keys(fields).length === 0) { return null; }

    msg.payload = [fields, {deviceId}]; // node-red-contrib-influxdb: [fields, tags]
    return msg;
  4. InfluxDB-out-Node - wählen Sie Ihren InfluxDB-Server (URL, Token, Org), legen Sie den Bucket und einen Measurement-Namen fest (z. B. reading).

  5. Deployen. Messwerte fließen nun in InfluxDB.

Keine Daten verlieren, wenn InfluxDB stottert. Die Bridge ist die eine Stelle, für die Node-RED nicht puffert. Für Ausfallsicherheit fassen Sie Schreibvorgänge zusammen und fügen Sie einen kleinen Retry hinzu (ein catch-Node, der einen Retry-Pfad füttert). Für wenige Geräte mit niedriger Meldefrequenz spielt das kaum eine Rolle - bemessen Sie es nach Ihrer Flotte.

Schritt 3 - InfluxDB als Grafana-Datenquelle hinzufügen​

Reine UI, kein Plugin zu installieren (InfluxDB ist in Grafana integriert): Gehen Sie zu Connections → Data sources → Add data source → InfluxDB, legen Sie dann die Abfragesprache fest (Flux für InfluxDB 2), die URL http://<influx-host>:8086 und die Authentifizierung (Token, Organisation, Standard-Bucket). Klicken Sie auf Save & test.

Schritt 4 - Das Dashboard bauen​

Fügen Sie Panels hinzu, die InfluxDB abfragen. Eine minimale Flux-Abfrage für ein Feld:

from(bucket: "yggio-public")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "reading" and r._field == "temperature")

Stellen Sie die Auto-Aktualisierung des Dashboards ein (z. B. 10 s) für ein Live-Gefühl.

Schritt 5 - Das Dashboard öffentlich machen​

Fügen Sie bei selbst gehostetem (Community-)Grafana der grafana.ini hinzu:

[security]
allow_embedding = true

# Nur bei älterem Grafana (9.x / 10.0–10.1); ~10.2+ hat es standardmäßig aktiviert.
[feature_toggles]
publicDashboards = true

Starten Sie Grafana neu und wählen Sie dann auf dem Dashboard Share → Public dashboard → enable und kopieren Sie die öffentliche URL. (In Grafana 11/12 ist dies unter Share → External / Shared dashboard - dieselbe Funktion, umbenannt.)

Schritt 6 - In die Website einbetten​

Fügen Sie die öffentliche URL in ein <iframe> im CMS der Website ein:

<iframe src="https://GRAFANA_HOST/public-dashboards/<token>"
width="100%" height="600" frameborder="0"></iframe>

Sicherheit, Isolation und Grenzen​

  • Exposition: Ein öffentliches Dashboard zeigt allem mit dem Link alles in seinem Bucket - es gibt keine Filterung pro Betrachter. Halten Sie die Daten jedes Kunden in dessen eigenem Bucket, und lassen Sie die Bridge nur die Geräte in der PUBLIC- Zulassungsliste schreiben.
  • Zugangsdaten: Das Basic Credential Set der Bridge ist eine echte Zugangsberechtigung für die IoT-Plattform - schützen Sie die Node-RED-Instanz (hinter einer Firewall halten; sie hat nur ein einfaches Login).
  • Funktionsgrenzen: Öffentliche Dashboards unterstützen keine Template-Variablen, manche Panel-Typen sind nicht verfügbar, und Ergebnisse werden zwischengespeichert - gut für feste „aktuelle Messwerte + jüngster Trend“-Anzeigen, weniger gut für interaktive Exploration.
  • Latenz: „Echtzeit“ wird durch das Aktualisierungsintervall plus diesen Cache bestimmt, nicht durch Sub-Sekunden-Streaming; die InfluxDB-Aufnahme selbst ist schnell.
  • Historie: InfluxDB enthält nur Daten seit dem Start der Bridge. Zum Nachfüllen führen Sie eine einmalige Ladung vom /stats-Endpunkt der IoT-Plattform durch (siehe Zugriff auf die API der IoT-Plattform).