p4d: Platte voll weil Datenaggregierung nicht funktioniert hat

There are 41 replies in this Thread which was already clicked 1,014 times. The last Post () by Etaminator.

  • Hallo,


    weiß jemand, woran es liegt, wenn in die Log-Datei /var/log/p4d.log kein Eintrag mehr geschrieben wird?

    Der letzte Eintrag ist schon ein paar Monate alt.

    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Ist noch Platz auf dem Laufwerk?


    p4d läuft auf Proxmox.

    Ergebnis:

    Code
    $ df -H
    Filesystem                                   Size  Used Avail Use% Mounted on
    /dev/mapper/pve-vm--101--disk--0              28G   25G  1,6G  95% /
    none                                         504k  4,1k  500k   1% /dev
    efivarfs                                     394k  100k  289k  26% /sys/firmware/efi/efivars
    tmpfs                                         11G     0   11G   0% /dev/shm
    tmpfs                                        4,2G  156k  4,2G   1% /run
    tmpfs                                        5,3M     0  5,3M   0% /run/lock
    tmpfs                                        2,1G  8,2k  2,1G   1% /run/user/1000



    EDIT:

    p4d läuft seit 5-6 Jahren.

    Die p4d Datenbank hat 18 GB.

    Ist das normal?

    Oder kann/soll/muss man die mal komprimieren?


    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Eigentlich sollte eine automatische Zusammenfassung der Daten erfolgen. Unter "Konfiguration" gibt es dafür die Punkte:


    "Intervall der Aufzeichnung" - alle wieviel Sekunden sollen Meßwerte aufgezeichnet werden (Standard 60)

    "Historie [Tage]" - das ist die Anzahl Tage, für die Meßwerte im obigen Intervall vorliegen. Alles was älter ist, wird zusammengefaßt (Standard 365).

    "Aggregate Intervall der historisierten Daten [m]" - die Daten werden auf dieses Intervall zusammengefaßt (Standard 15).


    Kannst ja mal Deine Werte anschauen und prüfen, ob ältere Werte tatsächlich nur noch im "Aggregate Intervall" vorliegen. Ich finde die Größe Deiner Datenbank ziemlich hoch.

    Meine "samples" Tabelle ist ca. 1,5GB groß und hat Daten seit Mitte August 2025. Bei mir liegen alle Daten noch im Intervall von einer Minute vor , weil noch keine 365 Tage rum sind. Bei 365 Tagen wird der benötigte Speicher für diese Daten auf ca. 2,25GB angewachsen sein. Die aggregierten Daten benötigen dann nur noch ein Fünfzehntel des Platzes, also ca. 150MB pro Jahr. Bei 6 Jahren sollte das dann eine Gesamtmenge von ca. 3GB ergeben.

  • Eigentlich sollte eine automatische Zusammenfassung der Daten erfolgen. Unter "Konfiguration" gibt es dafür die Punkte:


    "Intervall der Aufzeichnung" - alle wieviel Sekunden sollen Meßwerte aufgezeichnet werden (Standard 60)

    "Historie [Tage]" - das ist die Anzahl Tage, für die Meßwerte im obigen Intervall vorliegen. Alles was älter ist, wird zusammengefaßt (Standard 365).

    "Aggregate Intervall der historisierten Daten [m]" - die Daten werden auf dieses Intervall zusammengefaßt (Standard 15).

    Meine Einstellung ist Standard.


    "Intervall der Aufzeichnung" - 60 (Standard 60)

    "Historie [Tage]" - 365 (Standard 365)

    "Aggregate Intervall der historisierten Daten [m]" - 15 (Standard 15)

    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Kannst ja mal Deine Werte anschauen und prüfen, ob ältere Werte tatsächlich nur noch im "Aggregate Intervall" vorliegen. Ich finde die Größe Deiner Datenbank ziemlich hoch.

    Danke für den Tipp.

    Und ja, Du hast Recht. Der "Aggregate Intervall" funktioniert bei mir nicht.


    Wie kann ich das lösen bzw. das Zusammenfassen der alten Daten neu starten?


    Hier mal zwei Beispiele der Außentemperatur aus Januar 2025 und Januar 2024.



    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Der "Aggregate Intervall" funktioniert bei mir nicht.

    Ich weiß natürlich nicht, wie Aggregate umgesetzt wurde.

    Es gibt in MariaDB "Aggregate Functions".

    Aber das ist mir im Moment zu hoch.


    Man kann sich vorhandene "Functions" anzeigen lassen.

    Da scheint aber keine "Aggregate Function" dabei zu sein.

    MariaDB [mysql]> SHOW FUNCTION STATUS\G


    Mal sehen, ob mir hier jemand weiterhelfen kann. :/

    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Der P4D Code hat eine Funktion, welche die Zusammenfassung anstößt, wenn das Zeitkriterium erfüllt ist.


    Es gibt aber unter "/usr/local/bin" auch ein Skript "aggregate-samples-manual.sh", welches die gleiche Funktionalität beinhaltet. Das könntest Du nutzen.

  • Es gibt aber unter "/usr/local/bin" auch ein Skript "aggregate-samples-manual.sh", welches die gleiche Funktionalität beinhaltet. Das könntest Du nutzen.

    Ich habe mir das Skript /usr/local/bin/aggregate-samples-manual.sh angeschaut.


    Die SQL-Statements darin habe ich erst mal direkt in der Datenbank ausgeführt.

    Und auch nur für Daten älter als 01.01.2021. p4d läuft bei mir seit ca. Juli 2020.

    Also hätte es ca. 6 Monate betroffen.

    Aber es kam ein Fehler, weil die Partition zu klein war und die MariaDB keinen Platz hatte, um tmp-Daten zu erstellen.

    Also wurde die Partition vergrößert, jetzt sind 6 GB frei.


    Nun habe ich den Zeitbereich erst mal verkleinert auf 6 Stunden von 09.09.2020 12:00 Uhr bis 09.09.2020 18:00 Uhr

    time > "2020-09-09 12:00:00"

    time < "2020-09-09 18:00:00"


    Hier vorab mein Fazit:

    Die Aggregate-Funktion in der Datei /usr/local/bin/aggregate-samples-manual.sh scheint nicht zu funktionieren.



    Ausführliche Beschreibung ab hier.

    Das Ergebnis aller SQL-Statements ist zusätzlich in der separaten Datei "p4d_Aggregate_samples_Ergebnis.sql" zu sehen.


    Es wurden folgende SQL-Statement ausgeführt.


    1. SQL-Statement

    Vor Aggregate ermitteln, wie viele Datensätze der Außentemperatur für den Zeitraum vorhanden sind.

    Ergebnis sind 240 Datensätze Außentemperatur.

    Code
    select * from samples
    where address = 4 and type = "VA"
    and time > "2020-09-09 12:00:00"
    and time < "2020-09-09 18:00:00"
    order by time asc;
    
    
    240 rows in set (0,005 sec)


    2. SQL-Statement

    Datensätze für Aggregate ermitteln und mit aggregate='A' markieren.


    3. SQL-Statement

    Nach dem Markieren der Datensätze für Aggregate ermitteln, wie viele Datensätze der Außentemperatur für den Zeitraum vorhanden sind.

    Ergebnis sind plötzlich 470 Datensätze Außentemperatur.

    Code
    select * from samples
    where address = 4 and type = "VA"
    and time > "2020-09-09 12:00:00"
    and time < "2020-09-09 18:00:00"
    order by time asc;
    
    
    470 rows in set (0,005 sec)


    4. SQL-Statement

    Datensätze löschen, die nicht für Aggregate benötigt werden.

    Bedingung: aggregate != 'A'

    Code
    delete from samples
    where aggregate != 'A'
    and time > "2020-09-09 12:00:00"
    and time < "2020-09-09 18:00:00";
    
    
    Query OK, 11040 rows affected (0,568 sec)


    5. SQL-Statement

    Nach Aggregate ermitteln, wie viele Datensätze der Außentemperatur für den Zeitraum vorhanden sind.

    Ergebnis sind 230 Datensätze Außentemperatur.

    Es wurden also nur 10 Datensätze innerhalb von 6 Stunden gelöscht.

    Das ist sicher viel zu wenig.

    Code
    select * from samples
    where address = 4 and type = "VA"
    and time > "2020-09-09 12:00:00"
    and time < "2020-09-09 18:00:00"
    order by time asc;
    
    
    230 rows in set (0,002 sec)
  • pellet-heizer


    Kannst Du mir mal bitte ein paar ältere Daten zeigen, bei denen Aggregate bereits lief.

    Gerne von der Außentemperatur.

    Hier das SQL-Statement dazu, Datum ggf. anpassen:

    Code
    select * from samples
    where address = 4 and type = "VA"
      and time > "2024-10-09 12:00:00"
      and time < "2024-10-09 18:00:00"
    order by time asc;


    Ich habe vermutlich den Fehler im Skript /usr/local/bin/aggregate-samples-manual.sh gefunden.

    Das Skript fasst die Datensätze alle 15 Sekunden zusammen und nicht alle 15 Minuten.

    Es fehlt die Umrechnung von Sekunden auf Minuten (x 60).


    SELECT-Syntax aus dem Skript (Mit Fehler, weil Aggregate 15 Sekunden):

    Code
    select address, type, 'A' as aggregate,
      CONCAT(DATE(time), ' ', SEC_TO_TIME((TIME_TO_SEC(time) DIV 15) * 15)) + INTERVAL 15 MINUTE time,
      unix_timestamp(sysdate()) as inssp, unix_timestamp(sysdate()) as updsp,
      round(sum(value)/count(*), 2) as value, text, count(*) samples
    from samples
    where aggregate != 'A'
      and time > "2020-10-09 12:00:00"
      and time < "2020-10-09 18:00:00"
      and address = 4 and type = "VA"
    group by CONCAT(DATE(time), ' ', SEC_TO_TIME((TIME_TO_SEC(time) DIV 15) * 15)) + INTERVAL 15 MINUTE, address, type;


    SELECT-Syntax angepasst auf Aggregate 15 Minuten:

    Code
    select address, type, 'A' as aggregate,
      CONCAT(DATE(time), ' ', SEC_TO_TIME((TIME_TO_SEC(time) DIV (15 * 60)) * (15 * 60))) + INTERVAL 15 MINUTE time,
      unix_timestamp(sysdate()) as inssp, unix_timestamp(sysdate()) as updsp,
      round(sum(value)/count(*), 2) as value, text, count(*) samples
    from samples
    where aggregate != 'A'
      and time > "2020-10-09 12:00:00"
      and time < "2020-10-09 18:00:00"
      and address = 4 and type = "VA"
    group by CONCAT(DATE(time), ' ', SEC_TO_TIME((TIME_TO_SEC(time) DIV (15 * 60)) * (15 * 60))) + INTERVAL 15 MINUTE, address, type;

    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Kann ich nicht, weil meine Daten noch nicht älter als 365 Tage sind.

    OK, schade.

    Vll. meldet sich ja noch jemand anderes.

    Ich würde es gerne verifizieren, bevor ich das von mir auf 15 Minuten Aggregate angepasste Skript /usr/local/bin/aggregate-samples-manual.sh loslaufen lasse.


    Mein p4d läuft jetzt 6 Jahre und ich habe festgestellt, dass noch kein einziger Datensatz mit Aggregate bearbeitet wurde.

    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Hallo meute,


    du könntest dein neues SQL-Statement nochmal auf einen anderen 6-Stundenbereich anwenden und das Ergebnis wieder posten. Schlimmeres wird nicht passieren. ;)


    Du bist auf der richtigen Spur, ich in mir aber nicht sicher, ob die Gruppierung und Aufsummierung so funktioniert. Mangels p4d-Umgebung kann ich es nur theoretisch vermuten. Die neuen Ergebnisse könnten dabei helfen, dies zu bestätigen oder zu widerlegen... :/


    Nachtrag:

    Wenn du, wie oben gepostet, den Befehl "select count(*), ... from samples where address = 4 and type = "VA" and ... group by ..." leicht ergänzt und ohne das vorangestellte "replace into samples" laufen lässt, erhälst du die Vorschau auf das zu erwartende Ergebnis, ohne die Daten gleich in die Tabelle zu schreiben.


    Der Ausdruck "count(*)" hilft zu beurteilen, wie viele Zeilen pro Gruppe (Zeitintervall) tatsächlich aggregiert wurden.

    Die weiter eingrenzende where-Bedingung verkleinert die Datenmenge und zeigt nur die (Außentemperatur-) Daten, auf die es bei diesem Test ankommt.


    Viele Grüße von Karlheinz :)

    Seit Juni 2011:

    ETA Twin: SH30/P25 "noTouch" (Füllraum 150 Liter)

    Hopf Pelletaustragung: 6x UniWok-Saugsonden (Selbstbaulager für 6 to)

    Paradigma Pufferspeicher: 2x Aqua Expresso (1090 + 958 Liter; seriell verbunden)

    Paradigma FrischWasserStation

    Paradigma VRK-Anlage: 2x CPC21 Star Azzurro Solarpanel (10m²; Aqua-System ohne Glykol)

  • Hier sind meine Daten aus dem letzten Jahr. Sie sind, wie erwartet, in 15-Minuten-Intervalle aggregiert. Ein Blick auf das Diagramm für denselben Zeitraum zeigt ebenfalls ein Abtastintervall von 15 Minuten. Ich verwende Version 0.11.7-GIT4d1176c. Meine Außentemperatur liegt auf Adresse 8 statt auf 4 (S3 Turbo).


    In meinem Aggregationsskript (/usr/local/bin/aggregate-samples-manual.sh) ist der Wert 15 nicht fest einprogrammiert (hard-coded); es handelt sich um eine Variable, die an das Skript übergeben wird. Ich weiß nicht, ob Sie in Ihrem Code-Beispiel die Variable durch „15“ ersetzt haben oder ob dieser Wert dort fest einprogrammiert ist.

    Code
    echo "replace into samples
                 select address, type, 'A' as aggregate,
                   CONCAT(DATE(time), ' ', SEC_TO_TIME((TIME_TO_SEC(time) DIV ${INT}) * ${INT})) + INTERVAL 15 MINUTE time,
                   unix_timestamp(sysdate()) as inssp, unix_timestamp(sysdate()) as updsp,
                   round(sum(value)/count(*), 2) as value, text, count(*) samples
                 from
                   samples
                 where
                   aggregate != 'A' and  time <= '${DATE}'
                 group by CONCAT(DATE(time), ' ', SEC_TO_TIME((TIME_TO_SEC(time) DIV ${INT}) * ${INT})) + INTERVAL 15 MINUTE, address, type;" | mysql -u p4 -pp4 -Dp4
  • In meinem Aggregationsskript (/usr/local/bin/aggregate-samples-manual.sh) ist der Wert 15 nicht fest einprogrammiert (hard-coded); es handelt sich um eine Variable, die an das Skript übergeben wird.


    Bei mir steht im Skript /usr/local/bin/aggregate-samples-manual.sh natürlich auch die Variable ${INT} drin.

    Aber wie oben geschrieben, erfolgt damit Aggregate auf 15 Sekunden und nicht 15 Minuten.

    Es fehlt der Faktor 60



    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Danke erst Mal für Eure Unterstützung und Denkanstöße.


    Ich habe jetzt folgendes gemacht.

    Das erste halbe Jahr time < "2021-01-01" habe ich manuell mit meiner angepassten Syntax bearbeitet.

    Das hat funktioniert.


    Dann hat aber über Nacht p4d automatisch begonnen, alle Daten von 2021-01-01 bis Mai 2025 (Mai 2026 minus 365 Tage) mit Aggregate zu bearbeiten.

    Damit lief aber meine Partition voll und Aggregate ist abgebrochen.

    Das MYSQL-Datenbankfile samples.ibd ist sehr groß geworden.


    Danach habe ich die neuen Aggregate-Werte alle wieder gelöscht.

    Code
    delete from samples
    where aggregate = 'A'
      and time >= "2021-01-01";

    Dann die Partition um 2 GB vergrößert

    Dann den Parameter "Historie [Tage]" = 1500 gesetzt.


    Am nächsten Tag waren alle alten Werte bis Anfang 2022 als Aggregate-Werte vorhanden.

    Das hat also schon mal funktioniert.


    Jetzt ist der Parameter "Historie [Tage]" = 1200 gesetzt.

    Mal sehen, was heute Nacht passiert.

    Es müssten morgen Aggregate-Werte bis Ende 2022/Anfang 2023 vorhanden sein.

    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Hallo meute,


    wenn das Aggregation-Bereinigung-script manuell aufrufst z.B. mit den zwei Parametern Datum(2021-01-01) und Zeitintervall(900)


    z.B ./aggregate-samples-manual.sh 2021-01-01 900


    das funktioniert auch und aggregiert in 15 Minuten-Zeitintervallen. (900 sind die 15Minuten in 900Sekunden umgerechnet).

    Dann brauchst im Original-script (aggregate-samples-manual.sh) nix ändern.


    Vielleicht kannst in der Konfiguration in der nächste Zeile nach dem Parameter "Historie [Tage]"

    --> "danach aggregieren über " die bisherigen 15 mit 900 überschreiben.


    Gruß

    Jürgen

    Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44, BL-NET und CMI ;
    2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; zentrale Wasserenthärtung;

    PV 3,2 kWp EEG; PV-Insel 6 kWp mit Victron MultiPlus-II 48/5000/70-50 und 8 x PylonTech LiFePo4 Modul 48V 2,4 kWh US2000 mit BMS; Victron Cerbo-GX;

    Herkules SE 5000 DF DIESEL Elektrostart Stromerzeuger Generator 2x220V-1x380V, Dauerleistung 4.200 Watt, 11 Stunden Dauerbetrieb, Tankinhalt 13,3 l

  • Hallo,


    ich habe diese Problemstellung aus dem großen p4d-Thema in dieses separate Thema verschoben - ich hoffe, das ist für meute und die anderen Beteiligten in Ordnung.


    Zu dem Script:

    Da das Script bei OffGridICF ohne Änderungen funktioniert, muss es bei meute an der Programmversion liegen (sofern das Script direkt aus dem p4d-Programm aufgerufen wird und nicht über andere Mechanismen).


    Ich finde es auch nicht weiter schlimm, wenn das Script lokal angepasst wird, wenn es dann wie gewünscht funktioniert. Man muss beim Update ggf. daran denken.


    Meine Einstellung ist Standard.

    ...

    "Aggregate Intervall der historisierten Daten [m]" - 15 (Standard 15)

    Für mich ist es eh' unlogisch, das "Aggregate Intervall" per Parameter einstellen zu können, der dazu passenden Offset jedoch fest hinterlegt ist (+ INTERVAL 15 MINUTE). Bei anderen Einstellungen als 15 Minuten bzw. 900 Sekunden, führt das zu unschönen Nebeneffekten.


    Warum dieser Offset von 15 Minuten überhaupt eingeführt wurde ist mir auch unklar. Das ist m.E. gar nicht erforderlich, sondern sogar kontraproduktiv, weil dadurch die Daten in den ältesten 15 Minuten der Tabelle samples nie aggregiert werden? Das merkt man aber vermutlich gar nicht, weil das darauf folgende "Delete" alle "S"-Sätze bis zum Ende wegputzt (egal ob aggregiert oder nicht):

    Code
    delete from samples where aggregate != 'A' and time <= '${DATE}'

    Das alles ist auch gar nicht weiter schlimm, stört aber meinen inneren Monk. :saint:


    Viele Grüße von Karlheinz :)

    Seit Juni 2011:

    ETA Twin: SH30/P25 "noTouch" (Füllraum 150 Liter)

    Hopf Pelletaustragung: 6x UniWok-Saugsonden (Selbstbaulager für 6 to)

    Paradigma Pufferspeicher: 2x Aqua Expresso (1090 + 958 Liter; seriell verbunden)

    Paradigma FrischWasserStation

    Paradigma VRK-Anlage: 2x CPC21 Star Azzurro Solarpanel (10m²; Aqua-System ohne Glykol)

  • Jetzt ist der Parameter "Historie [Tage]" = 1200 gesetzt.

    Mal sehen, was heute Nacht passiert.

    Es müssten morgen Aggregate-Werte bis Ende 2022/Anfang 2023 vorhanden sein.

    Heute sind alten Werte bis Anfang Januar 2023 als Aggregate-Werte vorhanden.

    Aggregate automatisch über Nacht funktioniert also immer noch.

    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Ja, OK, so funktioniert es natürlich auch.

    Aber der Intervall wird ja in Minuten und nicht Sekunden angegeben. Zumindest in der GUI ist das so.


    Ich habe im Skript /usr/local/bin/aggregate-samples-manual.sh nichts angepasst.

    Ich habe das SQL-Statement manuell ausgeführt.

    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!