Doppelte Werte von Geräten mit INDEX/CONSO ENERGETIQUE bereinigen

Hallo,
nach der Wiederherstellung der Werte eines MQTT-Geräts (Index/Energieverbrauch) und dessen Analyse hier sehe ich, dass für dieses Gerät 32.433 Werte vorliegen, die sich tatsächlich nicht ändern (wenn man den falschen Wert außer Acht lässt):



Natürlich habe ich etwa genauso viele Werte für jeden Tag dieses Index-Sensors (Tempo HP Jour Rouge), der sich über mehrere Monate nicht bewegt.
Ich wage nicht, mir vorzustellen, wie groß das in meiner DB sein muss, die bereits über 3 GB groß ist :thinking:

Könnte man für die Indizes, die sich nicht ändern, nicht einen Startwert (der erste des Tages) und einen Endwert (der letzte des Tages) haben, und zwar nur, wenn die Werte am Tag dieselben sind?

Allgemeiner gesagt, kann man bei den Indizes nicht nur die Werte speichern/behalten, die sich vom vorherigen Tag unterscheiden?

In der Praxis nimmt das kaum oder wirklich sehr wenig Platz ein :slightly_smiling_face:

DuckDB komprimiert automatisch identische Werte, was perfekt für diese Art von Zeitreihendaten geeignet ist:

Quelle: Lightweight Compression in DuckDB – DuckDB

Diese Art von Optimierung liegt eindeutig nicht in unserem Verantwortungsbereich: Das ist genau der Job von DuckDB, und er macht ihn sehr gut :wink:

:warning: Im Gegensatz dazu würde das bewusste Löschen ähnlicher Werte auf Gladys-Seite Informationen verlieren: Das Fehlen von Variation ist eine Information an sich. Darüber haben wir bei Gladys schon oft diskutiert, und ich war dieser Herangehensweise nie zugeneigt.

Jetzt, da wir DuckDB nutzen, das diesen Fall sehr effizient verwaltet, gibt es kaum noch Argumente dagegen, diese Daten zu behalten :grinning_face_with_smiling_eyes:

ok, dann ist das für mich in Ordnung, wenn es nicht mehr Platz einnimmt.
Aber selbst wenn DuckDB die Daten (die identisch sind) nur einmal speichert, muss es trotzdem den Zeitstempel speichern, der sich zu jedem Zeitpunkt unterscheidet…

Was mich am meisten beunruhigt (aber ich werde trotzdem gut schlafen, keine Sorge :wink: ), ist, dass ich mehr als 30.000 Daten pro Tag pro Index habe, auch wenn einige sich monatelang nicht ändern (die roten zum Beispiel) und das seit einem Jahr, das ist eine Menge Daten :sweat_smile:

Ich bin derselben Meinung.
Im speziellen Fall meiner Tempo-Indizes weiß ich, dass ich zwischen dem 01.04. und dem 31.08. niemals einen roten Tag haben werde, daher muss die Information des Wertes nicht gespeichert werden. Aber das betrifft nur mich, der teleinfo2mqtt verwendet, das eine JSON-Info über MQTT zurückgibt, bei der alle Informationen gesendet werden.

Wenn du DuckDB testen möchtest, versuche, 30k, 300k, 1 Million identische Werte in eine Testinstanz von Gladys einzufügen und vergleiche die Größe der Datenbank, um eine Vorstellung von der Größenordnung zu bekommen :slight_smile:

Warum 30k Daten pro Tag?
Was ist deine Datenquelle?

Bei mir ist mein Lixee so konfiguriert, dass er einen Wert pro Minute sendet.

30k/Tag, das sind 20 pro Minute, alle 3 Sekunden, das ist enorm. Brauchst du diese Präzision?

keine Ahnung :confused:

teleinfo2mqtt mit einem kabelgebundenen TIC von Lixee.

überhaupt nicht

Ich werde mit dem Entwickler von teleinfo2mqtt sprechen.

Und für die Datenbanktests weiß ich nicht, wie das geht.

Die LIXEE sind konfigurierbar, also solltest du das ändern können :slight_smile:

Gehe mindestens auf 60 Sekunden, nicht weniger. Selbst alle 5 Minuten, wenn du nicht so viel Präzision brauchst.

Ich habe mir gerade die Docker-Umgebungsvariablen angesehen und man kann die MQTT-Sendezeit zwischen den Payloads steuern, und ich hatte « alles senden » eingestellt, also habe ich jetzt ein Maximum eingestellt :wink:

Wenn ich mich nicht irre, wollte ich die Echtzeitentwicklung der Momentanleistung (PAPP) abrufen.

Nicht meins leider.