influxDB und Flux für Zeitabfragen / Tageswerte
Hat man alle Daten in der influxDB meint man, es wäre einfach diese passend in Grafana anzuzeigen.
Der folgende Code zeigt, dass es irgendwie doch nicht so einfach ist:
import "timezone"
option location = timezone.fixed(offset: 2h)
from(bucket: "iobroker")
|> range(start: -90d)
|> filter(fn: (r) => r["_measurement"] == "0_userdata.0.Solarweb.Current.01_Day.Energy.EnergyConsumptionTotal")
|> filter(fn: (r) => r["_field"] == "value")
|> aggregateWindow(every: 1d, fn: max, createEmpty: false)
|> timeShift(duration: -1m)
|> set(key: "_measurement", value: "Verbrauch")
|> set(key: "_field", value: "")
Das was einen Programmierer in den Wahnsinn treibt (neben Codepage) sind gefühlt die Zeitzonen + Sommer und Winterzeit….ahhhhhhhhhh
Irgendwie passte es bei mir auch alles nicht so richtig, die Verschiebung um 2 Stunden half erst einmal.
Wahrscheinlich müsste man UTC-1 oder so – und dann noch irgendwie Sommer und Winterzeit rein bekommen.
Siehe auch:
https://www.influxdata.com/blog/time-zones-in-flux/
wenn ich eine bessere Lösung gefunden habe, schreibe ich diese hier.
Soweit versteht sich dies als erster Workaround.
Weiter im Code:
range – die letzten 90 Tage okay…
dann das andere Gedöns, okay.
Aber der krönende Abschluss für mich:
|> timeShift(duration: -1m)
Die MaxWerte des Tages welche ich auslesen möchte, kommen genau um 00:00 Uhr an.
Und es ist 00:00 Uhr nicht 24:00 Uhr.
Ich dachte schon es liegt an der Influx, dass er mir den heutigen Tag doppelt anzeigt und die restlichen Tag um 1 verschoben – nein. Es liegt an den Daten – okay.
Die Lösung versteht sich von selbst – aber irgendwie auch schon wieder alles viel zu kompliziert 😉