AC_GetAggregatedValues liefert nicht den korrekten min Wert

Hallo,

ich habe folgende Abfrage im Script:
$ende = time();
$start = time()-(606024*7);
$avgminmax = AC_GetAggregatedValues(AC_HANDLER_ID, 12345, 2, $start, $ende, 1);

print $avgminmax[0][‚Min‘]

liefert 1.30

Der Witz, gestern gab es aber einen Zeitpunkt wo ich im Graphen von 12345 sehe, dass es einen Wert 1.26 gab.

Wo ist mein „Denkfehler“?

Grüße Stefan

Moin Stefan!

Hast du mal unter „Kern Instanzen“ im „Archiv“ dir die geloggten Werte der Variable anzeigen lassen und bist dort mal durchgegangen, ob es diesen Min. Wert vlt. doch gab?

Und holst du dir wirklich den Min. Wert und nicht den Avg. (Durchschnitt) Wert?

Welche IPS Version hast du im Einsatz?

Hast du die entsprechende Variable mal neu aggregieren lassen?

Grüße,
Chris

Es gibt noch einen offenen Fehler, sodass du nach jedem IP-Symcon neu aggregieren musst.
Ansonsten sind die Aggregierten Werte so ziemlich mist :wink:

paresy

Was meinst du mit nach jedem IP Symcon? Und wie geht das neu aggregieren?

Deine Rückfragen sind mir nicht ganz klar. Der Code steht oben - dort wird def. min aufgerufen. Der Wert ist da ich habe das kontrolliert.

IPS 3.4

Vermutlich meint er „bei jedem Neustart von IP-Symcon“. Weil bei IPS 4 ist das mit dem Variablen aggregieren noch so eine Sache…ist halt noch eine Beta-Version :slight_smile:

Bzgl. Variablen neu aggregieren gibt es im Forum einige Skripte die das quasi automatisch erledigen, oder manuell auf diesem Wege (siehe Überschrift „Archive Handler“):
Archive Control — IP-Symcon :: Automatisierungssoftware
> gilt auch für dein IPS 3.4 mit dem neu aggregieren. Versuch macht klug :slight_smile:

Edit: Vlt. würden uns noch ein paar Screenshots weiterhelfen. Eventuell reden wir auch aneinander vorbei.

Grüße,
Chris

Danke habe nun neu aggregiert - leider keine Verbesserung. Nun wird weil neue Werte hinzugekommen sind im Laufe des Tages zwar ein anderer min Wert von heute angezeigt nicht aber der von gestern, der es eigentlich sein sollte. Benutze ich AC_GetAggregatedValues evtl. einfach falsch?

Teste mal bitte diesen Code hier (natürlich mit deinen IDs) und schaue, ob da der richtige MIN-Wert ausgeben wird:

<?
$ArchivID = 11111;
$VariableID = 22222;
$werte = AC_GetAggregatedValues($ArchivID, $VariableID, 1 /* Täglich */, strtotime("yesterday 00:00"), strtotime("today 00:00")-1, 0);
print_r($werte);
?>

Edit: Das sollte dir die aggregierten Werte von GESTERN ausgeben.

Grüße,
Chris

Oh. Mein Post bezog sich auf die 4.0 Beta. Ich habe das irgendwo falsch gelesen.

Magst du dir mal den Zeitstempel ausgeben lassen? Evtl. ist der Zeitraum den du glaubst zu beobachten falsch :slight_smile:


echo date("d.m.y H:i", $avgminmax[0]['Timestamp']);

paresy

Da kommt nur heute raus. Der niedrigste Wert war aber vorgestern.

Aber wie kann das sein?
$ende = time();
$start = $ende-(606024*7);

		$avgminmax = AC_GetAggregatedValues(AC_HANDLER_ID, 12345, 2, $start, $ende, 1);

ist doch def. korrekt. Ich finde den Fehler nicht.

Die Wochenaggregation läuft immer von Montag bis Sonntag. Somit ist es korrekt, dass der kleinste Wert von heute ist.

Wenn du das Minimum der letzten 7 Tage willst, musst du alle 7 Tage einlesen und manuell durchlaufen zur Auswertung.

paresy

uff oh OK wo steht das denn versteckt? Wenn ich eine Start und Endzeit angeben kann gehe ich doch davon aus, dass es sich auf diesen Zeitraum bezieht. Danke.

OK ich nehme nun die täglich aggregierten Werte und aggregiere diese selbst.

Falls den Code nochmal jemand braucht:


function myhelper_AggregateValues( $aggr_ar ) {
    $r = array();

    $count = 0;
    $avg = 0;
    $r['Duration'] = 0;
    $r['LastTime'] = 0;
    $r['TimeStamp'] = 0;
    $r['Max'] = null;
    $r['Min'] = null;
    $r['MaxTime'] = 0;
    $r['MinTime'] = 0;
    foreach ($aggr_ar as $aggr) {
         $count++;
         $avg += $aggr['Avg'];
         $r['Duration'] += $aggr['Duration'];
         if ($r['LastTime'] < $aggr['LastTime'])
             $r['LastTime'] = $aggr['LastTime'] ;
         if ($r['TimeStamp'] < $aggr['TimeStamp'])
             $r['TimeStamp'] = $aggr['TimeStamp'];
         if (!isset($r['Max']) || $r['Max'] <= $aggr['Max']) {
         $r['Max'] = $aggr['Max'];
         $r['MaxTime'] = $aggr['MaxTime'];
         }
         if (!isset($r['Min']) || $r['Min'] >= $aggr['Min']) {
         $r['Min'] = $aggr['Min'];
         $r['MinTime'] = $aggr['MinTime'];
         }
    }
    $r['Avg'] = $avg / $count;

return $r;
}