NEWS
Grafana macht aus 7 Tagen 8 Tage
-
Hallo zusammen,
ich möchte die Auswertung einer Woche (Balkonkraftwerk) sehen. Ich bekomme aber immer 8 Tage angezeigt, wobei der ganz Linke Balken über die Woche immer weniger wird. Ist bestimmt eine Einstellungssacheimport "timezone" option location = timezone.location(name: "Europe/Berlin") from(bucket: "iobroker") |> range(start: -1w) |> filter(fn: (r) => r["_measurement"] == "ErtragTotal" and r["_field"] == "value") |> difference() |> aggregateWindow(every: 1d, fn: sum, timeSrc: "_start")
Hat jemand eine Idee?
Viele Grüße, Ingo
-
@igabbert
Deine Influx-Query macht genau das, was du ihr "aufgetragen" hast: alle Daten aus den letzten 7 Tagen bzw. 7 * 24h zu ermitteln. Wenn du Donnerstags um 18 Uhr die Abfrage startest, werden Daten ab dem letzten Donnerstag 18 Uhr ausgegeben. Das sind dann 8 Tage, aber 7*24 Stunden.Wenn du das nicht willst, kannst du den Start der Query immer auf 0 Uhr verschieben, mit der Funktion "date.truncate".
Probiere mal:
import "timezone" import "date" option location = timezone.location(name: "Europe/Berlin") from(bucket: "iobroker") |> range(start: date.truncate(t:-6d, unit:1d)) |> filter(fn: (r) => r["_measurement"] == "ErtragTotal" and r["_field"] == "value") |> difference() |> aggregateWindow(every: 1d, fn: sum, timeSrc: "_start")
-
@marc-berg said in Grafana macht aus 7 Tagen 8 Tage:
date.truncate(t:-6d, unit:1d))
Vielen Dank für die Rückmeldung.
Dein Versuch klappt leider nicht, bekomme die Meldung "Color Field not found".Warum wird dann aber der Wert des "linken" Balkens über die Woche weniger?
Viele Grüße, Ingo
-
@igabbert sagte in Grafana macht aus 7 Tagen 8 Tage:
Dein Versuch klappt leider nicht, bekomme die Meldung "Color Field not found".
Diese Fehlermeldung hat mit der Anpassung der Query meines Erachtens gar nichts zu tun, schließlich wurde nur der Abfragezeitraum minimal geändert. Wahrscheinlich schlägt da irgendeine Transformation oder ein Override in Grafana zu, das du erstellt hast.
An deiner Stelle würde ich jetzt zum Testen ein neues Diagramm in Grafana anlegen und die Query verwenden, um solche Beeinflussungen zunächst auszuschließen. -
hat funktioniert, jetzt wollte ich das ganze für einen Monat ( 1 Monat = je Woche einen Balken) anpassen, klappt aber nicht. Hast Du noch einen Tip? Hier der Code:
import "timezone" option location = timezone.location(name: "Europe/Berlin") from(bucket: "iobroker") |> range(start: -1mo) |> filter(fn: (r) => r["_measurement"] == "ErtragTotal" and r["_field"] == "value") |> difference() |> aggregateWindow(every: 7d, offset: 4d,fn: sum, timeSrc: "_start")
Vorab herzlichen Dank
-
@igabbert sagte in Grafana macht aus 7 Tagen 8 Tage:
klappt aber nicht
Das ist ein wenig unspezifisch. Was erwartest du und was ist das Ergebnis stattdessen?
Ich gehe mal davon aus, dass du nicht einen Monat zurück gehen willst, sondern vier Wochen bzw. 28 Tage. Damit kannst du meine Query entsprechend anpassen.
-
@marc-berg
Hi,
genau wie Grafana aus 7 Tagen 8 Tage macht, wird aus 4 Wochen 5 Wochen gemacht, wobei jeweils die Woche, die links steht weniger wird.
Hier ein Screenshot:
Ich bekomme es aber nicht hin, den Code mit deinem Tip an zu passen.
Viele Grüße, Ingo
-
@igabbert hiermit macht er die letzten 7 Tage ausser heute:
|> range(start: date.add(d: -7d, to: today()), stop: date.truncate(t: today(), unit: 1d))
und
import "date"
oben nicht vergessen
-
@igabbert sagte in Grafana macht aus 7 Tagen 8 Tage:
genau wie Grafana aus 7 Tagen 8 Tage macht, wird aus 4 Wochen 5 Wochen gemacht
Hast Du die Antwort/Begründung von @Marc-Berg oben gelesen?
-
@haus-automatisierung
Habe nochmal überlegt, besser 28d bzw. 27d als 1mo im Code verwenden?
Meinst Du das?Viele Grüße, Ingo
-
@igabbert said in Grafana macht aus 7 Tagen 8 Tage:
@haus-automatisierung
Habe nochmal überlegt, besser 28d bzw. 27d als 1mo im Code verwenden?
Meinst Du das?Viele Grüße, Ingo
Habe nun folgenden Code verwendet, aber das Erscheinungsbild des Panels hat sich nicht geändert:
import "timezone" import "date" option location = timezone.location(name: "Europe/Berlin") from(bucket: "iobroker") |> range(start: date.truncate(t:-27d, unit:7d)) |> filter(fn: (r) => r["_measurement"] == "ErtragTotal" and r["_field"] == "value") |> difference() |> aggregateWindow(every: 7d, offset: -3d, fn: sum, timeSrc: "_start")
-
@igabbert sagte in Grafana macht aus 7 Tagen 8 Tage:
|> range(start: date.truncate(t:-27d, unit:7d))
Die Funktion erlaubt als unit aber nur Werte mit 1. Also
1s
,1m
,1h
, ...Was genau soll
7d
als Unit denn bezwecken?! Und warum ein Offset von-3d
?Definiere doch nochmal genau was Du haben möchtest. Erst war Dir ein Tag zu viel, dann wurde darauf geantwortet und eine Lösung geboten. Dann wurde auf Monat umgestellt und ein Monat zu viel?
Von wann bis wann genau möchtest Du welche Daten haben
-
@haus-automatisierung
Das mit der Woche hat sich, wie ich bereits geschrieben habe, erledigt und klappt jetzt auch gut. Nun habe ich das gleiche Problem bei der Monatsauswertung, d.h. Ich definiere im Code einen Monat, also 1mo und er soll die letzten vier Wochenwerte anzeigen.
Er zeigt aber 5 Wochen an, wobei der linke Balken im Laufe des Woche stetig weniger wird. Ich habe oben bereits ein Screenshot eingebunden.Der offset in der Wochengeschichte, hat damit zu tun, dass für Grafana die Woche am Donnerstag beginnt und nicht am Montag.
Viele Grüße, Ingo
-
Zusammenfassung:
date.add(d: -1mo, to: today())
würde Dir heute Minus 1 Monat rechnen (also heute 04.08. > 04.07.). Die Frage ist ob Du das als Start möchtest oder ganze Wochen (Mo-So). Sonst würde ja ggf. eine halbe Woche oder noch weniger in der Auswertung auftauchen.date.truncate(t: today(), unit: 1mo)
würde den Anfang des aktuellen Monats ausgeben. Also heute 04.08 > 01.08). Da sind nur nicht 4 Wochen enthalten.
@igabbert sagte in Grafana macht aus 7 Tagen 8 Tage:
Der offset in der Wochengeschichte, hat damit zu tun, dass für Grafana die Woche am Donnerstag beginnt und nicht am Montag.
Ach stimmt, da bin ich auch mal drüber gestolpert. Der Grund ist:
The Unix epoch was on a Thursday, so all calculated weeks begin on Thursday.
Daher liefert
date.truncate(t: today(), unit: 1w)
auch aktuell den 03.08. statt den 31.07.date.sub(d: 3d, from: date.truncate(t: today(), unit: 1w))
wäre dann richtig (der letzte Anfang der Woche). Das klappt aber nicht immer (z.B. Montag oder Dienstag). Daher schlage ich vorher nochmal 3 Tage drauf (von Heute) und später wieder 3 Tage zurück vom Ergebnis. siehe unten
Mein Ziel wäre jetzt (an Deiner Stelle) von dort aus 4x 7 Tage = 28 Tage zurück zu gehen (also wäre das der 03.07.). So bekommt man 4 vollständige Wochen als Ergebnis und die aktuell laufende Woche wird ignoriert.
import "timezone" import "date" option location = timezone.location(name: "Europe/Berlin") tempDate = date.add(d: 3d, to: today()) weekStart = date.sub(d: 3d, from: date.truncate(t: tempDate, unit: 1w)) from(bucket: "iobroker") |> range(start: date.sub(d: 28d, from: weekStart), stop: weekStart) |> filter(fn: (r) => r["_measurement"] == "ErtragTotal" and r["_field"] == "value") |> difference() |> aggregateWindow(every: 1w, offset: -3d, fn: sum, timeSrc: "_start")
EDIT: Habe das Statement gerade noch einmal bearbeitet. So bekomme ich genau 4 Ergebnisse und diese stimmen mit den Daten aus meinem Wechselrichter überein.
-
@haus-automatisierung
Hallo,Es scheint zu funktionieren! Ich habe nur das Gefühl, das immer noch der linke Balken zum Ende der Woche kürzer wird, also die Werte fallen. Ich halte das mal im Blick und melde mich. Trotzdem schon einmal vielen Dank für Deine Hilfe.
Viele Grüße, Ingo
-
@igabbert sagte in Grafana macht aus 7 Tagen 8 Tage:
Ich habe nur das Gefühl, das immer noch der linke Balken zum Ende der Woche kürzer wird
Kann ja nicht, da
weekStart
auf diese Art und Weise immer auf dem gleichen Zeitpunkt bleibt, bis die Woche wechselt. -
@haus-automatisierung
Stimmt!
Vielen Dank für Deine Hilfe.Viele Grüße, Ingo
-
@igabbert Hallo zusammen, ich muss nochmal nerven. Das o.g. Script läuft nicht weiter. Eigentlich sollte nun die neue Woche mit dem 28.08. beginnen und die Woche ab 31.07. verschwinden. Passiert aber nicht.
Hat jemand eine Idee? Am Code habe ich nichts geändert.
Viele Grüße, Ingo
-
@igabbert sagte in Grafana macht aus 7 Tagen 8 Tage:
Das o.g. Script läuft nicht weiter
Da "oben" gibt einige Queries. Es ist unklar, worauf du dich beziehst.
Außerdem:
@haus-automatisierung sagte in Grafana macht aus 7 Tagen 8 Tage:
So bekommt man 4 vollständige Wochen als Ergebnis und die aktuell laufende Woche wird ignoriert.
Und genau DAS sehe ich in deinem Screenshot.
-
@igabbert sagte in Grafana macht aus 7 Tagen 8 Tage:
Eigentlich sollte nun die neue Woche mit dem 28.08. beginnen und die Woche ab 31.07. verschwinden. Passiert aber nicht.
Ja? Das hatten wir oben aber anders besprochen