NEWS
Grafana - Range mit flexiblem Datum, aber immer 00:00
-
Moin, ich habe eine Flux-Query in Grafana, in der ich meinen Netzbezug der letzten 7 Tage anzeigen lassen . Aktuell startet/endet die Darstellung immer mit der aktuellen Uhrzeit, was am Starttag zu einem Teilwert in der Darstellung führt.
Wie kann ich die Range in meinem Code entsprechend anpassen? Also Beginn am variablen Starttag um 00:00 und am Ende am Endtag um 23:59 enden.
from(bucket: "nodered") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "KG.hz.SZ_A_Plus15") |> filter(fn: (r) => r["_field"] == "value") |> difference() |> aggregateWindow(every: 1d, offset:-121m, fn: sum, createEmpty: false)
Das ist bestimmt simpel, aber ich könnte da gut einen Tipp brauchen.
-
@cocomp erst mal Zeitzone anpassen.
Nicht mit so einem komischen offset sondern.:
import "timezone" // import wegen der Berechnung um 02:00:00 option location = timezone.location(name: "Europe/Berlin")
dann Offset -1m. So liegst dann zwischen 23:59 und 23:59.
Das Berechnen vor null Uhr ist ja nur wichtig das die Berechnung nicht dem nächsten Tag zugeordnet wird.
Außerdem stimmt in dem Query was nicht. Du berechnest difference() und aggregierst dann mit fn: sum.
Probiere mal so:
import "timezone" // import wegen der Berechnung um 02:00:00 option location = timezone.location(name: "Europe/Berlin") from(bucket: "nodered") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "KG.hz.SZ_A_Plus15") |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: 1d, offset: -1m, fn: last, timeSrc: "_start") |> difference()
-
@spacerx said in Grafana - Range mit flexiblem Datum, aber immer 00:00:
Außerdem stimmt in dem Query was nicht. Du berechnest difference() und aggregierst dann mit fn: sum.
Die Query passt schon - das Measurement enthält Zählerstände, die alle 5 Minuten in der Influx2DB gespeichert werden. Damit ermittelt difference () die Energiemenge zwischen zwei Zählerständen und fn: sum aggregiert diese Energiemengen dann über den Tag.
Dein Weg ist aber trotzdem die Lösung Danke..
-
@spacerx said in Grafana - Range mit flexiblem Datum, aber immer 00:00:
@cocomp erst mal Zeitzone anpassen.
Nicht mit so einem komischen offset sondern.:
import "timezone" // import wegen der Berechnung um 02:00:00 option location = timezone.location(name: "Europe/Berlin")
dann Offset -1m. So liegst dann zwischen 23:59 und 23:59.
Das Berechnen vor null Uhr ist ja nur wichtig das die Berechnung nicht dem nächsten Tag zugeordnet wird.
Außerdem stimmt in dem Query was nicht. Du berechnest difference() und aggregierst dann mit fn: sum.
Probiere mal so:
import "timezone" // import wegen der Berechnung um 02:00:00 option location = timezone.location(name: "Europe/Berlin") from(bucket: "nodered") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "KG.hz.SZ_A_Plus15") |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: 1d, offset: -1m, fn: last, timeSrc: "_start") |> difference()
@spacerx An einer Stelle hänge ich noch. Wie definiere ich range, damit der betrachtete Zeitraum immer am aktuellen Tag um 00:00 beginnt und bis zum Abfragezeitpunkt geht?
-
@cocomp Probiere:
|> range(start: today())
https://docs.influxdata.com/flux/v0.x/stdlib/universe/today/
Bei stop nichts eintragen, dann wird automatisch now() genommen.
Ansonsten, wenn Du über NodeRed arbeitest, kannst Du die Zeitstempel ja auch dynamisch in Deine Abfrage setzen und über die moments Bibliothek die Startzeitpunkte der jeweiligen Zeitspannen berechnen.
-
@mickym said in Grafana - Range mit flexiblem Datum, aber immer 00:00:
@cocomp Probiere:
|> range(start: today())
https://docs.influxdata.com/flux/v0.x/stdlib/universe/today/
Bei stop nichts eintragen, dann wird automatisch now() genommen.
Da stoße ich jetzt auf einen Punkt, den ich mir nicht erklären kann. Die Zeitzone des Dashbords ist auf CEST, also Deutschland eingestellt. Nur startet der Zeitraum aber nicht um 00:00, sondern um 2:00. Das Ende mit "automatischen" now passt dann wieder auf der aktuellen Deutschen Zeit
import "timezone" // import wegen der Berechnung um 02:00:00 option location = timezone.location(name: "Europe/Berlin") from(bucket: "nodered") |> range(start: today()) |> filter(fn: (r) => r["_measurement"] == "KG.hz.SZ_A_Plus15") |> filter(fn: (r) => r["_field"] == "value")
Daten vor 02:00 sind natürlich vorhanden. Was übersehe ich?
-
@cocomp Ich war immer der Meinung - dass man diese Timezone nicht braucht - da automatisch immer auf local timezone gematched wird. - Allerdings ist es zwingend Datenpunkte immer in UTC zu speichern. Aber da gibts sicher Leute, die das besser wissen als ich.
-
@mickym Da ich die Daten alle aus ioBroker oder Nodered in einer Influx2db speichere, sollten die ja in UTC vorliegen. Und das habe ich für dieses Measurement geprüft, passt also.
Daher meine Verwirrung. -
@cocomp sagte in Grafana - Range mit flexiblem Datum, aber immer 00:00:
@mickym Da ich die Daten alle aus ioBroker oder Nodered in einer Influx2db speichere, sollten die ja in UTC vorliegen. Und das habe ich für dieses Measurement geprüft, passt also.
Daher meine Verwirrung.Im NodeRed musst halt - schon das Format konvertieren:
Ich hab das extra mal getestet - das Influx wirklich nur dieses Format (also Z und kein Offset) als Eingabe akzeptiert.