Wie funktionier AC_GetLoggedValues?

Hi,
warum auch immer jetzt hat AC_GetLoggedValues so funktioniert wie ich es erwartet habe. Als Ergebnis habe ich ein Script geschrieben das meine Verbrauchswerte (Variablen als Zähler) quasi Median filtert. Quasi weil es ein spezieller Filter für Verbrauchswerte ist. Verbrauchswerte können nur größer werden. Ich beachte 3 Werte und wenn Wert1 < Wert2 < Wert3 ist alles OK. Ist Wert1 > Wert2 < Wert3 oder Wert1 < Wert2 > Wert3 stimmt was nicht. Ich benutze Differenzen und habe eine Toleranz von 0.1 Wh weil die Werte rauschen können.

Hier das Filterscript:


<?php
// Keller
$summeID = 18122 /* ID der Variablen im Archive */;
filter_variable(32968, $summeID) /* ID der Archive-Instanz */;

function filter_variable($ArchiveID, $VariableID) {

//Alle Datensätze der letzten Stunden abfragen
    $logData = AC_GetLoggedValues($ArchiveID, $VariableID,  strtotime("yesterday 00:00"), time(), 0); //55554 ist die ID der Variable, 12345 vom Archiv Control

// Anzahl der Werte
    $entries = count($logData);

// Macht erst ab 3 Werten Sinn
    if ($entries < 2) return;

// Anzahl der Fehler protokolieren
    $changes = 0;
    for ($i = 2; $i < $entries; $i++){

// Differenz Wert2-Wert1
        $diff1 = $logData[$i - 1]['Value'] - $logData[$i - 2]['Value'];

// Differenz Wert3-Wert2
        $diff2 = $logData[$i]['Value'] - $logData[$i - 1]['Value'];

// Wenn der mittlere Wert entweder der größte oder kleinste Wert ist stimmt was nicht
        if ((($diff1 < -0.1) && ($diff2 > 0.1)) ||
            (($diff1 > 0.1) && ($diff2 < -0.1))){ 

// lösche mittleren Wert
            AC_DeleteVariableData ($ArchiveID, $VariableID, $logData[$i - 1]['TimeStamp'] - 1, $logData[$i - 1]['TimeStamp'] + 1);

// Fehler in Logfile eintragen
            IPS_LogMessage("Medianfilter", $VariableID.' '.$changes.'. diff1:'.$diff1.' $diff2:'.$diff2); 

// eine Änderung mehr
            $changes++;
        }
    }

// Wenn es Änderungen gab
    if ($changes > 0){
// Variable neu aggregieren
        AC_ReAggregateVariable ($ArchiveID, $VariableID);
// Anzahl der Fehler ins Logfile
        IPS_LogMessage("Medianfilter", $VariableID.': Fehlerhafte Werte:'.$changes); 
    }
    else{
        IPS_LogMessage("Medianfilter", $VariableID.': Alles OK'); 
    }
}
?>

vielleicht kann es ja jemand gebrauchen.

Ralf