Hallo XXLRay,
Zitat
Minütlicher Mittelwert ist ja noch nicht so das Problem. Meine Anmerkungen waren eher darauf bezogen, den jährlichen weder aus 365*24*60*60 Messwerten auf einmal noch aus Mittelwerten berechnen zu müssen. Wo man die Daten speichert ist letzenendes ja Latte. Die Listen waren nur ein Beispiel. Grundsätzlich haben wir also die gleiche Idee.
Initialisieren würde ich die Werte einfach mit den Werten, die vorhanden sind. Hat man also erst einen Wert geloggt, haben alle Mittelwerte genau diesen Wert.
Sorry, ich habe dich dann noch nicht verstanden, woraus willst du denn z.B. den Jahresmittelwert berechnen?
Das der PI ein Jahr lang durchläuft, ohne zu booten halte ich für illusorisch.
Um den PI auf dauer stabil zu bekommen, ist ein Linux als Betriebssystem schon der richtige Ansatz.
@vitis, du solltest zusätzlich noch einen watchdog einplanen. Das kann z.B. der Controller machen,
wenn vom PI z.B. Minuten lang keine Datenanfrage bekommt, dann löst er einen Reset beim PI aus.
(tritt dem PI mal kräftig in den Arsch, hihi) und umgekehrt wäre auch ganz gut, hihi.
Die Zeit muss groß genug gewählt werden damit man den PI nicht während dem Booten abwürgt.
Das kann, ggf. länger dauern, wenn der PI einen Filesystem Check macht ...
Im Fehlerfall verliert man so dann nur ein paar Minuten die Messwerte und
nicht solange bis man manuell rebootet.
Wie auch immer damit man möglichst wenig Daten durch einen Boot verliert sollte man die Daten möglichst häufig,
eben jede Sekunde ins Filesystem schreiben und auch z.B. jede Minute syncen.
Also sagen wir mal einfach wir wollen folgende Mittelwerte zur Verfügung stellen:
Jahresmittel (1 Datensatz pro Jahr) Datei years.log
Tagesmittel (max 366 Datensätze pro Jahr) Datei 2013_days.log
Soweit ist das ja noch übersichtlich
Stundenmittel (max 8.760 Stunden pro Jahr, 744 pro Monat)
hmm, hier würde ich schon für jeden Monat eine Stundendatei nehmen:
Dateien 2013_01_hours.log, 2013_02_hours.log, 2013_03_hours.log ...
Minutenmittel (hier würde ich pro Tag eine Datei (1440 Datensätze) anlegen: 2013_01_01_minutes.log, 2013_01_01_minutes.log
Sekundenwerte (hier sogar pro Stunde eine Datei (3600 Datensätze): 2013_01_01_01_seconds.log, 2013_01_01_01_seconds.log
Regelfall ist es:
Der PI kommt hoch (hat gebootet) z.B. am 2013_09_27, Freitag, KW 39, 21:03:17 und es liegen schon Dateien da.
Für Jahres, Tagesmittel, macht es kaum Sinn hier eine fließende Mittlung durchzuführen.
Wenn ein voller Tag um ist: 00:00, kann man auch über die 24 Datensätze in der Stundendatei laufen und das letzte Tagesmittel berechnen.
Bei fester Datensatzgröße (ist anzustreben) kann man dann auch (fast) direkt zu den relevanten 24 aus 744 Datensätzen springen.
Das gleiche Silvester, dann läuft man halt über die Tagesdatei (366) Datensätze.
Wenn ich es mir so recht überlege, macht fließende Mittlung im RAM, eigentlich nur Sinn für Minuten und maximal Stundenmittel.
Das Minuten Mittel basiert dabei auf 60 Sekunden Werten.
Das Stundenmittel kann wahlweise auf 3600 Sekunden Werten oder 60 Minuten Werten basieren.
Beim Minutenmittel könnte man auf Initialisierung aus dem Filesystem verzichten.
Beim Stundenmittel leider nicht, daher besser keinen fließenden Mittelwert für die Stunde bilden.
Im Grunde sehe ich da schon mindestens zwei Programme:
Ein Programm was die Messwerte abholt, sekündlich wegschreibt, Mittelwerte bis zum Minutenmittel produziert und wegschreibt.
Ein anderes Programm was auf dem Dateisystem arbeitet (lesen/schreiben), Stundenmittel, Tagesmittel, Jahresmittel produziert.
Auch sollte das Programm vielleicht kontrollieren, ob Mittelwerte fehlen, weil z.B. um 00:00 zufällig aus war oder so und nach berechnen.
Auch muss die Partition überwacht werden und bevor die voll läuft muss man ältere Daten Zippen oder ganz alte Sekunden Werte sogar löschen.
Vielleicht das drittes Programm.
Gruß Frank