Repository navigation
Functions DataAggregationResource
Florian Fehring edited this page Oct 5, 2026
·
1 revision
Die DataAggregationResource bietet Methoden zum Aggregieren von Datensätzen.
Findet Datensätze, die zeitlich beieinander liegen und fasst sie zu einem neuen Datensatz zusammen. Dabei wird:
- Ein mittlerer Zeitstempel für den neuen Datensatz berechnet, der dem arithmetischen Mittel der Einzelzeitstempel entspricht
- Falls mehrere Datensätze zu einem Attribut gefunden werden, wird auch hier das arithmetische Mittel berechnet.
- Datensätze aus mehreren Datenquellen (auch unterschiedlichen SmartData-Instanzen) können als Eingangsdatensätze verwendet werden.
Der Aufruf erfolgt per POST unter Übergabe eines Konfigurations-JSONS.
Konfigurations-JSON: Das Konfigurations-JSON besteht aus folgenden Inhalten:
| Bezeichnung | Beschreibung | Standardwert |
|---|---|---|
| start | Zeitpunkt ab dem Datensätze berücksichtig werden sollen | - |
| end | Zeitpunkt bis zu dem Datensätze berücksichtig werden sollen | - |
| date_attr | Name des Attributs das Zeitstempel enthällt | ts |
| cluster_seconds | Größe eines Clusters in Sekunden | 30 |
| traceability | Adds output to the resulting json to support traceability | false |
| onlyclosedclusters | If set to false datasets of running timeslots will also used | true |
| processed_attr | Name of an attribute to set to "true" when processed successfully for aggregation | - |
| mapping | Mapping JSON Objects consisting of the following attributes: | - |
| -source_attr | Name of values source attribute | - |
| -source_pointer | Json-Path to find value in JSON content inside the source attribute (optional) | - |
| -target_attr | Name of the attribute the value should be outputted to | - |
| datasources | Array of datasources with the following attributes: | - |
| name | Reader friendly name for datasource | - |
| -smartdataurl | URL unter der das SmartData mit den Daten zu finden ist | http://localhost:8080/SmartData |
| -collection | Name der Collection | - |
| -storage | Storage der Collection | public |
| -dateatrribute | Name of the attribute holding the time information | ts |
| -includes | Attribute, die berücksichtig werden sollen | * |
| -filter | SmartData filter expression for filtering used datasets (multiple times useable) | - |
| -limit | Max. Anzahl zu verarbeitender Datensätze | 100 |
Beispiel:
{
"start": "2025-01-01T00:00",
"end": "2025-12-31T23:59",
"date_attr": "ts",
"cluster_seconds": 30,
"traceability": true,
"onlyclosedclusters": false,
"processed_attr": "processed",
"mapping": {
"inn_temp": {
"source_attr": "result",
"source_pointer": "/statemsg/values/temperature_celsius",
"target_attr": "inn_temp"
},
"inn_hum": {
"source_attr": "result",
"source_pointer": "/statemsg/values/humidity_percent",
"target_attr": "inn_hum"
},
"inn_pres": {
"source_attr": "result",
"source_pointer": "/statemsg/values/pressure_hPa",
"target_attr": "inn_pres"
},
"temp1": {
"source_attr": "result",
"source_pointer": "/statemsg/sensors/0/values/temperature_celsius",
"target_attr": "temp1"
},
"temp2": {
"source_attr": "result",
"source_pointer": "/statemsg/sensors/1/values/temperature_celsius",
"target_attr": "temp2"
},
"temp3": {
"source_attr": "result",
"source_pointer": "/statemsg/sensors/2/values/temperature_celsius",
"target_attr": "temp3"
},
"pm2_5": {
"source_attr": "result",
"source_pointer": "/statemsg/values/pm2.5",
"target_attr": "pm2_5"
},
"pm10_0": {
"source_attr": "result",
"source_pointer": "/statemsg/values/pm10.0",
"target_attr": "pm10_0"
},
"co2": {
"source_attr": "result",
"source_pointer": "/statemsg/values/co2_ppm",
"target_attr": "co2"
}
},
"datasources": [
{
"name": "datajobs_log",
"smartdataurl": "/SmartDataTest",
"collection": "datajobs_log",
"storage": "smartmonitoring",
"dateattribute": "ts",
"filter": ["datajob_id,in,1,2,3,4,5&filter=processed,eq,false"],
"limit": 10
},
{
"name": "datajobs_log2",
"smartdataurl": "/SmartDataTest",
"collection": "datajobs_log2",
"storage": "smartmonitoring",
"dateattribute": "ts",
"filter": ["datajob_id,in,1,2,3,4,5&filter=processed,eq,false"],
"limit": 10
}
]
}
Antwort: Die Antwort besteht aus einem JsonObject, das in "records" die berechneten Datensätze enthält. In "clustererrors" werden Fehlermeldungen und Hinweise zur Anwendung des Mappings gegeben.
{
"clustererrors": [
{
"incorrect": "/statemsg/sensors/1/values/temperature_celsius",
"suggestion": "/statemsg/values/temperature_celsius",
"json": {
"cmdstr": "python;/home/pi/payara/scripts/bme280.py",
"state": "finished",
"statemsg": {
"sensor": "bme280",
"hostname": "raspberrypi",
"timestamp": "2025-06-24T13:49:14.771331+00:00",
"values": {
"temperature_celsius": 26.33,
"humidity_percent": 35.55,
"pressure_hPa": 1003.96
}
}
}
}
],
"records": [
{
"ts": "2025-06-24T15:49:14.968Z",
"inn_hum": 35.55,
"inn_temp": 26.33,
"pm2_5": 2.5,
"pm10_0": 10.5,
"inn_pres": 1003.96,
"temp2": 26.44,
"temp3": 26.5,
"temp1": 26.0
},
{
"ts": "2025-06-24T15:52:14.571Z",
"inn_hum": 35.66,
"inn_temp": 26.4,
"pm2_5": 2.6,
"pm10_0": 7.1,
"inn_pres": 1003.91,
"temp2": 26.56,
"temp3": 26.62,
"temp1": 26.19
},
{
"ts": "2025-06-24T15:53:51.079Z",
"co2": 416.0
}
]
}
Mapping: Das Mapping wird mit einem JSON Object definiert, das seinerseits für jedes Mapping ein JSON Ojekt beinhaltet. Die Attribute für das Mapping sind:
| Attribut | Beschreibung |
|---|---|
| source_attr | Name des Attributs, in dem der Wert gefunden werden soll |
| source_pointer | JSON Pointer, falls sich in source_attr ein JSON befindet und ein gezielter Wert daraus genutzt werden soll. |
| target_attr | Name des Attributs im neu anzulegenden Datensatz. |
Beispiel:
{
"inn_temp": {
"source_attr": "result",
"source_pointer": "/statemsg/values/temperature_celsius",
"target_attr": "inn_temp"
},
"temp1": {
"source_attr": "result",
"source_pointer": "/statemsg/sensors/0/values/temperature_celsius",
"target_attr": "temp1"
}
}