OpenHAB Visualisierung mit Grafana

Hier erfahrt Ihr wie Ihr eine OpenHAB Visualisierung mit mit Grafana einrichten könnt.
openHAB bietet mit seinen mit seinen “Charts” eine eigene Visualisierungsmöglichkeit an. Aber Mal ehrlich – schön sieht anders aus. Außerdem fehlen komfortable Vergleichs- und Auswertungsmöglichkeiten. Grafana hat sich in den letzten Jahren als Platzhirsch unter den Opensource Visualisierungstools etabliert und eignet sich ideal als OpenHAB Visualierung. Es bietet die Möglichkeit individuelle Dashboards zu erstellen und verschiedene Werte in Korrelation darzustellen. Grafana bringt out-of-the-box Konnektoren für verschiedene Datenquellen mit(z.B. Mysql, InfluxDB, PostgresSQL, Prometheus, etc.).
Contents
openHAB Persistence
Um überhaupt erstmal Daten aus openHAB zu generieren benötigen wir einen sog. Persistence Storage. Das ist eine Form von Datenspeicher um die in openHAB existierenden Werte in regelmäßigen Zeitabständen zu speichern. Stand heute existieren 7 verschiedene Plugins um Daten zu persistieren. Die openHAB Doku zu Persitence findet Ihr hier.
InfluxDB
Nachdem ich anfänglich ein paar Probleme mit dem MySQL Plugin hatte bin ich nun auf InfluxDB umgestiegen. Das läuft jetzt seit Wochen sehr stabil. InfluxDB ist eine sog. “time-series” Datenbank. Das heißt die Daten werden hier ähnlich wie bei rrd in Zeitserien abgelegt. Solche Speichersystem sind prädestiniert für das Ablegen von Messwerten was im “Internet of Things” immer mehr an Bedeutung gewinnt. Ein weiterer Vorteil ist das Speicherplatzmanagement. Time series Datenbanken speichern die Daten äusserst effizient im Vergleich zu normalen RDBMS Systemen wie MySQL oder Oracle. Ein weiterer interessanter Punkt ist dass InfluxDB direkt via http abgefragt werden kann. Dadurch ergeben sich interessante Möglichkeiten(z.B. Monitoring von Werten etc.).
InfluxDB Installation
Hinweis Die Installation der Datenbank wird in diesem Beispiel auf der Maschine durchgeführt auf der openHAB läuft. Es ist kein Problem InfluxDB woanders zu installieren wenn eine Netzwerkverbindung besteht. Die Parameter müssen dann entsprechend angepasst werden.
Die Installation ist auf der Herstellerseite eigentlich ganz gut beschrieben. Deshalb spare ich mir diese Schritte hier. Was aktuell nicht in der Doku steht ist dass Ihr den Dienst beim Sytemneustart automatisch starten solltet:
1 |
sudo systemctl enable influxdb |
InfluxDB Konfiguration
Das Anlegen von Benutzern und Rechten findet Ihr unter dem Punkt “Authentication and authorization in InfluxDB”. Ihr solltet Euch neben dem “admin” einen separaten Benutzer für grafana und openHAB einrichten. Hier sind die einzelnen Schritte beschrieben die für den Zugriff von openHAB nötig sind:
1 2 3 4 5 6 7 8 9 10 |
$ influx Connected to http://localhost:8086 version 0.10.0 InfluxDB shell version: 0.10.0 CREATE DATABASE openhab_db CREATE USER admin WITH PASSWORD 'mein_geheimes_admin_password' WITH ALL PRIVILEGES CREATE USER openhab WITH PASSWORD 'mein_geheimes_openHAB_password' CREATE USER grafana WITH PASSWORD 'mein_geheimes_grafana_password' GRANT ALL ON openhab_db TO openhab GRANT READ ON openhab_db TO grafana exit |
Danach muss noch die Konfiguration in der Datei /etc/influxdb/influxdb.conf angepasst werden. Im Wesentlichen sollte man dort folgende Einstellungen setzen:
1 2 3 4 5 |
[http] auth-enabled = true log-enabled = false [data] query-log-enabled = false |
Das stellt sicher dass der http-Listener nur mit gültigem User und Password abgefragt werden kann. Zusätzlich habe ich das Logging abgestellt da es mich ehrlich gesagt nicht interessiert und ich nicht unnötig Speicherplatz verschwenden will. Das ist nicht zwingend nötig. Am Ende startet Ihr den InfluxDB Service einmal durch damit die Änderungen wirksam werden:
1 |
sudo systemctl restart influxdb |
Von jetzt an ist damit sichergestellt dass sowohl der Commandline Client “influx” als auch der Zugriff über http nur über einen berechtigten User inkl. Passwort erfolgen kann.
Persistence Plugin Konfiguration
Nun müssen wir openHAB dazu bringen unsere Werte in die Datenbank zu schreiben. Dazu müssen wir das Persistence Binding zunächst Mal installieren. Ich habe das über die openHAB Paper UI erledigt. Diese erreicht Ihr über die URL /paperui/index.html. Dort findet Ihr unter dem Menüpunkt “Add-ons” alle verfügbaren “Persistence” Plugins. Hier sollte das Plugin “InfluxDB Persistence” aufgeführt sein und sich über einen Klick auf “INSTALL” einfach installieren lassen. Es gibt wohl noch andere Installationmöglichkeiten (addons.cfg). Wenn das passiert ist muss openHAB mitgeteilt werden wie es die InfluxDB erreichen kann. Das passiert in der Datei influxdb.cfg:
1 |
sudo vim /etc/openhab2/services/influxdb.cfg |
Hier werden nun die Werte analog zu Benutzer und Datenbank(siehe oben) gesetzt:
1 2 3 4 5 |
url=http://127.0.0.1:8086 user=openhab password=mein_geheimes_openhab_password db=openhab_db retentionPolicy=default |
Persistent Items
Nun müssen wir noch festlegen welche Items wie häufig persistiert werden sollen. Dabei sollte man sich vorher überlegen was sinnvoll ist. Es macht sicher keinen Sinn einfach alles zu persistieren, sondern nur die Werte die man wirklich auswerten möchte. Dann muss man sich noch überlegen wie oft der Wert eines bestimmten Items geschrieben werden soll. Misst man beispielsweise die Außentemperatur macht es vermutlich keinen Sinn diesen Wert jede Minute zu schreiben. Neben festen Zeitintervallen gibt es auch noch die Möglichkeit immer dann zu persistieren wenn sich ein Wert ändert. Möchte man z.B. Präsenzen in Räumen visualisieren wäre das eine sinnvolle Einstellung. Das Mapping der Items wird in folgender Datei konfiguriert:
1 |
vim /etc/openhab2/persistence/influxdb.persist |
Hier ist eine Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Strategies { everyMinute : "0 * * * * ?" every5Minutes : "0 */5 * * * ?" everyHour : "0 0 * * * ?" everyDay : "0 0 0 * * ?" default= everyChange } Items { Gas_Zaehlerstand : strategy = everyDay Gas_Zaehlerstand_gestern : strategy = everyChange, restoreOnStartup Gas_Verbrauch_gestern : strategy = everyChange, restoreOnStartup Gas_Verbrauch_gestern_kwh : strategy = everyChange, restoreOnStartup Pufferspeicher_ganz_oben : strategy = every5Minutes, restoreOnStartup Pufferspeicher_oben : strategy = every5Minutes, restoreOnStartup Wetterstation_Licht_Ost : strategy = every5Minutes Wetterstation_Licht_Sued : strategy = every5Minutes Wetterstation_Licht_West : strategy = every5Minutes Carport_Temperatur : strategy = every5Minutesfür } |
Im “Strategies” Bereich werden Speicherstrategien definiert. D.h. es werden symbolische Namen erstellt die über einen Cron-Ausdruck die Häufigkeit festlegen. Eine Default-Strategie die bereits vorhanden ist, ist “everyChange”. Wie der Name vermuten lässt werden hier die Werte immer dann geschrieben wenn sich ein Wert ändert(zeitunabhängig). Im Bereich “Items” weiter unten legt Ihr nun fest welche Items mit welcher Strategie persistiert werden sollen. Der zusätzliche Parameter “restoreOnStartup” bedeutet dass der Wert dieses Items nach einem Neustart von openHAB automatisch wiederhergestellt werden soll. Damit vermeidet man z.B. dass Items einen undefinierten Zustand erhalten.
Grafana Installation
Ist hier gut beschrieben.
Zur Konfiguration findet Ihr hier alles Nötige.
Die zentrale Konfigurationsdatei befindet sich hier:
1 |
vim /etc/grafana/grafana.ini |
Standardmässig läuft Grafana auf Port 3000.
Grafana Datasource einrichten
Wenn Grafana installiert ist und läuft müssen wir uns eine InfluxDb Datasource einrichten um Zugriff auf auf unsere openHAB Daten zu erhalten. Dazu müssen wir eine neue Datasource für InfluxDB anlegen. Dazu klicken wir auf das Grafana Logo und dann auf “Datasources”.
Nun müssen wir die Verbindungsparameter eingeben. Der Name ist frei wählbar. Sinnvoll ist z.B. “openHAB”. Type ist logischerweise “InfluxDB”. Unter “URL” muss die Verbindung zum http-Connector der InfluxDB angegeben werden(also z.B. http://openhab.domain.foo:8086). Unter “Access” hat man die Auswahl zwischen “Proxy” und “Direct”. Proxy bedeutet dass der Grafana SERVER sich zu Eurer InfluxDB verbindet und Daten abholt. Direct hingegen bedeutet dass sich Eurer Browser – also der Client – sich zur Datenbank verbindet. Wenn der Grafana Server sich Richtung InfluxDB verbinden kann sollte man dort Proxy wählen. Unter “HTTP Auth” müsst Ihr einen Haken bei “Basic Auth” setzen da wir uns am InfluxDB Listener authentifizieren müssen. Unter “Basic Auth Details” gebt Ihr nun den User an den Ihr oben eingerichtet habt. Um bei diesem Beispiel zu bleiben wäre das “grafana” und als Passwort “mein_geheimes_grafana_password”. Unter “InfluxDB Details” tragt Ihr nun den Namen der Datenbank ein (z.B. “openhab_db”). User ist im Beispiel wieder “grafana” mit entsprechendem Passwort. Nun könnt Ihr die Datasource speichern indem Ihr auf “Save & Test” klickt.
Ihr müsstet jetzt folgende Fehlermeldung sehen:
Dieser Fehler besagt dass wir mit dem User “grafana” keine Rechte haben uns alle existierenden Datenbanken anzeigen zu lassen. Dies ist o.k. und kann ignoriert werden, da wir den Namen unser Datenbank kennen und dem User grafana nicht unbedingt Schreibrechte auf die Datenbank geben möchten.
Grafana Dashboard einrichten
Als nächstes richten wir uns ein neues Dashboard für unsere Graphen ein. Ein Dashboard ist eine Übersicht in der verschiedene Graphen zusammengefasst werden. Dazu klicken wir wieder auf das Grafana-Logo und dann Dashboard -> New. Jetzt solltet ihr ein leeres Dashboard sehen in das wir neue Komponenten einfügen können.
Grafana Graphen einrichten
Zu guter Letzt fügen wir nun ein Darstellungselement zu unserem Dashboard hinzu. Hier gibt es sehr unterschiedliche Varianten. Um z.B. einen Temperaturverlauf darzustellen fügen wir das Element “Graph” ein und klicken dazu auf gleichnamiges Icon. Um den aktuell leeren Graph mit Leben zu füllen klickt Ihr einmal in der Mitte auf den Titel bzw. “Panel Title”.
Dadurch öffnet sich ein Menü. Hier klickt Ihr nun auf “Edit”. Im Tab “Metrics” solltet Ihr nun in der Lage sein Eure Items auszuwählen die Ihr in der openHAB Konfiguration hinterlegt habt.
Die Abfrage- und Aggregierungsmethoden in InfluxDB sind sehr komplex. Deshalb möchte ich diese an dieser STelle auch nicht ausführlich behandeln. In unseren Fall belassen wir alle voreingestellten Parameter wie sie sind und wählen lediglich die Metrik/Item die wir im Graph sehen möchten aus. Im Beispiel Bild ist das die “Carport Temperatur”. Danach speichert Ihr das Dashboard durch einen Click auf die kleine Diskette ganz oben(“save Dashboard”) und gebt Eurem Dashboard einen Namen (z.B. Temperaturen). In dieses Dashboard kann man dann später auch noch weitere Elemente hinzufügen. Nachdem Ihr das Dashboard gespeichert habt seht Ihr Euren Grafen. Für den Fall dass Ihr allerdings keine Werte/Linien seht probiert bitte folgendes aus: Editiert Euren Graphen durch einen Klick auf den Titel und dann “Edit”. Wählt das Tab “Display” aus, setzt für die Einstellung “Null value” den Wert “connected” und speichert das Ganze. Jetzt solltet Ihr Eure Wert sehen.
Auswertungszeiträume
In der Dashboard Ansicht seht Ihr ganz oben rechts den aktuellen Auswertungszeitraum(z.B. “last 3 hours”). Durch einen Click darauf öffnet sich ein Auswahlmenü. Hier könnt Ihr z.B. direkt die letzten 30 Tage als Zeitraum wählen. Hier werdet Ihr vermutlich noch nicht so viel sehen, da Ihr noch nicht ausreichend Werte gesammelt habt.
Fragen/Kritik
Ich hoffe Euch hat dieses Tutorial weitergeholfen. Bei Fragen oder Verbesserungsvorschlägen hinterlasst mir sehr gerne einen Kommentar.
Hallo,
besteht die Möglich mit Grafana beispielsweise Vorhersagen für die Temperatur als Diagramm darzustellen?
Vielen Dank.
Hallo Eric,
sorry für die späte Antwort.
Ja das geht selbstverständlich.
Dazu existiert zum Beispiel das Wunderground Plugin für openHAB2.
Das müsstest Du zunächst einrichten und konfigurieren.
Ein Item würde dann z.B. so aussehen:
Kleine Korrektur, da es eine Änderung bei der InfluxDB gab:
Die influxdb.cfg muss korrekt so aussehen:
url=http://127.0.0.1:8086
user=openhab
password=mein_geheimes_openhab_password
db=openhab_db
retentionPolicy=autogen
Danke Markus.
Hallo Markus!
Ich habe eine Frage an dich und zwar wie kann ich meine datenbank sql server auf grafana visualisieren?
Danke!
Hallo bah,
ich glaube die Frage ist etwas zu allgemein formuliert und passt auch nicht so ganz zum Topic.
Wenn es darum geht Daten eines Microsoft SQL Servers zu visualisieren hilft Dir evtl. dieser Artikel weiter:
http://docs.grafana.org/features/datasources/mssql/