Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. [Grafana] Diagramme und Werte per Simple-api Adapter

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Grafana] Diagramme und Werte per Simple-api Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • BananaJoe
      BananaJoe Most Active last edited by BananaJoe

      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 ein 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öst-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 wird nicht mehr supportet, nach einem Update von Grafana war es zwar noch in der Liste der Data sources, die PlugIn-Dateien selbst fehlten aber, die Datenquelle war somit deaktiviert.
      https://github.com/grafana/simple-json-datasource
      bba72122-cab1-474b-80fb-f9cabd43098d-image.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 war alles andere als ein Selbstläufer!
      Damit ich das auch noch mal hinbekomme, gibt es nun dieses Artikel hier.


      Grafana: Datenquelle installieren
      df7f35a8-6717-4064-8f3d-4f3d4441ee0f-image.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
      3a5d6029-6f4d-42c5-ab54-0d2985d0e7d2-image.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 8087ist meine ich der Default Wert:
      f72afd91-6ad1-47b9-9a4a-8dc8cd702e7c-image.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:
      f6440287-d7cd-41d5-90fb-4e573b42fcd4-image.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:
      6a125952-9396-4e57-afc7-d29ac7749ae2-image.png
      Bei der URL (1) fügen wir einfach die Simple-api /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.
      Und wie Ihr sehen könnt habe ich die IP-Adresse durch 127.0.0.1 ersetzt, mein Grafana läuft lokal mit auf dem ioBroker-System.
      Im oberen Bereich mit den JSON können wir nach rechts scrollen, ganz am Ende steht dort der Eintrag val:
      17dfbd7f-03ea-414c-b18c-a6ebac62d172-image.png
      Unten unterhalb von wo wir die URL eingefügt haben, erweitern wir den Bereich Parsing options & Result fields und tragen dort val ein:
      730e4fca-bddc-49ca-bf97-71ccfdc257eb-image.png
      Und schon steht oben nur noch unserer Wert:
      dfc5a5ee-fb73-425b-b3c6-9ea2fb4f3ccd-image.png
      Ich benenne die Query jetzt noch um:
      2ef9a058-6733-497a-bb2d-0fbfa0451870-image.png
      Und wähle noch einen anderen Diagrammtyp, z.B. Stat:
      3c7db191-493e-4310-b3fc-c278e4f5f8b8-image.png
      und schon wird mir das als große Zahl angezeigt:
      c2f9a3f4-68a8-4f98-a44e-393c29929724-image.png
      Wenn ich rechts unter Standard options noch eine Einheit festlege sogar mit W am dahinter:

      Standard options => Unit => Energy => Watt (W)
      

      af31c083-459c-47da-a13f-64eeed5eb41b-image.png

      Weiter geht es in der nächsten Antwort

      BananaJoe 1 Reply Last reply Reply Quote 0
      • BananaJoe
        BananaJoe Most Active @BananaJoe last edited by BananaJoe

        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/                                         Wir wollen die historischen Daten haben
        0_userdata.0.Solaranlage.Total.Energy-Power     für diese Objekt-Id
        /?                                              gefolgt von Parametern
        dateFrom=2024-07-05T12:00:00                    Datum + Uhrzeit ab und
        &dateTo2024-07-05T12:59:59                      Datum + Uhrzeit bis zu welchen Zeitpunkt, hier also 59 Minuten und 59 Sekunden
        

        Die Rückgabe ergibt dann so etwas:
        68d3c642-370f-4d73-a635-55046a586bba-image.png
        Das ist dann immer jeweils der Wert, in der Zeile darunter der UNIXTIME-Stamp in Millisekunden-Format. Also die Millisekunden seit dem 1.1.1970, 00:00:00 Uhr.
        Wenn wir das mal in einen JSON-Pathfinder kopieren:
        https://jsonpathfinder.com/
        Können wir die Struktur analysieren und sehen den Aufbau:
        e0710630-7681-43ae-bd3b-a1452c986b1b-image.png
        Im Abschnitt datapoints[x] gibt es für jeden zurückgegebenen Wert 2 Unterpunkte, [0] mit dem Wert und [1] mit dem Zeitstempel.

        x[0].datapoints[0][0]    = 1. Wert
        x[0].datapoints[0][1]    = Zeitstempel des 1. Wertes
        ...
        ...
        x[0].datapoints[200][0]  = 201. Wert
        x[0].datapoints[200][1]  = Zeitstempel des 201. Wertes
        

        Die Struktur kennen wir nun also, jetzt das ganze noch in Grafana umsetzen.


        Grafana Diagramm mit Werten per Simple-api
        Wir fügen in Grafana im Dashboard wieder eine Visualization hinzu, in der Mitte könnt Ihr auch gleich Switch to table wählen.
        fe87bf9a-b67b-4f32-a7a9-82ab298e4c36-image.png
        Als URL (1) kommt die /query/ URL hinein, ich habe die IP wieder auf 127.0.0.1 geändert.
        Die URL endet auf /?:

        http://127.0.0.1:8087/query/0_userdata.0.Solaranlage.Total.Energy-Power/?
        

        Format (2) ist diesmal Time Series, Parser (3) ist wieder Backend.
        Nun klicken wir noch auf Options (4):
        f047330d-2bf0-45ee-b0ea-ab9fef99dfc1-image.png
        und fügen unten bei Add query param (2) 2 Felder hinzu:

        dateFrom
        dateTo
        

        Als Value können wir die Zeit einsetzen. Das kann ein fester, ein flexibler oder eine Mischung aus beiden sein.
        In Grafana gibt es vordefinierte Variablen:

        https://grafana.com/docs/grafana/latest/dashboards/variables/add-template-variables/#global-variables
        aus denen wir uns das zusammenbauen können.

        Variante 1: den ganzen aktuellen Tag:
        Ich mag 24h Anzeigen, das geht wie folgt:

        dateFrom          ${__from:date:YYYY-MM-DD}T00:00:00
        dateTo            ${__to:date:YYYY-MM-DD}T23:59:59
        

        Wenn Ihr oben einmal in das URL-Feld klickt und dann mit der Tabulatortaste weiterspringt, sollte er die Werte oben aktualisieren:
        984b8c20-db19-4d58-b11a-886f3a6ef02d-image.png
        Geht auch per Refresh-Button (den habe ich erst später entdeckt):
        8b20bf74-8cb2-49b4-a3b4-1f481acd094c-image.png

        Variante 2: den in Grafana eingestellten Zeitraum:

        dateFrom          ${__from:date:iso}
        dateTo            ${__to:date:iso}
        

        wählt den Zeitraum der gerade für das Dashboard eingestellt ist:
        4a78489b-1a42-482e-8e0e-c11e593c1c22-image.png
        Wir erweitern wieder den Abschnitt Parsing options & Result fields und schreiben bei Rows/Root das Wort
        datapoints
        ins das Feld:
        dfd393c1-7d3a-4730-84f0-71870512c419-image.png
        Die Anzeige oben sollte sich ändern:
        a9ef2a11-8eac-4ce8-8886-53ebe1554b97-image.png
        Prima, nur noch [ Werte , Zeitstempel ], die müssen wir nun auch noch trennen:
        845c6e5e-c609-48e4-a008-106e0f98417a-image.png

        1   as     Timestamp          format as      Timestamp ( UNIX ms )
        0   as     Wert               format as      Number
        

        Die beiden mittleren Texte könnte man auch weglassen, die dienen nur der Lesbarkeit.
        Wenn ihr wieder oben rechts auf Refresh drückt, sollte sich die Anzeige oben aktualisieren:
        bb4b66c8-d598-4a74-9508-5fe395a5fed7-image.png
        Super, wir haben die Werte.
        Ändern wir oben rechts den Diagrammtyp auf Time series:
        1145d1a8-d2c7-4b4b-a7a3-4e5a88048439-image.png
        oder als 24h Variante:
        f4dc35b2-fc90-478f-afe3-cc5db7d2ef04-image.png
        Die 24h klappen natürlich nur wenn auch die Dashboard-Ansicht auf 24h steht:
        fe4d37e5-0c5e-4388-a7ce-9ef18317bc60-image.png
        also

        now/1d
        

        in beide Felder eintragen und Apply time range klicken.

        Das war es aber schon!
        Speichern und nach belieben anpassen oder weitere Werte hinzufügen:
        8f77bb46-5f18-4853-af60-d1484dbedbb9-image.png

        1 Reply Last reply Reply Quote 1
        • BananaJoe
          BananaJoe Most Active last edited by BananaJoe

          Nachwort:
          Ja, warum nimmst du nicht die InfluxDB zusammen mit Grafana? Naja, habe ich ausprobiert, hat mir nicht gefallen, alles - im Vergleich zu meiner bisherigen Lösung - sehr umständlich mit der Datenbank.
          MySQL MariaDB ist unter Linux und Windows schnell installiert, mit 3 weiteren Befehlen lege ich die Datenbank an, erstelle den Benutzer und berechtige diesen.
          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. Beispiele wie es nativ mit SQL geht hatte ich hier im Forum aber schon gesehen.

          icebear 1 Reply Last reply Reply Quote 0
          • icebear
            icebear @BananaJoe last edited by

            @bananajoe

            Vielen Dank für diesen ausführlichen Beitrag/Erklärung, das werd ich mal im Auge behalten

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            479
            Online

            31.7k
            Users

            79.7k
            Topics

            1.3m
            Posts

            diagramme grafana history ad influx-adapter simple-api sql adapter
            2
            4
            584
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo