Maximum der letzten 15min

Hallo, wie frage ich einfach das Maximum der letzten 15 Minuten einer archivierten Var ab?

Habs probiert mit

AC_GetAggregatedValues(IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0],17226,8,time()-900,time(),1);

doch das liefert irgendwie den angeknabberten Wert der angebrochenen Viertelstunde. Also wenn es jetzt 10:10 ist, bekomme ich das Max von 9:45-10:00 und das Max von 10:00 bis jetzt - aber ich hätte gerne das Max von 9:55-10:10

Hoffe, es ist verständlich…. Oder geht es nur mit AC_GetLogged… und dann per php das Max suchen?

Aus

8 15-Minütige Aggregation (Aus Rohdaten berechnet)

und 15 Minuten Suche dürftest du wahrscheinlich einen einzigen Wert bekommen.

Möglicherweise hilft dir

6 1-Minütige Aggregation (Aus Rohdaten berechnet)

aber auch nur, wenn du nicht viel häufiger Daten bekommst, die solltest du dann über

AC_GetLoggedValues

in ein Array lesen und dort mit den Array-Funktionen dein MAX suchen.

Update:

Wobei du hiermit AC_GetAggregatedValues doch eigentlich das gewünscht bekommen solltest

Max variant Größter Wert innerhalb dieses Aggregationszeitraums
MaxTime variant Datum/Zeit von Max als Unix Timestamp

In Ablaufplänen hast du eine Aktion um aggregierte Werte auch als fließendes Fenster abfragen kannst. Das Skript dahinter ist aber auch ein bisschen komplizierter. Wenn du nicht auf PHP festgefahren bist, würde ich dir also einen Ablaufplan empfehlen. Alternativ kannst du die Aktion auch im Skript-Editor hinzufügen. Aber sei gewarnt: Das sind einige Zeilen. Auch wenn man die bestimmt nochmal optimieren kann, wenn du deine festen Parameter hast.

dachte ich auch

daachte ich auch, aber das liefert eben die letzten vollen 15min, also z.B. von 10:00 bis 10:15 und den angeknabberten Bereich von z.B. 10:15 bis 10:20, wenn das “jetzt” wäre. Ich hätte es gerne - so wie Dr. Nils das richtig nennt - fließend, also dann von 10:05 bis 10:20

okay, dann habe ich jetzt mal einen Grund, mich mit Ablaufplänen zu beschäftigen!

oder per Script

<?php

$varID = 12345;
$archiveID = IPS_GetInstanceIDByName("Archive Control", 0);

$end = time();
$start = $end - (15 * 60);

$raw = AC_GetLoggedValues($archiveID, $varID, $start, $end, 0);

$max = null;

foreach ($raw as $entry) {
    if ($max === null || $entry['Value'] > $max) {
        $max = $entry['Value'];
    }
}

echo "Maximum der letzten 15 Minuten: " . $max;


ist aber nicht getestet :innocent:

Ja, danke. Ist fast exakt dasselbe, was mir die KI ausgespuckt hat. Nur den foreach Teil hat sie bei mir anders gemacht. Schon toll, was heute so geht.

Frage mich, ob in ein paar Jahren nicht die KI die komplette Haussteuerung macht und uns lästige Fragen stellt.

Anderes Thema….

Und wenn du es doch im Skript machen willst, schau mal oben im SKript → Befehl einfügen → Ziel ist das Archiv. Dann klickst du dir den Dialog zusammen mit Aggregierte Daten lesen und er erzeugt dir den passenden PHP Code direkt im Editor :slight_smile:

Hab das gerade mit dem Ablaufplan bei einer Temperaturvariable probiert - geht ja wirklich super einfach :slightly_smiling_face: .

LG. Werner

1 „Gefällt mir“