Frage zu GetAggregatedValues

Hallo

Ich habe eine Frage zum GetAggregatedValues

Ich habe folgendes Script geschrieben ( Bild 1 )

Wenn ich mir dazu den Grafen anschauen habe ich immer zum Zeitpunkt der Berechnung ein Peak

Wo liegt mein Fehler ?
Vielen Dank.


Ich verstehe ehrlich gesagt gar nicht, was du da vor hast.

Du fragst die 5-Minuten-Intervalle der letzten halben Stunde ab. Und (Über)schreibst dann in einem Rutsch eine andere Variable mit den Durchschnittswerten in umgekehrter Reihenfolge.

Was bezweckst du damit? Warum schreibst du die Daten nicht direkt ins Archiv der anderen Variable, was ja scheinbar dein Ansinnen ist. Und was nützt dir die umgekehrte Reihenfolge der Werte und dann noch alles zur selben Zeit?

Hallo

Ich habe mir aus dem Forum was zusammengesucht kann gut sein das dass alles Unsinn ist

Was ich erreichen möchte

Ich möchte alle 15 min 1x den Durchschnittswert der Variablen ( Temperatur) der letzten 15min in eine Andere Variable schreiben.
Um dort die vielen kleinen Temperaturen Schwankungen der Wetterstation zu reduzieren um Heizung und co nicht zu häufig neu zu berechnen

Das wird aber so nicht funktionieren, wie du das machst. Das fängt ja schon damit an, dass dein Abfragezeitraum/Intervall nicht passt.

Da es keine 15-Minuten-Durchschnittswerte gibt, müsstest du die für die letzten 15 Minuten (nicht 30 wie bei dir) selbst berechnen. Ob du das auf Basis von 5-Minuten-Intervallen, 1-Minuten-Intervallen oder Rohdaten machst, musst du dir überlegen.

Am Ende darf aber nur ein Wert rauskommen, den du dann zur korrekten Zeit in die Variable schreibst. So wie du es aktuell gelöst hast, schreibst du zum Ausführungszeitpunkt immer 6 Werte für dieselbe Uhrzeit (und das in der falschen Reihenfolge).

Alternativ kannst du die Werte natürlich auch zu einem beliebigen Zeitpunkt und auch für einen längeren Zeitraum berechnen und dann mit den jeweils passenden Zeiten ins Archiv der anderen Variable schreiben. Dann passt dein Graph, allerdings zeigt dir die Variable dann nicht den letzten (aktuellsten) Wert an.

Das Ausdünnen der Archivdaten für die ursprünglichen Variable ist keine Option?

Ok
Wie würde es denn funktionieren ?

Temperatur Durchschnitt von 15min auslesen

und einmal in die Zielvariable schreiben fertig

Das würde ich dann alle 15min ausführen lassen

Als Anfänger in diesen IPS-PHP-Themen habe ich das ganz banal gelöst in dieser Art:

$Mittelwert = ($werte[0]['Avg'] + $werte[1]['Avg'] + $werte[2]['Avg']) / 3;

wenn $werte die Rückgabe der 5-minütigen aggregierten Mittelwerte ist. Das addiert die drei aktuellsten Mittelwerte und teilt die Summe durch 3.

So wie @volkerm schreibt, kannst du das machen.
Es gibt natürlich viele Wege, wie man es lösen kann.

Du solltest bei deinem Vorhaben nur bedenken, dass du den berechneten Durchschnitt zum Ende des betrachteten Zeitraums in die neue Variable schreibst. Wenn du also den Durchschnitt von 10:00 Uhr bis 10:15 Uhr berechnest, schreibst du den Durchschnitt zum Zeitpunkt 10:15 Uhr zurück.

Außerdem solltest du min. 1 Minute Puffer nach oben bei der Ausführung deines Skriptes einkalkulieren, da es sonst passieren kann, dass der letzte Wert im Archiv noch nicht verfügbar ist. Dann würdest du im o.g. Beispiel den Durchschnitt von 09:55 Uhr bis 10:10 Uhr berechnen und um 10:15 Uhr schreiben.

Vielen Dank für deinen Ansatz

Das ist genau der richtige Gedanke,
Ich melde mich erst so spät darauf zurück weil ich es gerne selber damit weiter kommen wollte

Leider habe ich es nicht geschafft $Werte richtig zu füllen.

Wie trage ich dort meinen Variablen und Archiv ein ?
Bzw wie sieht mein
GetAggregatedValues Aus damit in $Werte die Daten stehen ?

Vielen Dank

Ja genau
Und um 10:30 dann den Durchschnittswert zwischen 10:15-10:30
Passt das möchte ich

P.s die Minute Puffer Plan ich gern ein

Genau so wie du es bereits oben gepostet hattest!

Für dein Verständnis hilft vielleicht ein var_dump() im Code, um erstmal die Struktur von $werte zu sehen. Das kannst du im Scripeditor ausführen und anschauen. Die Rückgabe der aggregierten Werte ist ein Array mit den Werten des von dir gewählten Zeitraums, bei der 5-minütigen Aggregation sind das 6 oder 7 Datensätzen entsprechend 30 Minuten.

Jeder dieser Datensätzen enthält wiederum mehrere Werte, darunter Zeitstempel und den gesuchten Mittelwert.

Für deinen Mittelwert über 15 Minuten möchtest du die neuesten drei Datensätze nutzen, und zwar jeweils den Mittelwert des 5-Minuten-Intervalls. Das ist der Index [‚Avg‘].

$Mittelwert = ($werte[0]['Avg'] + $werte[1]['Avg'] + $werte[2]['Avg']) / 3;

Alles klar?

PS: Da du nur die Datensätze über 15 Minuten benötigst kann man den Abfrage-Zeitraum in der ersten Scriptzeile (30 * 60 Sekunden) noch verkürzen, aber zwingend ist das nicht.

Danke

Ich habe es heute geschafft,
Es lag bei mir auch wieder an vergessen ) und ;

Vielen Dank für eure Hilfe,
Konnte es auch schon auf einige andere Berechnungen anpassen/ übertragen