Blog

Verwenden Sie den TIG-Stack, um Ihre IoT-Dashboards für die Heimautomatisierung zu erstellen

Gerard van de Glind

Aktualisiert Oktober 21, 2025
6 Minuten

In meinem letzten Blogpost habe ich gezeigt, wie man Gas- und Strommessungen von einem intelligenten Zähler ablesen kann. Obwohl es eine schöne Leistung ist, diese Messwerte ablesen zu können, besteht der nächste Schritt natürlich darin, etwas Nützliches mit ihnen zu machen. Lassen Sie uns also ein paar schöne Dashboards auf der Grundlage dieser Messwerte erstellen. Insbesondere möchte ich Dashboards haben, die die Gesamtmenge des Strom- und Gasverbrauchs sowie den aktuellen Stromverbrauch anzeigen. Ich habe mich entschieden, den TIG-Stack für diesen Zweck zu verwenden. Der TIG-Stack besteht aus Telegraf, InfluxDB und Grafana. Bevor ich im Detail beschreibe, worum es sich dabei handelt und wie man sie konfiguriert, werde ich zunächst das Influx-Zeilenprotokoll vorstellen.

Protokoll der Zuflussleitung

Telegraf unterstützt mehrere Dateneingabeformate, die Sie hier finden können. Das Influx-Zeilenprotokoll ist eines der unterstützten Formate und ist ein textbasiertes Format zum Schreiben von Punkten in die Datenbank. Jede Zeile im Influx-Zeilenprotokoll steht für einen Datenpunkt in InfluxDB. Und es hat das folgende Format:

messung,tag_set feld_set zeitstempel

Der erste Teil mit der Bezeichnung measurement ist der Name der Messung, in die Sie die Daten schreiben möchten, und ist ein Pflichtfeld. Das tag_set steht für die Tags, die Sie dem Datenpunkt beifügen möchten und ist im Influx Zeilenprotokoll optional. Dann folgen die eigentliche(n) Messung(en) im field_set Teil des Zeilenprotokolls. Und schließlich ein optionaler Zeitstempel. Beachten Sie, dass das Influx-Zeilenprotokoll ein strenges Format hat und Komma und Leerzeichen als Trennzeichen verwendet. Mehr über das Influx-Zeilenprotokoll können Sie hier nachlesen. Dann habe ich dsmr-forwarder so geändert, dass er Messungen im Influx-Zeilenprotokollformat veröffentlicht. In diesem Fall ziehe ich das Influx-Zeilenprotokollformat einem anderen Format vor, da auf diese Weise Gas- und Strommessungen jeweils durch eine einzige Zeile dargestellt werden. So werden Informationen, die zusammengehören, in einem einzigen Datenpunkt gruppiert. Die folgende Methode analysiert das gegebene Telegramm und erzeugt zwei Zeilen im Influx-Zeilenprotokoll, eine für Strom- und eine für Gasmessungen.

Im nächsten Schritt veröffentliche ich diese Zeilen auf MQTT, wobei jede Zeile ein eigenes Thema hat, wie in:

Telegraf

Telegraf ist ein Plugin-gesteuerter Server-Agent zum Sammeln und Berichten von Metriken und verfügt über mehrere standardmäßig verfügbare Integrationen. In diesem Fall verwende ich Telegraf, um meine Smart Meter Messungen von MQTT zu lesen und die Ergebnisse in InfluxDB zu schreiben. Sie können eine Standardkonfiguration von Telegraf mit folgendem Befehl erstellen:

docker run --rm telegraf telegraf Konfiguration  >  telegraf.conf

Als nächstes passe ich die Standardkonfigurationsdatei von Telegraf an, um den Abschnitt MQTT-Eingänge zu aktivieren, indem ich [[inputs .mqtt_consumer]] auskommentiere und die Eigenschaft Server auf meinen MQTT-Broker verweisen lasse. Die Grundkonfiguration für den MQTT-Konsumenteneingang ist unten dargestellt:

# Metriken von MQTT-Topic(s) lesen
[[inputs .mqtt_consumer]]
## Zu verwendende MQTT-Broker-URLs. Das Format sollte scheme://host:port sein, 
## Schema kann tcp, ssl oder ws sein.
server = ["tcp://Ihr-mqtt-broker:1883"]
#
## MQTT QoS, muss 0, 1 oder 2 sein
qos = 0
Verbindungs-Timeout für die erste Verbindung in Sekunden
connection_timeout = "30s"
#
## Zu abonnierende Themen
Themen = [
  "dsmr0/p1/#"
]
data_format = "Zufluss"

Beachten Sie, dass ich Telegraf so konfiguriert habe, dass alle Themen von MQTT, die mit'dsmr0/p1' beginnen, konsumiert werden und dass ich das Datenformat auf'influx' eingestellt habe. Dann passe ich die Telegraf-Konfigurationsdatei an, um den Abschnitt InfluxDB-Ausgaben zu aktivieren, indem ich [[outputs.influxdb]] auskommentiere. Ich setze die Zieldatenbank und die Eigenschaft username auf'telegraf'. Diese müssen wir später in InfluxDB erstellen. Sehen Sie sich die Grundkonfiguration unten an:

# Konfiguration für das Senden von Metriken an InfluxDB
[[outputs.influxdb]]
## Die vollständige HTTP- oder UDP-URL für Ihre InfluxDB-Instanz.
##
## Für einen einzelnen Cluster können mehrere URLs angegeben werden, nur EINE der
## Die Urls werden in jedes Intervall geschrieben.
# urls = ["unix:///var/run/influxdb.sock"]
# urls = ["udp://127.0.0.1:8089"]
urls = ["https://influxdb:8086"]
## Die Zieldatenbank für Metriken; wird bei Bedarf erstellt.
Datenbank = "telegraf"
## Wenn true, werden keine CREATE DATABASE-Abfragen gesendet.  Auf true gesetzt, wenn Sie
## Telegraf mit einem Benutzer ohne Berechtigung zum Erstellen von Datenbanken oder wenn die
## Datenbank existiert bereits.
skip_database_creation = true
## Timeout für HTTP-Nachrichten.
# timeout = "5s"
*# HTTP Basic Auth
benutzername = "telegraf"
passwort = "a-starkes-passwort-hier"

Jetzt ist die Telegraf-Konfiguration vorbereitet, um unsere dsmr MQTT-Themen zu konsumieren und die Messungen in die Datenbank zu schreiben. Bevor wir Telegraf starten, müssen wir zunächst InfluxDB konfigurieren.

InfluxDB

InfluxDB ist eine Open-Source-Zeitreihendatenbank und wurde wie Telegraf von InfluxData entwickelt. Sie ist in der Lage, große Mengen von Zeitstempeldaten zu speichern. Zunächst erstellen wir ein Docker-Netzwerk, so dass Telegraf- und InfluxDB-Container problemlos miteinander kommunizieren können:

docker network create influxdb

Wir können das InfluxDB-Docker-Image mit dem folgenden Befehl ausführen:

docker run -tid -p 8086:8086 -v /home/pi/influxdb:/var/lib/influxdb --net=influxdb --name influxdb influxdb

Der nächste Schritt besteht darin, die Datenbank und den Benutzer für Telegraf zu erstellen. Verbinden wir uns also mit dem InfluxDB-Container, indem wir den folgenden Befehl aufrufen:

docker exec -it ihr-influxdb-container-id bash

Innerhalb des laufenden Containers können Sie laufen:

Zustrom

um die InfluxDB-Konsole zu starten. Lassen Sie uns die Telegraf-Datenbank mit erstellen:

CREATE DATABASE telegraf

Und erstellen Sie einen Datenbankbenutzer mit:

CREATE USER telegraf WITH PASSWORD 'a-strong-password-here'
GRANT ALL ON telegraf TO telegraf

Jetzt haben wir InfluxDB mit einer eigenen Datenbank und einem eigenen Benutzer für Telegraf zum Laufen gebracht. Sobald InfluxDB läuft, können wir Telegraf mit dem folgenden Befehl starten:

docker run -d --net=influxdb --name=telegraf -v /home/pi/telegraf:/etc/telegraf:ro telegraf

Dann können wir die Protokolle von Telegraf überprüfen, um festzustellen, ob es sich erfolgreich mit dem MQTT-Broker verbunden hat:

docker logs -f telegraf

Und überprüfen Sie, ob die Messungen erfolgreich von MQTT gelesen und in InfluxDB eingefügt wurden. Zunächst verbinden wir uns mit dem laufenden InfluxDB-Container und starten erneut die InfluxDB-Konsole. Wenn alles korrekt funktioniert, werden unsere Messungen nun in InfluxDB aufgenommen und wir können dies mit den folgenden Befehlen überprüfen:

USE DATABASE telegraf
MESSUNGEN ANZEIGEN
SELECT * FROM p1_elec LIMIT 5
SELECT * FROM p1_gas LIMIT 5

Beachten Sie, dass p1_elec und p1_gas Teil der aufgeführten Messungen sein sollten.

Grafana

Grafana ist ein Tool zur Datenvisualisierung und -überwachung mit Unterstützung für mehrere Eingabedatenquellen wie Graphite, InfluxDB, Prometheus und Elasticsearch, um nur einige zu nennen. Vor kurzem hat Grafana die Unterstützung für ARM-Architekturen hinzugefügt. Jetzt können Sie also die offiziellen Grafana-Versionen auf Ihrem Raspberry Pi installieren. Sie können Grafana mit den folgenden Befehlen herunterladen und installieren:

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.2.2_armhf.deb
sudo dpkg -i grafana_5.2.2_armhf.deb

Dann navigieren Sie zu grafana-host-ip:3000 und melden sich mit admin/admin an. In Grafana konfigurieren wir eine Datenquelle für InfluxDB unter Verwendung der Telegraf-Datenbank und des bei der InfluxDB-Einrichtung angelegten Benutzers. Dann können wir endlich ein Dashboard erstellen und die gewünschten Diagramme zeichnen. Hier ist die konfigurierte Abfrage für das Diagramm zum aktuellen Stromverbrauch.

Und unten sehen Sie einige Diagramme aus meinem Dashboard. Viel Spaß beim Beobachten ;-)

Verfasst von

Gerard van de Glind

Contact

Let’s discuss how we can support your journey.