Seite 1 von 1

Variablen für Datumswerte

Verfasst: Sa 13. Feb 2021, 10:25
von Gerd
Hallo,

ich benötige mal eure Hilfe.

Ich möchte weg, von dieser Art der zeitlichen Abgrenzung in den SQL Abfragen

where time >= '2021-01-01T00:00:00Z' and time <= '2021-12-31T00:00:00Z'

Bestimmt gibt es doch eine Möglichkeit Variablen zu definieren, die dann unter Grafana nutzen werden können.

Es wäre doch bestimmt für viele ein Mehrwert, wenn u.a. folgende Variablen zur Verfügung stehen würden.

$Vorjahr, $AktJahr, $Heute, $Gestern, ….

Re: Variablen für Datumswerte

Verfasst: Sa 13. Feb 2021, 12:19
von Bogeyof
Dann such mal im Internet und Du wirst feststellen, dass der Wunsch zwar groß ist, aber keine Lösungsmöglichkeiten angeboten werden.
Nebenbei, Deine Jahresabfrage lässt den 31.12.21 aus, geht also nur bis zum 30.12.21 inklusive.

Ich habe angefangen, mir über eine eigene_werte.php zusätzliche Daten in die Datenbank zu schreiben. Hier sind aktuell TagImMonat, TagImJAhr, Monat, Stunde hinterlegt. Vielleicht sollte ich noch Minuten mit dazu nehmen. Man kann diese dann beim Dashboard als Query-Variable hinterlegen und damit sogar Rechnen und die Zeitabfragen steuern:

Beispiel für Heute:

Code: Alles auswählen

SELECT integral(Gesamtleistung,1h) FROM "PV" WHERE time > now() - 1d GROUP BY time(1d)
Liefert 2 Werte, es wird aber immer der letzte angezeigt und das ist der Wert für Heute
Beispiel für Gestern (bis gleiche Zeit heute, nicht Gesamt Gestern):

Code: Alles auswählen

SELECT integral(Gesamtleistung,1h) FROM "PV" WHERE time > now() - 2d and time < now() - 1d GROUP BY time(1d)
Liefert 2 Werte, es wird aber immer der letzte angezeigt und das ist der Wert für Gestern bis zur aktuellen Tageszeit. Geeignet für einen Vortagesvergleich...
Beispiel für aktuellen Monat:

Code: Alles auswählen

SELECT integral("Gesamtleistung",1h) FROM "PV" WHERE  (time >= now() - ${TagImMonat}d  + 1d - ${Stunde}h)  fill(linear)
Unter der Voraussetzung, dass die eigenen Variablen TagImMonat und Stunde zur Verfügung stehen (habe ich selbst in die Datenbank geschrieben) kann damit eine immer gültige Abfrage für den laufenden Monat geschrieben werden
Vormonat geht so nicht, da die Anzahl der Tage variiert, könnte man lösen, indem man sich auch eine Variable TageVormonat in die Datenbank schreibt.

Code: Alles auswählen

SELECT integral("Gesamtleistung",1h) FROM "PV" WHERE  (time >= now() - ${TagImMonat}d -${TageVormonat}d + 1d - ${Stunde}h) and (time < now() - ${TagImMonat}d + 1d - ${Stunde}h)fill(linear)
Beispiel für aktuelles Jahr:

Code: Alles auswählen

SELECT integral("Gesamtleistung",1h) FROM "PV" WHERE  (time >= now() - ${TagImJahr}d  + 1d - ${Stunde}h)  fill(linear)
Unter der Voraussetzung, dass die eigenen Variablen TagImJahr und Stunde zur Verfügung stehen (habe ich selbst in die Datenbank geschrieben) kann damit eine immer gültige Abfrage für das laufende Jahr geschrieben werden
Vorjahr ist etwas ungenau, aber ohne Schaltjahr sollte es so funktionieren (gesamtes Vorjahr):

Code: Alles auswählen

SELECT integral("Gesamtleistung",1h) FROM "PV" WHERE  (time >= now() - ${TagImJahr}d -365d + 1d - ${Stunde}h) and (time < now() - ${TagImJahr}d + 1d - ${Stunde}h)fill(linear)
Nicht wirklich umsetzbar ist das bisher für Jahrestabellen, welche jeden Monat in einer gemeinsamen Grafik darstellen sollen, siehe meinen Beitrag hier (da hoffe ich noch auf geniale Ideen):
viewtopic.php?p=7092#p7092

Re: Variablen für Datumswerte

Verfasst: Sa 13. Feb 2021, 12:41
von Bogeyof
Kaum habe ich es geschrieben ist mir noch eine einfache Lösung für die Monatstabellen eingefallen:
Man definiert sich in Grafana im Dashboard eine Variable Jahr (auch als Konstante möglich, dann muss diese halt einmal im Jahr geändert werden) und baut die Abfragen dann wie folgt:

Code: Alles auswählen

SELECT integral("Gesamtleistung",1h) FROM "PV" WHERE time >='20${Jahr}-01-01' and time < '20${Jahr}-02-01' tz('Europe/Berlin') 
Damit kann ich immer denn Monat Januar des Jahres abfragen, auf welchen die Variable Jahr gesetzt ist. Wenn ich auch noch eine Variable mit Vorjahr definiere, dann z.B. problemlos auch ein Vorjahresvergleich möglich.
Damit sind viele Probleme der jährlichen Nacharbeit gelöst...

Re: Variablen für Datumswerte

Verfasst: Sa 13. Feb 2021, 13:22
von Gerd
Danke @Bogeyof :)

Für deine Ausführungen.
Du hast dir also eine eigene Abfrage geschaffen die dir deine Werte in die Datenbank schreibt. Wie z.b. $TagImMonat, ...

Hut ab :)

Die du dann wohl über die Variablen Funktion im Dashboard ausließt.

Dann sollte es doch auch möglich sein einen solchen String "2021-01-01T00:00:00Z" z.b. als (DatStartAktJahr") oder auch abgeändert als DatEndeAktJahr) in die die DB zu schreiben. Wobei man die Variable (Jahr) vom Raspi bekommen könnte.

Oder stehe ich da auf dem Schlauch?

Re: Variablen für Datumswerte

Verfasst: So 14. Feb 2021, 09:28
von Bogeyof
Klar würde das gehen. Aber auf der anderen Seite sind die Selects ja nur einmal zu definieren und dann unabhängig vom aktuellen Jahr. Mit den Variablen TagImJahr, TageMonat, TagImMonat, Monat, Stunde kann man so viele unterschiedliche "unabhängige" Abfragen machen, dass ich den Vorteil eines festen Strings in der Datenbank nicht wirklich sehe. Aber möglich wäre es.
Wie man einfach und vom Update der Solaranzeige unabhängig eigene Werte in die Datenbank schreiben kann habe ich hier beschrieben (und in dem dort verlinkten Thema):
viewtopic.php?p=6839#p6839

Re: Variablen für Datumswerte

Verfasst: So 14. Feb 2021, 13:54
von Bogeyof
Ich denke ich habe eine machbare Lösung gefunden. Evtl. wird sie @Ulrich in den Standard mit übernehmen:
siehe viewtopic.php?p=7141#p7141

Re: Variablen für Datumswerte

Verfasst: Mo 15. Feb 2021, 11:35
von Gerd
Bogeyof hat geschrieben:
So 14. Feb 2021, 13:54
Ich denke ich habe eine machbare Lösung gefunden. Evtl. wird sie @Ulrich in den Standard mit übernehmen:
siehe viewtopic.php?p=7141#p7141
danke

Re: Variablen für Datumswerte

Verfasst: Mo 15. Feb 2021, 13:58
von Ulrich
Mit einem Update stehen jedem die zusätzlichen Werte in dem Statistik Measurement zur Verfügung.