Daten einer bestimmten Wertgröße aus dem Archiv löschen

Hallo, ich habe irgendwie in meinen gelogged Daten ein paar Ausreisser drin:

TimeStamp;Avg;MinTime;Min;MaxTime;Max
11.3.2022 00:00:00;0;11.3.2022 00:00:00;0;11.3.2022 00:00:00;0
10.3.2022 23:00:00;0;10.3.2022 23:00:00;0;10.3.2022 23:00:00;0
10.3.2022 22:00:00;9;10.3.2022 22:53:37;9;10.3.2022 22:53:37;9
10.3.2022 21:00:00;0;10.3.2022 21:00:00;0;10.3.2022 21:00:00;0
10.3.2022 20:00:00;0;10.3.2022 20:00:00;0;10.3.2022 20:00:00;0
10.3.2022 19:00:00;0;10.3.2022 19:00:00;0;10.3.2022 19:00:00;0
10.3.2022 18:00:00;9;10.3.2022 18:31:51;9;10.3.2022 18:31:51;9
10.3.2022 17:00:00;21;10.3.2022 17:06:10;21;10.3.2022 17:06:10;21
10.3.2022 16:00:00;0;10.3.2022 16:00:00;0;10.3.2022 16:00:00;0
10.3.2022 15:00:00;20;10.3.2022 15:15:18;20;10.3.2022 15:15:18;20
10.3.2022 14:00:00;3;10.3.2022 14:55:11;3;10.3.2022 14:55:11;3
10.3.2022 13:00:00;0;10.3.2022 13:00:00;0;10.3.2022 13:00:00;0
10.3.2022 12:00:00;0;10.3.2022 12:00:00;0;10.3.2022 12:00:00;0
10.3.2022 11:00:00;0;10.3.2022 11:00:00;0;10.3.2022 11:00:00;0
10.3.2022 10:00:00;3;10.3.2022 10:28:05;1;10.3.2022 10:28:05;1
10.3.2022 09:00:00;3;10.3.2022 09:17:38;1;10.3.2022 09:17:38;1
10.3.2022 08:00:00;0;10.3.2022 08:00:00;0;10.3.2022 08:00:00;0
10.3.2022 07:00:00;0;10.3.2022 07:00:00;0;10.3.2022 07:00:00;0
10.3.2022 06:00:00;4332;10.3.2022 06:26:21;4332;10.3.2022 06:26:21;4332
10.3.2022 05:00:00;4332;10.3.2022 05:05:40;4332;10.3.2022 05:05:40;4332
10.3.2022 04:00:00;0;10.3.2022 04:00:00;0;10.3.2022 04:00:00;0
10.3.2022 03:00:00;0;10.3.2022 03:00:00;0;10.3.2022 03:00:00;0
10.3.2022 02:00:00;4332;10.3.2022 02:59:40;4332;10.3.2022 02:59:40;4332
10.3.2022 01:00:00;0;10.3.2022 01:00:00;0;10.3.2022 01:00:00;0
10.3.2022 00:00:00;0;10.3.2022 00:00:00;0;10.3.2022 00:00:00;0

Wie kann ich mittels AC_DeleteVariableData Werte ab einer bestimmten Größe löschen? Ich würde gerne alles über 100 löschen…

Hat das jemand schon mal gemacht?

Grüße

Und wo genau liegt dein Problem?
Die Funktion zum Löschen von Daten aus dem Archiv und deren Dokumentation hast du doch bereits gefunden.

Da es keinen Parameter gibt, mit dem man Einträge eines bestimmten Wertes direkt löschen kann, musst du das Archiv komplett durchgehen und die einzelnen Werte auf deinen gewünschten Schwellwert prüfen und dir diese merken, damit du sie anschließend löschen kannst. Diese beiden Funktionen sollten dir helfen.

  1. Prüfen:
    AC_GetLoggedValues — IP-Symcon :: Automatisierungssoftware

  2. Löschen:
    AC_DeleteVariableData — IP-Symcon :: Automatisierungssoftware

Je nach Größe des Archivs kann das etwas mühsam werden, da du max. 10.000 Einträge in einem Durchlauf prüfen kannst.

Alternativ könntest du die entsprechenden CSV-Dateien des Archivs direkt extern bearbeiten oder eine bereinigte Kopie davon in IPS neu einlesen und den alten Datenbestand verwerfen.

hab mir mal ein kleines Korrekturprogramm erstellt (Werte < 1.30 löschen):

$ID_Archiv	= 35635;
$ID_Var		= 28830;
//$start		= mktime(0,0,0,1,1,2021);		// stunde, minute, sekunde, monat, tag, jahr
$start		= 0;
//$ende		= mktime(23,59,59,12,31,2021);
$ende		= 0;

$werte		= AC_GetLoggedValues ($ID_Archiv, $ID_Var, $start, $ende, 0);

//print_r ($werte);

//******************************************************************************
// Datensatz mit [Value] <=1.30 löschen
//******************************************************************************

foreach($werte as $wert) 
{
	//echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Value'] . PHP_EOL;
	if($wert['Value'] <= 1.30)
	{
		AC_DeleteVariableData($ID_Archiv, $ID_Var, $wert['TimeStamp'], $wert['TimeStamp']);
		echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Value'] . PHP_EOL;
	}
}

AC_ReAggregateVariable($ID_Archiv, $ID_Var);

Gruß, Peter
1 „Gefällt mir“

Vielen herzlichen Dank … Genau das habe ich gesucht… Ich denke, dass können auch andere gebrauchen!