In ioBroker Grafana richtig nutzen
Jeden Tag fallen im Smart Home Unmengen an Daten an, die nur auf ihre Nutzung warten. Dabei stellt sich schnell die Frage, wie man überhaupt richtig auf die Daten zugreift und sie vor allem sinnvoll verarbeitet. Wer sich bereits erste Gedanken gemacht hat, wie er in ioBroker Grafana nutzen kann, ist dabei schon auf einem guten Weg. Doch nicht jede Speicherung ergibt zwangsläufig Sinn.
Im Grunde musst du bei allen Geräten eine sinnvolle Abwägung treffen. Denn jeder Datensatz, den du in einer Datenbank ablegst, benötigt Speicher. Zwar ist Speicher in unserer heutigen Zeit nicht mehr das große Problem, doch das bedeutet nicht, dass wir verschwenderisch damit umgehen sollten. Jedes Bit und jeder String sollten daher zu Beginn hinterfragt werden.
Ich habe mich in meinem Smart Home zum Beispiel darauf fixiert, Wetterdaten zu speichern und über Grafana auszuwerten. Damit fällt es mir leichter den richtigen Zeitpunkt abzupassen, zu dem man sich mal um die Heizung kümmern sollte. Denn wir wollen ja schließlich alle nicht frieren wenn der Winter vor der Tür steht.
Genauso kann es unter Umständen Sinn ergeben, den eigenen Stromverbrauch zu visualisieren. Damit können wir Schwankungen und Veränderungen sehr schnell erkennen und entsprechend gegensteuern. Wer darüber hinaus noch auf eine eigene Photovoltaik-Anlage setzt hat so die Möglichkeit, seine eigene Erzeugung automatisch auswerten zu lassen. Dadurch bekommt man ein besseres Gefühl für die Stromproduktion und weiß, wann stromhungrige Geräte an die Arbeit gehen können und wann sie lieber ausgeschaltet bleiben sollten.
Blicken wir daher in diesem Artikel genauer darauf, wie wir mit ioBroker Grafana sinnvoll nutzen und konfigurieren können.
- Brandes, Udo(Autor)
Zuletzt aktualisiert 2024-12-21 / (*) Affiliate Links / (**) Affiliate Links, Preis kann abweichen (andere Plattform) / Bilder von der Amazon Product Advertising API / Der angegebene Preis kann seit der letzten Aktualisierung gestiegen sein.
Die Voraussetzungen fürs Smart Home
Damit wir in ioBroker Grafana nutzen können, gibt es ein paar Voraussetzungen zu beachten. In diesem Artikel greifen wir auf eine fertig installierte ioBroker-Instanz sowie eine bereits installierte Grafana-Instanz zurück. Solltest du eines der beiden Tools noch nicht bei dir installiert haben, schau dir zuerst ein Tutorial für das jeweilige System an.
Außerdem brauchst du einen Ort, an dem du die Daten sichern kannst. Das kann zum Beispiel eine MySQL-Datenbank oder eine andere Datenbank sein. Ich habe in meinem Smart Home eine MariaDB im Einsatz, da ich diese leicht über das NAS an den Start bringen konnte, was mir wiederum sehr viel Arbeit erspart hat. Ob eine InfluxDB nicht sinnvoller wäre, weiß ich ehrlich gesagt nicht so ganz. Aber ich vermute schon, denn diese ist explizit für die Speicherung von solchen Daten gedacht. Eventuell muss ich mir selbst dieses Thema auch nochmal genauer ansehen.
Wer ioBroker im Einsatz hat weiß außerdem, dass hierfür ein Server notwendig ist. Dieser Server kann zum Beispiel ein Raspberry Pi sein oder auch ein NAS. Bei mir im Smart Home arbeitet hierfür ein Rackserver 24 Stunden am Tag, der mir sämtliche Dienste bereitstellt. Mit Ausnahme von der Datenbank, denn diese läuft direkt auf dem NAS.
Der Hintergrund dazu ist, dass ich meine Daten generell alle auf dem NAS ablege. Der Server selbst dient dabei nur der Bereitstellung von Diensten und soll selbst keine Daten speichern. Im Zweifel muss ich so nur ein Backup des NAS machen und habe sofort alle Daten griffbereit, wenn es mal zu einem Ausfall kommen sollte.
Wie du deine eigene Infrastruktur aufbaust, musst du an dieser Stelle natürlich selbst entscheiden. Ich empfehle dir aber, dass du dir ausführlich Gedanken dazu machst, um nicht später in irgendwelche Probleme zu laufen. Denn wer bereits vorsorgt, ist für später besser gerüstet.
Die Verbindung von ioBroker zur Datenbank
Nachdem wir nun die Voraussetzungen geklärt haben, geht es auch schon an die Einrichtung. Hierzu ist es notwendig, dass wir ioBroker beibringen, die Daten in eine Datenbank zu schreiben. In meinem Fall liegt die Datenbank auf einem NAS und ist per Benutzername und Passwort geschützt. Ich brauche nun also zur Einrichtung sowohl die IP-Adresse des Datenbankservers, den zugehörigen Port sowie Benutzername und Passwort. Im Idealfall legst du dir auf deiner Datenbank einen eigenen Zugang nur für dein Smart Home an. Den Root-/Admin-Zugang zu verwenden empfehle ich grundsätzlich aus Sicherheitsgründen nicht!
Ich installiere mir nun den SQL-Adapter für ioBroker. Er stellt die Verbindung zu meiner MariaDB her, welche auf Basis von MySQL arbeitet. Nach der Installation muss ich die entsprechenden Informationen hinterlegen, so dass eine Verbindung hergestellt werden kann.
Auf dem nachfolgenden Screenshot siehst du exemplarisch meine Einstellungen. Du musst natürlich die Zugangsdaten entsprechend deiner Konfiguration anpassen, da sonst keine Verbindung hergestellt werden kann. Mein Benutzerkonto wird mit großer Sicherheit nicht zu deiner Datenbank passen. 😉
Bei der grundlegenden Einrichtung wird ioBroker dir außerdem die richtigen Tabellen anlegen. Das musst du nicht in Handarbeit tun. Was du jedoch tun musst ist, auf deinem Datenbankserver bereits eine leere Datenbank anlegen. Außerdem solltest du dem Benutzer die entsprechenden Rechte geben, so dass er auf die Datenbank zugreifen darf. Beachte dabei bitte, dass der Benutzer sowohl Tabellen anlegen, ändern, löschen und Daten verwalten darf. Sofern die Datenbank nicht auf dem gleichen Server läuft wie dein ioBroker, musst du außerdem den Remotezugang gewähren. Auf einem NAS lassen sich diese Einstellungen meist sehr leicht setzen, da hierfür eine grafische Oberfläche zum Einsatz kommt.
Die Einstellungen im Detail
Wie du schon auf meinem Screenshot sehen konntest, gibt es verschiedene Einstellungen, die du treffen musst. Blicken wir nun also auf die einzelnen Eingaben und versuchen zu verstehen, was sich dahinter verbirgt.
Zuerst setzt du den Typ der Datenbank. Hier stehen unter anderem MySQL und MS-SQL zur Auswahl. In den meisten Fällen wirst du hier MySQL auswählen. Solltest du jedoch einen anderen Datenbankserver nutzen (z. B. Microsoft SQL), dann wählst du hier den entsprechenden Typ aus. ioBroker weiß so, wie es mit der Datenbank kommunizieren muss.
Im Feld Server trägst du die IP-Adresse deines Servers ein. Läuft dein Datenbankserver auf dem gleichen Rechner wie ioBroker, kannst du hier die IP 127.0.0.1 eingeben. Sie steht für Localhost und weist ioBroker an, sich auf dem gleichen Rechner mit der Datenbank zu verbinden. Den entsprechenden Port findest du in deiner Konfiguration. Mit MySQL ist er standardmäßig auf 3306 gesetzt.
Nun gibst du den Namen deiner erstellten und leeren Datenbank ein. In meinem Fall habe ich sie iobroker genannt, da ich mehrere Datenbanken betreibe und so im Nachgang noch zuordnen kann, welche Datenbank zu welchem System gehört. Die Zugangsdaten deines erstellten Benutzers gibst du in die Felder Benutzer und Passwort ein. Diese sind selbsterklärend. Wiederhole zum Schluss in dieser Zeile nochmal dein Passwort.
Für den Hausgebrauch ist eine Verschlüsselung oft nicht eingerichtet und in manchen Fällen vielleicht auch gar nicht notwendig. Den Haken kannst du daher an dieser Stelle rauslassen. Parallel Requests habe ich in meinem Fall erlaubt, da so mehrere Operationen gleichzeitig auf der Datenbank durchgeführt werden können. Das beschleunigt die Verarbeitung. Write NULL values ist eine Einstellung, die standardmäßig gesetzt wird, hier habe ich nichts verändert.
Nachdem du nun alle Einstellungen gesetzt hast, klickst du auf Test Connection. Sollte es zu keinem Fehler kommen, speicherst du die Eingaben und die Verbindung zur Datenbank ist eingerichtet. Erscheint jedoch ein Fehler, prüfe bitte deine Angaben und ändere sie ab, so dass sie korrekt gesetzt sind.
Speicherung von Werten einrichten
Da nun die Einrichtung gewissermaßen nur die halbe Miete war, müssen wir uns nun um die Speicherung kümmern. Sie ist in meinen Augen sehr elegant gelöst, da man hier detailliert bestimmen kann, welche Zustände gespeichert werden sollen.
Um einen Zustand bei Veränderung zu speichern, wechselst du in die Ansicht Objekte. Hier findest du all deine Datenpunkte, die im System zu finden sind und kannst sie verwalten. Wenn du nun deinen Datenpunkt herausgesucht hast, den du gerne speichern willst, klickst du in der Zeile ganz rechts auf das Zahnrädchen.
Nun gelangst du zur Ansicht Konfiguration bearbeiten. Je nach installierten Adaptern stehen dir hier unterschiedliche Einstellungen zur Verfügung. Wir interessieren uns für den Punkt Einstellungen sql.0. Setze hier das Häkchen und klicke auf Speichern, so dass deine Daten in die Datenbank geschrieben werden. Ich empfehle dir außerdem, dass du nur Änderungen aufzeichnest, so dass der Datenverbrauch schon von Beginn an etwas beschränkt wird. Andere Einstellungen treffe ich an dieser Stelle nicht.
Damit die ersten Daten in der Datenbank auftauchen, muss sich der Wert ändern. Das erreichst du bei Steckdosen zum Beispiel, indem du deinen Verbraucher einschaltest. Bei anderen Geräten funktioniert das unter Umständen anders.
Sobald sich der Wert verändert hat, können wir mit dem nächsten Step weitermachen.
Wichtige Info zur Speicherung
Wie in der Datenbankwelt üblich, arbeitet auch ioBroker mit sogenannten Fremdschlüsseln. Das bedeutet, dass du in einer Tabelle nicht den Klarnamen des Items findest, sondern dessen Schlüssel aus einer anderen Tabelle. ioBroker legt hierzu mehrere Tabellen an, unter anderem eine die datapoints heißt.
In der Tabelle datapoints stehen die Namen der Items bzw. Datenpunkte. Hier findest du eine zugehörige ID, die am Anfang des Datensatzes steht. Diese ID musst du dir merken, um später die richtigen Werte aus der anderen Tabelle abfragen zu können. Schreibe sie dir am besten kurz auf, wenn du sie dir nicht merken kannst. Du kannst auch einen Screenshot der Tabelle machen, um die Informationen später griffbereit zu haben.
Die Tabelle ts_number enthält nun alle aufgezeichneten Werte von Datenpunkten, die mit Zahlen arbeiten. Hier werden wir wohl die meisten Datenpunkte wiederfinden. Wie du sehen kannst, gibt es hier auch mehrere Spalten. Lass sie uns kurz im Schnelldurchlauf ansehen.
ID: Die Spalte ID enthält die ID des Datenpunkts, die du in der anderen Tabelle ausfindig gemacht hast. Diese benutzen wir später, um die Daten entsprechend abzufragen.
ts: Diese Spalte speichert einen sogenannten Timestamp. Er zählt die Sekunden seit Beginn der Zeitzählung unter Linux. Die Zahl wird später durch Grafana entsprechend ausgewertet, um deine Daten in die richtige Reihenfolge zu bringen.
ack: Gibt an, ob der Wert deines Datenpunkts bestätigt ist.
Die Einrichtung in Grafana
Wir wissen nun Bescheid darüber, dass bereits die ersten Werte in der Datenbank liegen sollten. Nun können wir damit beginnen, diese in Grafana auszulesen und in einem entsprechenden Diagramm darzustellen. Hierzu müssen wir nun allerdings noch einrichten, dass Grafana auf dieselbe Datenbank zugreift, in der auch ioBroker die Daten ablegt. Hierfür kannst du entweder einen neuen Benutzer anlegen oder den bereits vorhandenen für das ioBroker-System nutzen. Ich habe auf letztere Methode zurückgegriffen, auch wenn sie nicht besonders elegant ist. Es ist immer besser, getrennte Benutzer für verschiedene Systeme anzulegen.
Wechsle in Grafana auf den Bereich Data Sources. Hier können wir eine Datenquelle durch Klick auf den entsprechenden Button hinzufügen. Dazu wählst du auch hier aus, um welche Art von Datenbank es sich handelt. Die Einstellung deckt sich mit der aus ioBroker.
Nun wirst du dazu aufgefordert, einen Namen für die Verbindung zu vergeben und die Informationen zu hinterlegen, damit der Zugriff reibungslos funktioniert. Im Grunde musst du hier die gleichen Einstellungen treffen, wie bereits in ioBroker. Um dir das Ganze etwas leichter zu machen, habe ich dir meine Einstellungen auf dem nachfolgenden Screenshot zusammengefasst.
Das erste Diagramm erstellen
Kommen wir nun zur Einrichtung unseres ersten Diagramms. Diese sind in Dashboards organisiert, so dass du unter Umständen zuerst ein Dashboard anlegen musst. Wie das funktioniert, entnimmst du bitte der offiziellen Dokumentation von Grafana. Mitunter kann es hier bei verschiedenen Versionen zu unterschieden kommen, weshalb ein einheitliches Vorgehen nicht in jedem Fall funktioniert.
Klicke in deinem Dashboard oben rechts auf den Button Add panel. Im Bereich Query musst du nun die Datenbankabfrage erstellen. Dazu musst du die richtige Datenquelle auswählen (du hast sie eben erstellt und benannt), um dann das entsprechende Item aus der Tabelle ts_number zu wählen. Ich zeige dir hier exemplarisch meine Abfrage, die dir das grundsätzliche Muster vorgibt.
Wichtig ist, dass du die Funktion Aggregate verwendest und auch die Group By Funktion beachtest. Nur so kann Grafana dir aus den gefundenen Daten ein Diagramm zusammenstellen. Die Bedingung (where) ist ebenso wichtig, denn hier gibst du die ID des Datenpunkts an, den du gerne in diesem Diagramm auslesen möchtest. Wie bereits erwähnt, findest du die ID in der Tabelle datapoints. Hier musst du möglicherweise kurz suchen, um den richtigen Datenpunkt ausfindig zu machen.
Klicke zum Schluss bitte oben rechts auf Apply und speichere so die Änderungen. Auch das Dashboard musst du nochmal speichern. Den Button findest du oben rechts.
Dein Ergebnis sollte in etwa so aussehen:
Mit ioBroker Grafana nutzen – so einfach!
Wie du in diesem Artikel sehen konntest, ist die Einrichtung zwischen ioBroker und Grafana nicht schwer. Du kannst in ioBroker Grafana nutzen, indem du eine gemeinsame Datenbank für Werte anlegst und die beiden Systeme mit dieser Datenbank arbeiten lässt. Dabei sind beide sogar unabhängig zueinander, denn die einzige Verbindung sind die gemeinsamen Tabellen.
Sollte dir ioBroker eines Tages ausfallen, hat das keine Auswirkung auf Grafana. Lediglich die neuen Werte werden fehlen.
Durch die Komfortfunktionen, die dir ioBroker bereitstellt, wird dir auch der Speicher nicht vollständig geraubt. Denn zum einen verbraucht eine Datenbank nicht ganz so viel Speicher, zum anderen bereinigt ioBroker automatisch die Daten, die älter als zwei Jahre sind (konfigurierbar).
In meinem eigenen Smart Home habe ich jedenfalls den Komfort der Visualisierung sehr zu schätzen gelernt. Denn so habe ich auch über Monate hinweg noch die gemessenen Werte im Blick und kann Trends ablesen. Ebenso lassen sich Vergleichsdaten aus dem vergangenen Jahr heranziehen, sofern die Speicherung schon so lange aktiv ist. Insgesamt mach das die Kombination sehr attraktiv und auch nützlich. Denn endlich können die anfallenden Daten im Smart Home sinnvoll ausgewertet und genutzt werden.
Wenn du mehr zu Grafana wissen möchtest, dann schau gerne in der offiziellen Dokumentation vorbei. Dort findest du auch Informationen darüber, wie du andere Diagramme einbinden und diese nach deinen Vorstellungen anpassen kannst. In der Dokumentation von ioBroker kannst du mehr zum Thema Adapter, Speicherung und Aufbau des Systems erfahren.
8 Kommentare
Sven · 30. Oktober 2022 um 17:51
Leider sieht bei mir das query-Feld in Grafana völlig anders aus.
Es gelingt mir absolut nicht deine Abfrage nachzubauen, da einfach die Auswahlmöglichkeiten nicht bestehen.
Bei mir steht da „Dataset“, wo ich meine Quelle „iobroker“ auswählen kann
Daneben kann ich die Tabelle „ts-counter“ auswählen.
Darunter dann immer eine „column“ , wo ich die „id“ , „ts“ und „val“ auswählen kann.
Eine Möglichkeit dann „time column“ und „metric column“ anzugeben, sehe ich dann nicht.
Ich verstehe, was du haben möchtest, aber ich kann es nicht auswählen.
leider ist an der Stelle deine Anleitung anders als meine Wirklichkeit.
Lukas · 30. Oktober 2022 um 20:20
Hallo Sven,
du musst mal checken, wie die Daten in deiner Datenbank aussehen. Möglicherweise wird da etwas nicht korrekt gespeichert.
Es kann natürlich auch sein, dass es inzwischen durch Updates etc. etwas anders strukturiert ist.
Das mit den Columns an sich sieht zumindest schon mal ganz gut aus.
Smarte Grüße
Sven · 31. Oktober 2022 um 11:07
Meine Lösung:
Ich habe das SQL-Statement von Hand gebaut.
SELECT
ts_number.ts AS „time“,
‚ts_number.val‘ AS metric,
CAST(ts_number.val AS decimal(12,1)) AS „Temperatur“
FROM ts_number
INNER JOIN datapoints
ON ts_number.id = datapoints.id
AND datapoints.name = ‚aT_Aussen‘
AND ts_number.ts >= $__unixEpochFrom() * 1000
AND ts_number.ts <= $__unixEpochTo() * 1000
ORDER BY ts_number.ts;
Wobei "aT_Aussen" der Alias ist, unter dem in iobroker der Wert für die Außentemperatur geschrieben wird.
Bei mir sieht in Grafana der "einfache" Dialog schlicht ganz anders aus. Schreibe mir gerne eine Mail und ich sende dir einen Screenshoot von der Seite. Es passt einfach nicht zu deinem Screenshoot.
Lukas · 31. Oktober 2022 um 11:39
Hallo Sven,
wenn die händische Lösung so bei dir funktioniert, ist das ja schon mal ein guter Schritt in die richtige Richtung.
Möglicherweise sieht Grafana inzwischen auch schon etwas anders aus aufgrund von Updates und Co.? Schließlich ist der Artikel auch schon ein paar Tage älter, da kann das natürlich vorkommen.
Sofern du mir einen Screenshot senden möchtest, kannst du das natürlich gerne tun. Ich wüsste jetzt ehrlich gesagt nicht, was ich dir schicken soll, damit du mir den Screenshots sendest. 😉
Smarte Grüße
Sven · 31. Oktober 2022 um 13:19
Ich habe Dir eine Mail an support geschickt…
Lukas · 31. Oktober 2022 um 14:13
Hallo Sven,
vielen Dank dafür. Deine Mail ist angekommen.
Ich denke, dass ich es zeitlich heute nicht mehr schaffe, mir das anzusehen.
Aber morgen werde ich das direkt mal abchecken und mit meinem Grafana vergleichen.
Smarte Grüße
Tom · 25. April 2022 um 09:19
Hi Lukas,
erst mal vielen Dank für den tollen Artikel. Ich habe das alles soweit bei mir auch „zusammengebaut“.
Es gibt so einige Sensoren und Aktoren von Shelly, Homematic und Zigbee Zeugs.
Der IOBroker läuft zusammen mit einem piVCCU auf einem Raspi4 mit SSD. Verschiedene Datenpunkte werden vom IOBroker in die MySQL DB auf der Synology geschrieben. Grafana läuft als Docker auch auf der Synology.
Das Problem, welches sich jetzt ergibt ist, dass ich es jetzt nicht hinbekomme, mir die Verbrauchswerte des Kühlschranke von gestern anzeigen zu lassen. Der Shelly Plug schreibt immer schön artig den letzten Gesamtwert in die DB. Aber wie lasse ich mir jetzt nur den Verbrauchswert von gestern anzeigen? Da müßte er ja den Wert von gestern 0 Uhr vom Wert von gestern 23:59 Uhr abziehen, richtig?
Vielen Dank für einen Hinweis und Grüße,
Tom
Lukas · 25. April 2022 um 09:31
Hallo Tom,
danke für dein Feedback.
Wenn du dir in Grafana die unterschiedlichen Diagramme zusammenbaust, kannst du dir darin auch vergangene Wert ansehen.
Dazu gibt es in deinem Dashboard oben rechts eine Schaltfläche, über die das möglich ist. Dort steht soweit ich weiß standardmäßig „Last 7 days“.
Dort kann man dann den Zeitraum wählen, für den man die Werte einsehen möchte.
Smarte Grüße