Bietet eine Möglichkeit zur Abfrage aggregierter Kanaldaten für zeitbasierte Kanäle. Sie können die Anzahl der Messwerte festlegen, die für einen bestimmten Zeitbereich gesendet werden sollen, sowie für äquidistante Signale die Minimal-, Maximal- und Durchschnittsaggregationen und für nicht-äquidistante Signale den Flankenzählwert und den anfänglichen Rohwert auswählen.
Standardmäßig nutzt die API die Architektur von ibaHD-Server, bei der jeder Kanal in mehreren Aggregationsstufen gespeichert wird, um einen schnellen und effizienten Abruf der Daten über längere Zeiträume zu ermöglichen. Mögliche Anwendungsfälle sind Client-Visualisierungen (z. B. eine Monatsübersicht), bei denen die Bildschirmgröße die Menge der gleichzeitig darstellbaren Daten begrenzt, sowie die Bereitstellung voraggregierter Daten für nachfolgende Aggregationen, bei denen Min/Max/Durchschnittsdaten als Quelle anwendbar sind.
Der Aggregationsalgorithmus kann von dem Standardalgorithmus "Min/Max/Avg downsampling" auf den alternativen Algorithmus "Linear interpolation downsampling" umgestellt werden. Dieser Algorithmus versucht, Rohdatenpunkte in äquidistanten Abständen (geforderter Zeitbereich / geforderter Messwert) auszuwählen und wendet eine lineare Interpolation zwischen benachbarten Messwerten an, wenn die gespeicherten Messwerte nicht genau mit den Zeitstempeln der Zielwerte übereinstimmen.
Hinweis |
|
|---|---|
|
Der Algorithmus arbeitet je nach abgefragtem Zeitbereich auf der nächstgelegenen Aggregationsstufe oder den Rohdaten. Es kann zu Unschärfen in der Ermittlung des Max-, Min- und Mittelwerts kommen. Im Fall der Verwendung von aggregierten Daten werden in den Randbereichen mitunter Daten mit in die Ermittlung der Werte einbezogen, die nicht Teil des abgefragten Zeitraums sind. Um die Aufwände zur Ermittlung der exakten Daten in einem für Nutzer vertretbaren Rahmen zu halten, werden die Daten in den Randbereichen unter Zuhilfenahme einer Gewichtungsfunktion ermittelt. Bei Verwendung von Rohdaten kann ibaHD-Server die Aggregationsstufen nicht zur Beschleunigung der Verarbeitung nutzen und ist darum ressourcenintensiver als der Standardalgorithmus "Min/Max/Avg downsampling". |
|
Message "GetAggregatedChannelDataRequest"
Struktur
GetAggregatedChannelDataRequest{
}
Parameter
|
Pos. |
Parameter |
Datentyp |
Bedeutung |
|---|---|---|---|
|
1 |
time_range_from |
int64 |
Anfangszeit des angeforderten Zeitbereichs im Unix-Zeitstempelformat in Mikrosekunden |
|
2 |
time_range_to |
int64 |
Endzeit des angeforderten Zeitbereichs im Unix-Zeitstempelformat in Mikrosekunden |
|
3 |
channel_ids |
string |
Kanal-ID im gleichen Format, wie sie in der Response-Liste von GetHdStoreSchema() zurückgegeben wurde, siehe GetHdStoreSchema(). |
|
4 |
sample_count |
int64 |
Anzahl der Messwerte, die zurückgegeben werden. Der Wert muss > 0 sein. |
|
5 |
min_aggregation |
bool |
Auswahl der aggregierten Werte, die mit der Antwort gesendet werden sollen |
|
6 |
max_aggregation |
bool |
|
|
7 |
avg_aggregation |
bool |
|
|
8 |
aggregation_algorithm_type |
enum (AggregationAlgorithmType) |
Algorithmus für das Downsampling der Daten, Standardwert MIN_MAX_AVG_DOWNSAMPLING, wenn keine Angabe gemacht wird |
|
9 |
add_extra_sample_out_of_time_range |
bool |
Wenn True, wird zusätzlich wird vor und nach dem gewünschten Zeitbereich ein zusätzlicher Messwert angefordert. Bei digitalen Kanälen werden keine zusätzlichen Werte hinzugefügt, sondern der erste Wert liegt vor time_range_from. Diese Option ist nur für den Algorithmus MIN_MAX_AVG_DOWNSAMPLING verfügbar. |
Message "GetAggregatedChannelDataResponse"
Liste der Zeitstempel für die aggregierten Messwerte, aufgeteilt in die verschiedenen Kanalformate.
Struktur
GetAggregatedChannelDataResponse{
AggregatedChannel{
FloatValues{…}
DoubleValues{…}
StringValues{…}
DigitalValues{…}
}
}
Parameter
|
Pos. |
Parameter |
Datentyp |
Bedeutung |
|---|---|---|---|
|
1 |
timestamps |
int64 |
Zeitstempel für die Kanäle DATA_TYPE_FLOAT_VALUES und DATA_TYPE_DOUBLE_VALUES als Unix-Zeitstempel in Mikrosekunden |
|
2 |
aggregated_channels |
- |
Kanäle, die Werte für die ausgewählten Aggregationen enthalten (min, max, avg) Pro Kanal wird eine Message AggregatedChannel zurückgegeben, siehe Message "AggregatedChannel". |
Message "AggregatedChannel"
|
Pos. |
Parameter |
Datentyp |
Bedeutung |
|---|---|---|---|
|
1 |
channel_id |
string |
Kanal-ID im Format Beispiel: |
|
2 |
data_type |
enum (DataType) |
Datentyp der zurückgegebenen Werte, siehe Enum "DataType". |
|
3 |
float_values |
- |
Werte für DATA_TYPE_FLOAT_VALUES-Kanäle, ansonsten leer, siehe Message "FloatValues". Zeitstempel und Werte werden anhand des Array-Index abgeglichen. |
|
4 |
double_values |
- |
Werte für DATA_TYPE_DOUBLE_VALUES-Kanäle, ansonsten leer, siehe Message "DoubleValues". Zeitstempel und Werte werden anhand des Array-Index abgeglichen. |
|
5 |
string_values |
- |
Nicht-äquidistante Werte für DATA_TYPE_STRING_VALUES-Kanäle, sonst leer, siehe Message "StringValues". Zeitstempel und Werte werden nach Array-Index abgeglichen. |
|
6 |
digital_values |
- |
Nicht-äquidistante steigende/fallende Flanken oder Lücken für DATA_TYPE_DIGITAL_VALUES-Kanäle, sonst leer, siehe Message "DigitalValues". Die Werte sind bis zum nächsten Flankenwechsel gültig, Zeitstempel und Werte werden durch den Array-Index aufeinander abgestimmt. |
Message "FloatValues"
|
Pos. |
Parameter |
Datentyp |
Bedeutung |
|---|---|---|---|
|
1 |
min_values |
float |
Optional: Mindestwerte eines aggregierten Kanals Standardmäßig leer, wenn nicht angefordert |
|
2 |
max_values |
float |
Optional: Maximalwerte eines aggregierten Kanals Standardmäßig leer, wenn nicht angefordert |
|
3 |
avg_values |
float |
Optional: Durchschnittswerte eines aggregierten Kanals Standardmäßig leer, wenn nicht angefordert |
Message "DoubleValues"
|
Pos. |
Parameter |
Datentyp |
Bedeutung |
|---|---|---|---|
|
1 |
min_values |
double |
Optional: Mindestwerte eines aggregierten Kanals Standardmäßig leer, wenn nicht angefordert |
|
2 |
max_values |
double |
Optional: Maximalwerte eines aggregierten Kanals Standardmäßig leer, wenn nicht angefordert |
|
3 |
avg_values |
double |
Optional: Durchschnittswerte eines aggregierten Kanals Standardmäßig leer, wenn nicht angefordert |
Message "StringValues"
|
Pos. |
Parameter |
Datentyp |
Bedeutung |
|---|---|---|---|
|
1 |
timestamp |
int64 |
Nicht-äquidistante Unix-Zeitstempel in Mikrosekunden |
|
2 |
value |
value |
Nicht-äquidistante String-Werte |
Message "DigitalValues"
|
Pos. |
Parameter |
Datentyp |
Bedeutung |
|---|---|---|---|
|
1 |
timestamp |
int64 |
Nicht-äquidistante Unix-Zeitstempel in Mikrosekunden |
|
2 |
value |
float |
Nicht-äquidistante Flankenwechsel (0 oder 1) oder Lücken (NaN) des digitalen Kanals |
|
3 |
edgeCount |
float |
Nicht-äquidistante Flankenzählung des digitalen Kanals. Gibt an, wie oft sich der Signalwert im aggregierten Zeitintervall geändert hat. |
|
4 |
min |
float |
Nicht-äquidistanter Minimalwert des digitalen Kanals |
|
5 |
max |
float |
Nicht-äquidistanter Maximalwert des digitalen Kanals |
Enum "AggregationAlgorithmType"
|
Wert |
Bedeutung |
|
|---|---|---|
|
0 |
AGGR_ALGO_TYPE_UNSPECIFIED |
nicht spezifiziert |
|
1 |
AGGR_ALGO_TYPE_MIN_MAX_AVG_DOWNSAMPLING |
Min/Max/Avg Downsampling |
|
2 |
AGGR_ALGO_TYPE_LINEAR_INTERPOLATION_DOWNSAMPLING |
Lineare Interpolation |
Enum "DataType"
Folgende Werte stehen für DataType zur Verfügung.
|
Wert |
Bedeutung |
|
|---|---|---|
|
0 |
DATA_TYPE_UNSPECIFIED |
nicht spezifiziert |
|
1 |
DATA_TYPE_FLOAT_VALUES |
Wert vom Typ "float" |
|
2 |
DATA_TYPE_DOUBLE_VALUES |
Wert vom Typ "double" |
|
3 |
DATA_TYPE_STRING_VALUES |
Wert vom Typ "string" |
|
4 |
DATA_TYPE_DIGITAL_VALUES |
Digitaler Wert |
|
5 |
DATA_TYPE_NE_FLOAT_VALUES |
Wert vom Typ "float", der nicht-äquidistant gespeichert wurde |
|
6 |
DATA_TYPE_NE_DOUBLE_VALUES |
Digitaler Wert, det nicht-äquidistant gespeichert wurde |
|
7 |
DATA_TYPE_DIGITAL_EDGE_VALUES |
Anzahl der Wechsel eines digitalen nicht-äquidistanten Werts |