Durchschnittliche Temperatur in einem definierten Zeitfenster auslesen

Hallo,

ich versuche bereits den Vormittag aus meiner geloggten Temperaturaufzeichnung (Homematic, Aussenfühler) die durchschnittliche Temperatur zwischen 06 Uhr Morgens und 22 Uhr Abends zu ermitteln. Dazu habe ich den nicht dokumentieren Befehl AC_GetAggregatedValues versucht zu verwenden.

Beim Parameter 0(Stunden) gibt mir das Script dann eine Vielzahl an Array Einträgen und bei Parameter 1 (Tag) zwar einen, ich kann wohl diesen Parameter nicht auf die Zeit von 6 bis 22 Uhr begrenzen? (Es kommt kein Array zurück…)

Irgendwie habe ich mich festgefressen, oder muss ich wirklich auf Stundenbasis aggregieren und dann einen Loop über die Stundenwerte (AVG) durchführen um daraus wiederum das Mittel zu errechnen???

Für eine kleine Unterstützung wäre ich sehr dankbar.

LG
Jürgen


<?
// Versuch die durchschnittliche Aussentemperatur aus einer definierten Zeit-
// differenz zu ermitteln


$archiveID = (11004 /*[Archive Handler]*/);       // Archive-Handler-ID
$objectID  = (35833 /*[Homematic\Temperatur & Klima\Dummy Temperatur\Aussen\Aussenthermometer]*/) ;

// Zeitrahmen für die Durschnittsberechung
$start_heute        = mktime(06,00,0, date("m"), date("d"), date("Y")); //Startzeit heute
$ende_heute         = mktime(22,00,0, date("m"), date("d"), date("Y")); //Endzeit heute


//$buffer = AC_GetLoggedValues($archiveID, $objectID, $start_heute, $ende_heute, 0);

//0 = Aggregation auf Stundenbasis, liefert dann natürlich n Werte
//1 = Aggretation auf Tagesbasis, liefert für das Zeitintervall kein Array zurück,
// Beginn-Zeit muss auf 0.00 uhr sitzen...
$buffer = AC_GetAggregatedValues($archiveID, $objectID, 1,$start_heute, $ende_heute, 100);



//echo $buffer[0]['Value'];
print_r($buffer);






?>

hi Juwo,

bei AC_GetAggregatedValues kannst du immer nur ganze, abgeschlossene Perioden auslesen. Bei Stunden immer von Minute 00-59, bei Tagen von 00:00 Uhr bis 23:59Uhr usw. Eine Bgrenzung des Zeitfensters greift hier nicht.

Hallo,

den Wert Tag kann man nicht rückwärts wieder in Stunden aufteilen.
Die Datenbank hat eine Tagestabelle wie z.B.:
01.10 23.5 C°
02.10 21.4 C°

Die Stunden Tabelle sieht dann ähnlich aus.
00 23.3 C°
01 19.3 C°

Du musst also die Stunden nehmen und dort noch mal die Durchschnitt berechnen.
Du musst aber noch drauf achten wie viele Werte du überhaupt hast, um den richtigen Durchschnitt zu erhalten.
Es werden nur werte in die DB geschrieben wenn sich der Wert ändert. Ändert sich die Temperatur nur 2 mal hast du auch nur 2 Einträge.

Schöne Grüße
Thomas

…oder er nimmt gleich den stündlichen AVG-Wert, summiert den auf und teilt ihn durch die Anzahl der Stunden. Solange der stündliche AVG in der DB ein gewichteter Wert ist (und davon gehe ich aus, wissen tu ich es allerdings nicht), passt das Vorgehen

Hallo Raketenschnecke, hallo Thomas,

vielen Dank für Eure Antworten, genau der letzte Tipp, also die Stundenwerte nehmen und durch die Anzahl teilen war mein Ansatz, nur wusste ich nicht, dass es in IPS keine „fertige“ Funktion dafür gibt.

Vielen Dank für Eure Hilfe !!

LG
Jürgen

Die Frage ist, was genau du erreichen willst. Wenn du z.B. die Tagesdurchschnittstemperatur des heutigen tages mitlaufend anzeigen willst, kannst du das direkt via AC_getAggregatedValues, Verdichtung auf Tagesebene (Parameter ‚1‘) aus der DB holen. Wenn Du Durchschnittswerte anzeigen willst, die nicht ganzen Perioden entsprechen (z.B. von 22:00 Uhr bis 22:00 Uhr, dann musst du auf die nächst kleinere Verdichtungsstufe zurückgreifen und selbst berechnen, z.B. wie oben beschrieben

Hallo Raketenschnecke,
du bist schon sehr nah an der „Anforderung“. In der Tat möchte ich die durchschn. Temp. in dem besagten Zeitrahmen wissen, da wir eine neue Heizung bekommen haben und diese um 06 Uhr beginnt und um 22 Uhr endet, also mit den „Tagprogramm“. Ich möchte einfach die Verbrauchswerte meiner M-Buszähler daneben stellen um mal einen Vergleich zu bekommen, Temperatur zu kwh Verbrauch…

Ich habe es jetzt wirklich so gelöst und aggregiere auf Stundenbasis von 6 Uhr bis 22 Uhr, mache eine Schleife durch die Anzahl Elemente des Arrays und dividiere am Ende nach der Schleife die Summe der Werte durch die Anzahl, dies gibt mir nun die gwünschten Durchschnittstemperatur.

Ich bin so froh dass du mit mir damals die Skype Session gemacht hast und mir Anschub gegeben hast…
ich bin super stolz auf mein Webfrontend, und es wächst kontinuierlich weiter :slight_smile:

LG
Jürgen

prima, wenns geholfen hat :wink:
Du hast hoffentlich die [AVG]-Werte genommen?

yepp, habe ich… merci