Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Grafana
    5. JSON in Grafana einbinden

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    JSON in Grafana einbinden

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stefu87_CH last edited by

      @codierknecht Vielen Dank schon mal für die Hilfe.

      Und wie komme ich dann nachher an die richtige Adresse für die URL?

      Codierknecht 1 Reply Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @stefu87_CH last edited by

        @stefu87_ch sagte in JSON in Grafana einbinden:

        Und wie komme ich dann nachher an die richtige Adresse für die URL?

        Das kommt u.a. darauf an, ob Du über das "eingebaute" Simple-API oder über den REST-Adapter da rangehst.
        Den Port für den URL bestimmt der verwendete Adapter.
        IP ist logischerweise die Deines ioBroker-Servers.
        Und die ID des Datenpunktes kann man ja ganz einfach kopieren und dann hinten ranhängen:
        e89cdf47-9114-4f3d-b792-1d81ea433ba1-grafik.png

        S 1 Reply Last reply Reply Quote 0
        • S
          stefu87_CH @Codierknecht last edited by

          @codierknecht sagte in JSON in Grafana einbinden:

          Das kommt u.a. darauf an, ob Du über das "eingebaute" Simple-API oder über den REST-Adapter da rangehst.

          Also ich verwende einen Javascript Code der mir dass dann unter 0_userdata.0.Wohnungsverbrauch.Tagesverbrauch in die JSON Tabelle schreibt.

          Codierknecht 1 Reply Last reply Reply Quote 0
          • Codierknecht
            Codierknecht Developer Most Active @stefu87_CH last edited by

            @stefu87_ch
            Dann versuch doch mal im Browser:
            http://192.168.178.9:8082/getPlainValue/0_userdata.0.Wohnungsverbrauch.Tagesverbrauch

            IP und Port musst Du natürlich anpassen und "eingebautes Simple-API" muss aktiviert sein.

            51d1f3af-9bc3-4653-8db8-003c0b57d91b-grafik.png

            S 1 Reply Last reply Reply Quote 0
            • S
              stefu87_CH @Codierknecht last edited by

              @codierknecht Habe es mal soweit geschafft, das es mir die Tabelle in Grafana anzeigt. Jetzt kommt dann nur noch das Probieren, das ich das ganze dann wie eine Grafik darstellen kann in so einer Variante:

              044da0d6-d21f-45cd-9718-806229dc1cec-grafik.png

              S 1 Reply Last reply Reply Quote 0
              • S
                stefu87_CH @stefu87_CH last edited by

                Kann mir jemand aufzeigen, wie ich das hinkriege, das ich die Werte dann auch Graphische Balken angezeigt bekomme anhand der JSON Tabelle??

                Codierknecht 1 Reply Last reply Reply Quote 0
                • Codierknecht
                  Codierknecht Developer Most Active @stefu87_CH last edited by Codierknecht

                  @stefu87_ch
                  Also bei mir sieht das so aus:

                  Per Script ermittle ich z.B. die Signalstärke meiner Tasmota-Geräte und schreibe das Ganze in einen eigenen DP.

                  const sonoff_ids = Array.prototype.slice.apply($('sonoff.0.*.Wifi_RSSI'));
                  var sonoffStates = {};
                  
                  function refreshSonoffValues(elementList) {
                      for (const element of elementList) {
                          let objAlive = getState(element.replace('.Wifi_RSSI', '.alive')).val;
                          let objName = getObject(element.replace('.Wifi_RSSI', '')).common.name;
                          sonoffStates[objName] = (objAlive ? getState(element).val : 0);
                      }
                      setState('0_userdata.0.Monitoring.Sonoff.RSSI', JSON.stringify(sonoffStates), true);
                  }
                  
                  schedule('* * * * *', function() {
                      refreshSonoffValues(sonoff_ids);
                  });
                  
                  refreshSonoffValues(sonoff_ids);
                  

                  In Grafana lese ich den DP per SimpleApi.

                  0fc692bd-8385-4c6e-92f8-de66fde6a1df-grafik.png
                  Das sieht dann so aus:

                  33ec0deb-bb9e-49b0-b582-1241dc096ce4-grafik.png

                  {
                   "id": 4,
                   "type": "bargauge",
                   "title": "Sonoff",
                   "gridPos": {
                     "x": 0,
                     "y": 1,
                     "h": 17,
                     "w": 11
                   },
                   "fieldConfig": {
                     "defaults": {
                       "mappings": [],
                       "thresholds": {
                         "mode": "absolute",
                         "steps": [
                           {
                             "color": "orange",
                             "value": null
                           },
                           {
                             "color": "yellow",
                             "value": 20
                           },
                           {
                             "color": "green",
                             "value": 50
                           }
                         ]
                       },
                       "color": {
                         "mode": "thresholds"
                       },
                       "decimals": 0,
                       "max": 100,
                       "min": 0,
                       "unit": "percent"
                     },
                     "overrides": []
                   },
                   "transformations": [
                     {
                       "id": "extractFields",
                       "options": {
                         "replace": true,
                         "source": "A"
                       }
                     },
                     {
                       "id": "transpose",
                       "options": {}
                     },
                     {
                       "id": "sortBy",
                       "options": {
                         "fields": {},
                         "sort": [
                           {
                             "field": "Field"
                           }
                         ]
                       }
                     }
                   ],
                   "pluginVersion": "11.4.0",
                   "targets": [
                     {
                       "columns": [],
                       "datasource": {
                         "type": "yesoreyeram-infinity-datasource",
                         "uid": "adut1o422tpfkf"
                       },
                       "filters": [],
                       "format": "table",
                       "global_query_id": "",
                       "parser": "backend",
                       "refId": "A",
                       "root_selector": "",
                       "source": "url",
                       "type": "json",
                       "uql": "parse-json\r\n| jsonata \"$.result[0].value\"\r\n\r\n",
                       "url": "http://192.168.178.9:8083/getPlainValue/0_userdata.0.Monitoring.Sonoff.RSSI",
                       "url_options": {
                         "body_content_type": "text/plain",
                         "body_type": "none",
                         "data": "",
                         "headers": [],
                         "method": "GET"
                       }
                     }
                   ],
                   "datasource": {
                     "type": "yesoreyeram-infinity-datasource",
                     "uid": "adut1o422tpfkf"
                   },
                   "options": {
                     "reduceOptions": {
                       "values": true,
                       "calcs": [
                         "min"
                       ],
                       "fields": "/^1$/"
                     },
                     "orientation": "horizontal",
                     "legend": {
                       "showLegend": false,
                       "displayMode": "list",
                       "placement": "bottom",
                       "calcs": []
                     },
                     "displayMode": "gradient",
                     "valueMode": "color",
                     "namePlacement": "left",
                     "showUnfilled": true,
                     "sizing": "manual",
                     "minVizWidth": 8,
                     "minVizHeight": 0,
                     "maxVizHeight": 20
                   }
                  }
                  

                  S 1 Reply Last reply Reply Quote 0
                  • S
                    stefu87_CH @Codierknecht last edited by

                    @codierknecht ok sowas würde ich gerne haben, aber kann man das auch machen, wenn in der Tabelle für jeden Tag ein Wert drin steht?

                    Also z.B so:
                    01.01.2025 5.64kW
                    02.01.2025 6.52kW
                    03.01.2025 4.58kW
                    usw…

                    Codierknecht 1 Reply Last reply Reply Quote 0
                    • Codierknecht
                      Codierknecht Developer Most Active @stefu87_CH last edited by

                      @stefu87_ch
                      Kein Problem. Das JSON muss dann aber etwas anders aussehen. Der Wert darf keine Einheit haben. Die wird in Grafana eingestellt.

                      64ae7f3c-d87d-4fc4-8dd9-ff108e904ad5-grafik.png

                      "{"01.01.2025":5.64,"02.01.2025":6.25,"03.01.2025":5.89,"04.01.2025":5.4}"
                      
                      S 2 Replies Last reply Reply Quote 0
                      • S
                        stefu87_CH @Codierknecht last edited by

                        @codierknecht ok danke für den Tipp.
                        Werde mir morgen mal den Java Code anschauen wo das definiert wird im Code

                        1 Reply Last reply Reply Quote 0
                        • S
                          stefu87_CH @Codierknecht last edited by

                          @codierknecht Also wenn ich die Json Tabelle anpasse, erscheint nur das bei mir:

                          344742ba-e70c-4cf4-aed2-a2fe0f6aec40-grafik.png

                          Die Tabelle sieht so aus:

                          9adce245-d638-47a4-858d-1cb0cef7349a-grafik.png

                          Codierknecht 1 Reply Last reply Reply Quote 0
                          • Codierknecht
                            Codierknecht Developer Most Active @stefu87_CH last edited by

                            @stefu87_ch
                            Dein JSON sieht ja auch völlig anders aus. Du hast ein Array von Objekten mit jeweils 2 Properties.
                            Mein JSON ist ein Objekt mit X Properties.

                            Da gibt's in Grafana jede Menge Manipulationsmöglichkeiten über die "Transformations". Da muss man mal kreativ werden und rumspielen 😁

                            Oder Du postest hier mal Dein JSON (in Code-Tags </>).

                            S 1 Reply Last reply Reply Quote 0
                            • S
                              stefu87_CH @Codierknecht last edited by

                              @codierknecht
                              Also habe diesen Code so von einer Internetseite kopiert gehabt vor längere Zeit.

                              const idVerbrauch = '0_userdata.0.Wohnungsverbrauch.Tagesverbrauch_kwh'; // ID zuweisen!
                              
                              const idTable = '0_userdata.0.Wohnungsverbrauch.TagesverbrauchTest'; // ID anpassen!
                              
                               schedule('59 23 * * *', function() {
                              
                                  var arr = [];
                              
                                  if(getState(idTable).val) arr = JSON.parse(getState(idTable).val);
                              
                                  const obj = {
                              
                                      Datum: formatDate(new Date(), 'W, DD.MM.YYYY'),
                              
                                      Verbrauch: getState(idVerbrauch).val.toFixed(3)
                              
                                  }
                              
                                  arr.push(obj);
                              
                                  if(arr.length > 23) arr.shift(); // max. 23 Zeilen
                              
                                  setState(idTable, JSON.stringify(arr), true);
                              
                              });
                              
                              
                              
                              Codierknecht 1 Reply Last reply Reply Quote 0
                              • Codierknecht
                                Codierknecht Developer Most Active @stefu87_CH last edited by

                                @stefu87_ch
                                Der schreibt Dir jeden Abend einen neuen Eintrag in ein JSON-Array.
                                Über die Sinnhaftigkeit von sowas mag man streiten. Dafür gibt's diverse History-Adapter (SQL, Influx, History).

                                Das JS umzuschreiben könnte auch schwierig werden, da der Aufbau ja komplett anders aussehen muss und die Werte der Vergangenheit dann erstmal weg sind (es sei denn, man treibt da noch Zusatzaufwand).

                                Versuch's mal hiermit. Ist allerdings nur so dahingeschrieben und ungetestet.

                                const idVerbrauch = '0_userdata.0.Wohnungsverbrauch.Tagesverbrauch_kwh'; // ID zuweisen!
                                const idTable = '0_userdata.0.Wohnungsverbrauch.TagesverbrauchTest'; // ID anpassen!
                                const idGrafana = '0_userdata.0.Wohnungsverbrauch.TagesverbrauchGrafana';
                                 
                                schedule('59 23 * * *', function() {
                                    var arr = [];
                                
                                    if (getState(idTable).val) arr = JSON.parse(getState(idTable).val);
                                 
                                    const obj = {
                                        Datum: formatDate(new Date(), 'W, DD.MM.YYYY'),
                                        Verbrauch: getState(idVerbrauch).val.toFixed(3)
                                    }
                                 
                                    arr.push(obj);
                                 
                                    if(arr.length > 23) arr.shift(); // max. 23 Zeilen
                                 
                                    setState(idTable, JSON.stringify(arr), true);
                                    
                                    let values = {};
                                    for (const item of arr) {
                                      values[item.Datum] = parseFloat(item.Verbrauch);
                                    }
                                    setState(idGrafana, JSON.stringify(values), true);
                                    
                                });
                                
                                S 1 Reply Last reply Reply Quote 0
                                • S
                                  stefu87_CH @Codierknecht last edited by

                                  @codierknecht sagte in JSON in Grafana einbinden:

                                  '0_userdata.0.Wohnungsverbrauch.TagesverbrauchGrafana

                                  Muss ich diesen noch selber anlegen, oder passiert das dann automatisch?

                                  Codierknecht 1 Reply Last reply Reply Quote 0
                                  • Codierknecht
                                    Codierknecht Developer Most Active @stefu87_CH last edited by

                                    @stefu87_ch sagte in JSON in Grafana einbinden:

                                    Muss ich diesen noch selber anlegen, oder passiert das dann automatisch?

                                    Den musst Du selbst anlegen. Typ "Text/String".

                                    S 1 Reply Last reply Reply Quote 0
                                    • S
                                      stefu87_CH @Codierknecht last edited by

                                      @codierknecht Ok werde es mal testen und schauen ob heute Nacht etwas passiert.

                                      Wie würdest du den das umsetzen ohne die JSON Tabelle, sondern eben mit z.B. Influx das er immer um 23:59 den Wert speichert samt Datum?

                                      Codierknecht 1 Reply Last reply Reply Quote 0
                                      • Codierknecht
                                        Codierknecht Developer Most Active @stefu87_CH last edited by

                                        @stefu87_ch sagte in JSON in Grafana einbinden:

                                        Wie würdest du den das umsetzen ohne die JSON Tabelle, sondern eben mit z.B. Influx das er immer um 23:59 den Wert speichert samt Datum?

                                        Ich habe dafür einen eigenen DP für den Tagesverbrauch. Der wird per SQL historisiert.
                                        In den DP wird per Script um 23:59:45 Uhr der Wert reingeschrieben. So habe ich die Werte mit passendem Datum in der DB. Damit lassen sich dann ohne viel Aufwand auch Monats- oder Jahresverbräuche bestimmen.

                                        S 1 Reply Last reply Reply Quote 0
                                        • S
                                          stefu87_CH @Codierknecht last edited by

                                          @codierknecht
                                          Also für den Tagesverbauch habe ich auch einen Datenpunkt der alle 15min aktualisiert wird. Und um 23:59 schreibt eben der gezeigte Code dann dies in die JSON Tabelle.

                                          Könnte ich den mit dem bestehen Datenpunkt sowas weiter verarbeiten so wie du das machst?

                                          Codierknecht 1 Reply Last reply Reply Quote 0
                                          • Codierknecht
                                            Codierknecht Developer Most Active @stefu87_CH last edited by

                                            @stefu87_ch sagte in JSON in Grafana einbinden:

                                            Könnte ich den mit dem bestehen Datenpunkt sowas weiter verarbeiten so wie du das machst?

                                            Eben nicht, weil der ja alle 15 Minuten aktualisier wird.
                                            Lege Dir einen neuen an (Typ: Zahl) und historisiere den. Da schreibst Du einfach um 23:59 Uhr den aktuellen Wert aus dem über Tag hochgezählten DP rein.

                                            S 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            550
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            2
                                            39
                                            991
                                            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