Aktionen

IoBroker Grafana Diagramme und Werte per Simple-api Adapter

Aus znilwiki

Changelog

  • 05.07.2024 erste Version

Vor-Vorwort

Ja, warum nimmst du nicht die InfluxDB zusammen mit Grafana? Naja, habe ich ausprobiert, hat mir nicht gefallen, alles - im Vergleich - sehr umständlich mit der Datenbank. Ich nutze nun schon seit Jahrzehnten MySQl und MariaDB für SQL-Datenbanken, das funktioniert auch in ioBroker ganz wunderbar (und schnell). Im Prinzip könnte man auch direkt die SQL-Datenbank abfragen, da muss man sich das dann aber auch aus 2 Tabellen zusammensuchen. In der einen stehen die Datenpunkte und deren Index, in der anderen dann die Werte. Hatte ich damals auch nicht auf Anhieb hinbekommen, per Simple-api war es einfacher.


Vorwort

Da ich meinen ioBroker nicht direkt über das Internet erreichbar machen will, von Unterwegs aber trotzdem auf meine Solarwerte schauen möchte, setze ich Grafana ein.
Grafana holt sich dabei die Werte vom ioBroker und stellt mir die Werte so und als Diagramme da.
Mein Grafana-Server ist dann über einen Apache-Reverse-Proxy über eine https-Seite, mit Benutzer + Passwort und Geoblocking innerhalb von Deutschland erreichbar.

Ich hatte dazu mal einen Thema im ioBroker-Forum erstellt - und lange Zeit lief das mit einer Nutzung des JSON API für Einzelwerte und des SimpleJSON für Diagramme ganz hervorragend.

https://forum.iobroker.net/topic/62706/gel%C3%B6st-grafana-per-simpleapi-plugin-simplejson-vs-json


Aber seit ein paar Tagen hatte ich keine Diagramme mehr. Grund ist, das das SimpleJSON Plugin seit 6 Jahren nicht mehr gepflegt wird und deshalb vom Grafana-Team entfernt wurde - es nicht nicht mehr supportet, nach einem Update von Grafana war es zwar noch in der Liste der Data sources, die PlugIn-Dateien fehlten aber.

https://github.com/grafana/simple-json-datasource
ClipCapIt-240705-205412.PNG

Tja, so hatte ich nur noch die Werte und keine Diagramme mehr.
Also habe ich es mit dem Infinity data source plugin versucht - und das was alles andere als ein Selbstläufer!
Damit ich das auch noch mal hinbekomme, gibt es nun dieses Artikel hier.


Grafana: Datenquelle installieren

ClipCapIt-240705-205712.PNG

In Grafana fügen wir eine neue Datenquelle hinzu - Infinity Ich habe meine Instanz Infinity-GET genannt.
Und es muss nichts in der Datenquelle konfiguriert werden!
Hinzufügen reicht.


ioBroker Simple-api Adapter installieren

ClipCapIt-240705-210120.PNG

Den Adapter installieren und ggf. eine Instanz hinzufügen (sollte automatisch passieren).
In den Instanzeinstellungen habe ich meine Datenquelle für die historischen Daten ausgewählt, der Port 8087 ist meine ich der Default Wert:

ClipCapIt-240705-210912.PNG

Kleiner Test: Sucht euch einen beliebigen Datenpunkt aus euren Objekten aus, ich nehme mal diesen hier:

0_userdata.0.Solaranlage.Total.Energy-Power

Darin steht der Wert meiner aktuellen Solarproduktion.
Im Webbrowser kann man nun diesen Wert per API-Aufruf abfragen, egal ob der Wert eine Datenaufzeichnung besitzt oder nicht (SQL, InfluxDB oder History aktiviert wurde):

http://192.168.1.8:8087/get/0_userdata.0.Solaranlage.Total.Energy-Power

Also wie folgt:

http://192.168.1.8:8087/get/                   Die IP-Adresse eures ioBroker, Port 8087, gefolgt von einem /get/
0_userdata.0.Solaranlage.Total.Energy-Power    Die Objekt-ID die abgefragt werden soll

Die Rückgabe ist dann ein JSON:

ClipCapIt-240705-211545.PNG

Ganz schön viel Information, eigentlich wollen wir ja nur den Wert aus Zeile 2.
Das ginge auch, dann müssen wir /getPlainValue/ statt /get/ in der URL verwenden:

http://192.168.1.8:8087/getPlainValue/0_userdata.0.Solaranlage.Total.Energy-Power

und schon gibt es nur die 83 zurück.
Mehr Details gibt es unter der Beschreibung des Adapters:

https://github.com/ioBroker/ioBroker.simple-api

Grafana - zum Aufwärmen einen einzelnen Wert abfragen

In meinem Grafana-Dashboard füge ich eine neue Visualization hinzu, als Datenquelle wähle ich Infinity-GET:

ClipCapIt-240705-212424.PNG

Bei der URL (1) fügen wir einfach die /get/ URL für den Wert ein, bei Format (2) nehmen wir Table, als Parser (3) Backend
Oben (4) sollte er uns nun den JSON anzeigen sofern wir die Ansicht auf Table umgestellt haben (schlägt er mittig vor, ansonsten oben rechts)
Ja, wir hätten hier auch auch per URL gleich den nackten Werten holen können, ist aber eine gute Übung für die Diagramme.
Im oberen Bereich mit den JSON können wir nach rechts scrollen, ganz am Ende steht dort der Eintrag val:

ClipCapIt-240705-212901.PNG

Unten unterhalb von wo wir die URL eingefügt haben, erweitern wir den Bereich Parsing options & Result fields und tragen dort val ein:

ClipCapIt-240705-213052.PNG

Und schon steht oben nur noch unserer Wert:

ClipCapIt-240705-213149.PNG

Ich bennen die Query jetzt noch um:

ClipCapIt-240705-213252.PNG
ClipCapIt-240705-213252.PNG

Und wähle noch einen anderen Diagrammtyp, z.B. Stat:

ClipCapIt-240705-213508.PNG

und schon wird mir das als große Zahl angezeigt:

ClipCapIt-240705-213724.PNG

Wenn ich rechts unter Standard options noch eine Einheit festlege sogar mit W am dahinter:

Standard options => Unit => Energy => Watt (W)
ClipCapIt-240705-213917.PNG



Simple-api historische Werte abfragen

Wenn bei einem Objekt in ioBroker die Aufzeichnung aktiviert ist, kann man diese Daten ebenfalls per Simple-api abfragen. Man muss dazu aber eine andere URL benutzen:

http://192.168.1.8:8087/query/0_userdata.0.Solaranlage.Total.Energy-Power/?dateFrom=2024-07-05T12:00:00&dateTo2024-07-05T12:59:59

Erklärung:

http://192.168.1.8:8087                      URL + Port des Simple-api Adapters
/query/
0_userdata.0.Solaranlage.Total.Energy-Power
/?
dateFrom=2024-07-05T12:00:00
&dateTo2024-07-05T12:59:59