Ach so...
udo1toni hat geschrieben: ↑26. Jun 2023 20:18
ob es der richtige Wert ist, steht aber auf einem anderen Blatt.
GANZ wichtig, wenn wir von rrd4j reden... rrd4j ist eine RoundRobin Datenbank, das heißt, es überschreibt die ältesten Werte mit den neuesten Werten, um die Datenbank immer auf der gleichen Größe zu halten
Ein weiterer Punkt bei rrd4j ist aber auch, dass man auf der einen Seite eine hohe Auflösung für die letzten Werte haben möchte, auf der anderen Seite aber möglichst weit in die Vergangenheit schauen möchte. Nehmen wir an, wir speichern einen Wert pro Minute, dann sind das 60 * 24 * 365 Werte pro Jahr, also 525.600 Werte, und für jeden Wert muss ein Zeitstempel und der Wert (mindestens als Float) gespeichert werden. Ohne leistungsfähige Kompression kommen wir damit auf etwa 4 MByte pro Item, und im Grund verbietet sich eine Kompression, weil dann die Dateien ständig aus- und eingepackt werden müssen, bei jedem Speichervorgang, bei jedem Lesevorgang.
Also verfolgt rrd4j einen anderen Ansatz, und das ist Datenreduktion. Es gibt mehrere Level (genaue Werte kann man konfigurieren, der Einfachheit halber denke ich mir hier mal Werte aus), z.B. ein Wert pro Minute für die letzten 24 Stunden (1440 Werte), ein Wert pro Stunde für die letzten 2 Monate (1440 Werte bei 2 * 30 Tagen) und ein Wert pro 6 Stunden für die letzten 365 Tage (1464 Werte), macht 4344 Werte insgesamt oder etwa 34 KByte pro Item (ohne weitere Kompression).
Jetzt gibt es nur ein Problem... Welchen Wert soll rrd4j für die ausgedünnten Werte nehmen? Da gibt es verschiedene Optionen und es gibt jeweils Argumente für die Optionen, die wären:
- erster Wert der Zeitspanne
- letzter Wert der Zeitspanne
- mittlerer Wert der Zeitspanne
- Durchschnittswert der Zeitspanne
Keine Ahnung ob man das anders konfigurieren könnte (ich habe mich nicht so intensiv mit rrd4j beschäftigt), aber openHAB nutzt gewöhnlich den Durchschnittswert. Im Beispiel errechnet rrd4j also stündlich einen Durchschnittswert der letzten 60 Minuten und speichert diesen in der Stundentabelle ab, alle sechs Stunden errechnet es den Durchschnittswert der letzten 360 Minuten und speichert diesen Wert in der 6-Stunden-Tabelle ab.
Wie bei der Minutentabelle auch wird jeweils der älteste Wert gelöscht.
So. Und nun kommst Du, und möchtest den Zählerstand vom Monatsersten, 0:00 Uhr als Referenz nutzen, um den Monatsverbrauch abzulesen. Es sollte klar sein, dass sich der Zählerwert vermutlich ändert, wenn rrd4j den Wert nicht mehr aus der Minutentabelle beziehen kann, sondern die Stundentablle nutzen muss.
Unterm Strich wäre also der korrekte Weg, eine Datenbank zu verwenden, welche den Daten (wesentlich) mehr Platz einräumt.