Was können wir verbessern?

Dokumentation

AC_GetLoggedValues

Benötigt: IP-Symcon >= 3.0

array AC_GetLoggedValues ( integer $InstanzID, integer $VariablenID, integer $Startzeit, integer $Endzeit, integer $Limit )

Parameterliste

InstanzID ID zum Archiv Control
VariablenID ID der abzufragenden Variablen
Startzeit Datum/Zeit als Unix Zeitstempel. (0 = von Anfang an)
Endzeit Datum/Zeit als Unix Zeitstempel. (0 = bis jetzt)
Limit Maximale Anzahl an Datensätzen. (0 = Kein Limit, 10000 ist das harte Limit, welches immer greift)

Rückgabewerte

Ein Array mit folgenden key => value Paaren.

Die Ausgabe startet mit dem neusten Datensatz und dann absteigend mit den älteren Datensätzen.

Index Typ Beschreibung
Duration integer Dauer in Sekunden, die der Datensatz gesetzt war
TimeStamp integer Datum/Zeit beim Erstellen des Datensatzes als Unix Timestamp
Value variant Wert

Beschreibung

Dieser Befehlt gibt die Rohdaten zurück, die über das Archiv Control für eine Variable mit der VariablenID mitprotokolliert wurden. Dabei können die Start- und Endzeit als Parameter angegeben werden. Der Parameter Limit limitiert die maximale Anzahl der zurückgegebenen Datensätze, wobei das Limit von 10000 Datensätzen pro Abfrage nie überschritten werden kann.

Das Archiv Control erstellt nur neue Datensätze für geänderte Werte! Aktualisierungen werden nicht berücksichtigt.

Diese Funktion verursacht eine erhebliche Belastung für das System, da in den meisten Fällen sehr viele Datensätze verarbeitet werden müssen. Bitte weichen Sie in jedem möglichen Falle auf bereits voraggregierte Werte über die AC_GetAggregatedValues Funktion aus. Diese Funktion bietet Ihnen direkten Zugriff auf Mittelwerte oder Summen für verschiedene Zeiträume wie z.B. Jahre, Monate, Wochen und Tage.

In IP-Symcon 2.x war diese Funktion fehlerbehaftet. Es wurde immer ein Wert mehr ausgegeben, welcher vor der Startzeit lag. Das war insofern nützlich, dass die für z.B. die Graphengenerierung der vorherige Wert bekannt war, und für die vollständige Zeitspanne ein Graph erstellt werden konnte. Anderfalls wäre eine Lücke am Anfang des Graphen sichtbar. Für eine Funktion mit dem Parameter Startzeit ist diese Funktionsweise jedoch nicht korrekt. Wer für seine Skripte genau diese besondere Funktionsweise benötigt, kann die Hilfsfunktion nutzen, die den vorherigen Datensatz, der vor der Startzeit liegt, entsprechend abfragt und zum Array hinzufügt.

Beispiel

//Den letzten Wert, der in der Datenbank gespeichert wurde, holen
$letzter_Wert = AC_GetLoggedValues(12345, 55554, 0, 0, 1)[0]['Value'];
 
//Alle Datensätze vom 01.01.2013 bis zum 07.01.2013 abfragen
$werte = AC_GetLoggedValues(12345, 55554, mktime(0, 0, 0, 1, 1, 2013), mktime(23, 59, 59, 1, 7, 2013), 0); //55554 ist die ID der Variable, 12345 vom Archiv Control
 
//Alle heutigen Datensätze abfragen
$werte = AC_GetLoggedValues(12345, 55554, strtotime("today 00:00"), time(), 0); //55554 ist die ID der Variable, 12345 vom Archiv Control
 
//Alle gestrigen Datensätze abfragen
$werte = AC_GetLoggedValues(12345, 55554, strtotime("yesterday 00:00"), strtotime("today 00:00")-1, 0); //55554 ist die ID der Variable, 12345 vom Archiv Control
 
//Dieser Teil erstellt eine Ausgabe im Skriptfenster mit den abgefragten Werten        
foreach($werte as $wert) {
    echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Value'] . PHP_EOL;
}
 
//Hilfsfunktion, die die Funktionsweise von IP-Symcon 2.x nachbildet         
function AC_GetLoggedValuesCompatibility($instanceID, $variableID, $startTime, $endTime, $limit) {
    $values = AC_GetLoggedValues($instanceID, $variableID, $startTime, $endTime, $limit );
    if((sizeof($values) == 0) || (end($values)['TimeStamp'] > $startTime)) {
        $previousRow = AC_GetLoggedValues($instanceID, $variableID, 0, $startTime - 1, 1 );
        $values = array_merge($values, $previousRow);
    }
    return $values;
}