HI,
klar, gerne. ich hab aber alles drin gelassen
Hier noch mal komplett.
<?php
//array
$archive_ID = array ();
array_push($archive_ID, 40572);
array_push($archive_ID, 20433);
foreach($archive_ID AS $summeID)
{
echo "SummeID Variable: ".$summeID."
";
filter_variable(10904, $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
$start = mktime(0, 0, 0, 1 , 1, 2019);
$logData = AC_GetLoggedValues($ArchiveID, $VariableID, $start, 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');
}
}
}
?>
Ergebnis:
SummeID Variable: 40572
Fatal error: Uncaught Error: Call to undefined function filter_variable() in C:\ProgramData\Symcon\scripts\23031.ips.php:14
Stack trace:
#0 {main}
thrown in C:\ProgramData\Symcon\scripts\23031.ips.php on line 14
(ZEILE 14: filter_variable(10904, $summeID) /* ID der Archive-Instanz */