SQLite Berechnungen mit Daten aus vorangegangenen Einträgen

McKaiver

Neuer Benutzer
Beiträge
1
Hallo zusammen,

Ich habe mal eine Frage zum Berechnen per SQL bei SQLite.

Ich habe einen Gaszähler, der jede 0,01kWh einen Impuls generiert. Dieser wird von einem Raspberry Pi genommen und die Uhrzeit in eine SQLite Datenbank geschrieben.
Das möchte ich nun mit Grafana auswerten. Ich habe zwischendurch die Impulse pro minute gruppiert und habe so den Verbrauch pro minute bekommen. es stellt sich allerdings raus, das es sehr ungenau ist, da wenn ich 3,1 Impulse pro minute habe zählt er immer 3(1,8kWh/h) und dann beim 10. mal plötzlich 4(240kWh/h), obwohl es immer 3,1 sind.
Bei 3,2 impulsen pro minute ist es auch 3 und beim 5. mal 4

Wenn ich jedoch das Intervall nehme ist es sehr genau, wenn es 19,1s pro Interval ist, sind es 1,88kWh/h und wenn es 19,2s pro Intervall ist, sind es 1,875kWh/h
Also müsste ich nur zu einem Eintrag den vorherigen Eintrag raus filtern und 3600 durch die Zeitdifferenz in Sekunden teilen und am ende mit 0,01 multiplizieren.

Das überfordert meine Fähigkeiten bei weitem.

bis jetzt habe ich folgendes:
SQL:
SELECT STRFTIME('%d/%m/%Y', d.time) as Datum,
STRFTIME('%H:%M', d.time) as Uhrzeit,
  COUNT(CASE WHEN d.time like '%' THEN 1 END) As Verbrauch
FROM
  Data d
GROUP BY
  d.time

da kommt dann das raus:

11/10/2022 16:18 1
11/10/2022 16:20 1
11/10/2022 16:21 1
11/10/2022 16:23 1
11/10/2022 16:24 1
11/10/2022 16:26 1
11/10/2022 16:27 1

der Wert 1 müsste dann natürlich mit der Berechnung gefüllt werden, statt statisch mit 1.

36 / (Zeitwert dieser Spalte - Zeitwert der Spalte darüber)

Vielen Dank schon mal.
 
Werbung:
Ich habe Deine Ausführungen nicht verstanden. Könntest Du einfach aufführen, welche Daten Du gesammelt hast und welche daraus als Ergebnis dargestellt werden sollen.
Ggf. könntest Du auch das Statement das "ungenau" ist und die Intervall Variante einfach posten und man könnte schauen, was schief läuft. Wie gesagt, einfach mit echten Daten dazu, dann muss niemand Kopfrechnen.
 
Ps.:
Wenn Du auf andere Datensätze relativ zum "aktuellen" zugreifen musst, verwendest Du dazu die Funktionen Lag() und Lead().
Ich weiß nur nicht, ob das in Deinem Fall nötig oder sinnvoll ist, weil ich Dein Anforderung nicht verstehe.
 
Werbung:
@McKaiver, Deine Beobachtungen sind korrekt, aber wie können wir Dir helfen? Welche Funktion willst Du denn jetzt haben? Wenn Du Dich daran stört, dass es neunmal 3 statt 3,1und einmal 4 statt 3,1 ist, dann sollte man sich das Thema Genauigkeit mal ansehen. Man könnte z.B. einen gleitenden Durchschnitt über 10 Sekunden berechnen, aber dann sieht man halt auch mit einer Verzögerung von ca 10 Sekunden erst den Anstieg einer Kurve.
 
Zurück
Oben