Maxima in Archiv finden?

Hi,

bin gerade dabei einzelne Meßwertfehler in einzelnen Datensätzen zu „korrigieren“. Wie kann ich am einfachsten im Datensatz einer bestimmten Variable den maximal Wert finden. Und zwar im gesamten aufgezeichneten Zeitraum?

hardlog

Würde ich auch gerne wissen .

Ist nicht so einfach mit dem Archiv :frowning:

Gesendet von iPhone mit Tapatalk

Alle Daten in einen Array einlesen und dann

$max = max(array_column($array, 'Value'));

fertig
Viele Grüße
Jürgen

Hi,

danke für den Tipp. Komme aber nicht weiter?!
Mit:

$array=AC_GetLoggedValues(41474 /*[Archive Handler]*/, 14419 /*[Hardware\1wire\LAN Gateway 2 [192.168.178.191]\Außenklimasensor (esera 11113)\11113 Temperature Humidity Sensor\Temperatur]*/, mktime(0, 0, 0, 1, 1, 2018), mktime(23, 59, 59, 12, 31, 2018), 10000);

$max = max(array_column($array, 'Value'));  
echo $max;

Echot er mit 8,04 das Maximum, aber auch bei uns war der Sommer etwas wärmer…

Ich vermute, 10000 ist zu gering.

Schau dir mal die Werte an mit


$start_time = mktime(0, 0, 0, 1, 1, 2018);
$end_time   = mktime(23, 59, 59, 12, 31, 2018);

$values = AC_GetLoggedValuesCompatibility(41474, 14419 , $start_time, $end_time, 10000);

for ($i = 0, $iMax = count($values); $i < $iMax; $i++) {
    echo $i . ': TimeStamp=' . date('Y-m-d G:i:s', $values[$i]['TimeStamp']) . ' -> ' . $values[$i]['Value'] . PHP_EOL;
}

Ich hatte 10000 genommen, da in der Doku steht:

Limit	Maximale Anzahl an Datensätzen. (0 = Kein Limit, 10000 ist das harte Limit,welches immer greift)

Dein code ergibt einen Fehler:

Fatal error:  Uncaught Error: Call to undefined function AC_GetLoggedValuesCompatibility() in C:\IP-Symcon\scripts\43180.ips.php:11

versuchs mal so


        $max = AC_GetLoggedValues ($archive_ID, $ID, 0, $Ende, 1)[0]["Value"];
        do{
            $array = AC_GetLoggedValues ($archive_ID, $ID, $Anfang, $Ende, 0);
            $Ende = @$array[count($array)-1]["TimeStamp"]-1;
            if($Ende < 0)break;
            if($max < max(array_column($array, 'Value')))$max = max(array_column($array, 'Value'));
        }while (true);

sollte gehen
Viele Grüße
Jürgen

Danke!!

Geht. Nur löst es das Problem das ich hatte wider erwarten nicht, denn meine Werte scheinen realistisch und zeigen keine auffälligen Ausreißer wie ich hiervermutet habe.(Post 120).

hardlog

Da stimmt die Doku nicht ganz. 10000 ist das Standardlimit. Es lässt sich aber über den Spezialschalter ‚Archive Record Limit‘ hochsetzen.

Mit AC_GetLoggedValuesCompatibility() habe ich dir aus Versehen eine alte Funktion genannt. Die aktuelle ist AC_GetLoggedValues().