Grafana JSON API - Query
Moin,
Nachdem ich das Problem mit dem JSONpath-Ausdruck herausgefunden habe, ist es mir gelungen, JSON-Daten in Grafana abzurufen. Soweit so gut, aber manchmal waren die Diagramme kaputt und nachdem ich die Ursache gefunden habe, stellte ich fest, dass die Web-API unserer Photovoltaik-Verwaltungskonsole die JSON-Daten nicht auf konsistente Weise generiert.
Das bedeutet, dass sich die Arrays nicht bei jeder GET-Anfrage am selben Ort befinden. Einmal ist es zum Beispiel so...
Und eine Minute später ist es so:
Um das richtige Feld in Grafana abzurufen, habe ich Ausdrücke verwendet wie:
Wenn von der PV kein Strom fließt, wird das Element „value“ nicht in das Array übergeben. Ich habe dann Datumswerte aber keine Zahlenwerte, so dass Grafana/JSON API mit meldet, dass die Felder in ihrer Länge nicht übereinstimmen. Hier könnte ich den JSONata-Ausdruck verwenden, um diese Werte mit „0“ zu füllen, wenn das Element fehlt. Mit diesem Ausdruck:
Dies funktioniert nur, wenn das Array „[3]“ tatsächlich das aktuelle Element ist für die Daten der Stromerzeugung der PV.
Wie muss ich den JSONana-Ausdruck ändern, um die „Typ“-Bedingung hinzuzufügen?
Nachdem ich das Problem mit dem JSONpath-Ausdruck herausgefunden habe, ist es mir gelungen, JSON-Daten in Grafana abzurufen. Soweit so gut, aber manchmal waren die Diagramme kaputt und nachdem ich die Ursache gefunden habe, stellte ich fest, dass die Web-API unserer Photovoltaik-Verwaltungskonsole die JSON-Daten nicht auf konsistente Weise generiert.
Das bedeutet, dass sich die Arrays nicht bei jeder GET-Anfrage am selben Ort befinden. Einmal ist es zum Beispiel so...
{ "powerDetails": {
"timeUnit": "QUARTER_OF_AN_HOUR",
"unit": "W",
"meters": [
{
"type": "Purchased",
"values": .....
Und eine Minute später ist es so:
{ "powerDetails": {
"timeUnit": "QUARTER_OF_AN_HOUR",
"unit": "W",
"meters": [
{
"type": "Consumed",
"values": .....
Um das richtige Feld in Grafana abzurufen, habe ich Ausdrücke verwendet wie:
$.powerDetails.meters[?(@.type == "Purchased")].values[*].value
Wenn von der PV kein Strom fließt, wird das Element „value“ nicht in das Array übergeben. Ich habe dann Datumswerte aber keine Zahlenwerte, so dass Grafana/JSON API mit meldet, dass die Felder in ihrer Länge nicht übereinstimmen. Hier könnte ich den JSONata-Ausdruck verwenden, um diese Werte mit „0“ zu füllen, wenn das Element fehlt. Mit diesem Ausdruck:
($exists($.powerDetails.meters[3].values[*]."value") ? $.powerDetails.meters[3].values[*]."value" : 0)
Dies funktioniert nur, wenn das Array „[3]“ tatsächlich das aktuelle Element ist für die Daten der Stromerzeugung der PV.
Wie muss ich den JSONana-Ausdruck ändern, um die „Typ“-Bedingung hinzuzufügen?
Please also mark the comments that contributed to the solution of the article
Content-ID: 7127202448
Url: https://administrator.de/contentid/7127202448
Printed on: October 6, 2024 at 19:10 o'clock