
Aggregator node configuration
Aggregator Node
Overview
The Aggregator Node collects numeric values from successive pipeline executions and computes statistics—average, minimum, maximum, sum, or count—once a configurable window of values has been reached. While the window is filling, downstream nodes are skipped; when the window is full, the node emits the computed results and resets for the next window.
Because the node stores only running totals (not every individual value), it is memory-efficient even for large windows and well suited for sensor roll-ups, quality summaries, and throughput metrics.
Core Functionality
What It Does
1. Windowed Aggregation
The node accumulates values until Window Size executions have been processed. On the final execution of each window, it flushes the computed statistics downstream and starts a new window.
2. Incremental Statistics Sum, min, and max are updated incrementally as each value arrives—only four numbers (count, sum, min, max) are stored in state regardless of window size. Average is derived from sum / count at flush time.
3. Flexible Value Extraction
The Value Field parameter supports Maestro expressions ({{ $node["Read Sensor"].temperature }}), dot-notation paths (sensor.reading), and direct field names. The extracted value is converted to a number before aggregation.
4. Downstream Gating Before the window is full, the node completes with a buffering status and skips downstream execution. Only when the window fills does the output propagate to connected nodes, preventing partial-window results from triggering downstream logic.
5. Persistent State Accumulated statistics survive pipeline restarts. Each pipeline + node combination maintains an independent window, so multiple Aggregator nodes in the same pipeline track separate data.
Configuration Reference
Parameters
| Parameter | Type | Default | Required | Constraints | Description |
|---|---|---|---|---|---|
| Value Field | string | — | Yes | Must resolve to a numeric value | Expression or dot-notation path to the numeric field to aggregate (e.g., {{ $node["Read Sensor"].temperature }}). |
| Window Size | number | 100 | Yes | 1--10,000 | Number of values to collect before flushing aggregated results downstream. |
| Operations | multi-select | ["avg"] | Yes | At least one | Statistics to compute: avg, min, max, sum, count. |
Value Field Examples
{{ $node["Read Sensor"].temperature }}— field from a named upstream node{{ $node["Read Sensor"].data.reading }}— nested field from an upstream nodetemperature— top-level field from the node's direct inputsensor.reading— nested field via dot notation from the node's direct input
Settings
| Setting | Options | Default | Description |
|---|---|---|---|
| Timeout (seconds) | number | Pipeline default | Maximum execution time for this node (1--600). |
| Retry on Timeout | Pipeline Default / Enabled / Disabled | Pipeline Default | Whether to retry on timeout. |
| Retry on Fail | Pipeline Default / Enabled / Disabled | Pipeline Default | Whether to retry on failure. When Enabled, shows Advanced Retry Configuration. |
| On Error | Pipeline Default / Stop Pipeline / Continue Execution | Pipeline Default | Behavior when node fails after all retries. |
Advanced Retry Configuration
Only visible when Retry on Fail is set to Enabled.
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
| Max Attempts | number | 3 | 1--10 | Maximum retry attempts. |
| Initial Delay (ms) | number | 1000 | 100--30,000 | Wait before first retry. |
| Max Delay (ms) | number | 120000 | 1,000--300,000 | Upper bound for backoff delay. |
| Multiplier | number | 2.0 | 1.0--5.0 | Exponential backoff multiplier. |
| Jitter Factor | number | 0.1 | 0--0.5 | Random jitter. |
Input / Output
Input
The Aggregator Node expects a JSON object containing the field referenced by Value Field. The field value must be convertible to a number (integer or float).
Output — Buffering (window not yet full)
While values are still accumulating, downstream nodes are skipped. The node's own output is:
{
"count": 3,
"windowSize": 10,
"flushed": false
}
Output — Flushed (window complete)
When the window fills, the node emits the computed statistics and allows downstream execution:
{
"count": 10,
"windowSize": 10,
"flushed": true,
"avg": 24.5,
"min": 18.2,
"max": 31.7,
"sum": 245.0
}
Only the operations selected in the configuration appear in the output.
| Field | Type | Present | Description |
|---|---|---|---|
count | number | Always | Number of values in this window. |
windowSize | number | Always | Configured window size. |
flushed | boolean | Always | true when the window is complete and results propagate downstream. |
avg | number | If selected | Arithmetic mean of all values in the window. |
min | number | If selected | Lowest value in the window. |
max | number | If selected | Highest value in the window. |
sum | number | If selected | Sum of all values in the window. |
Manual Actions
| Action | Description |
|---|---|
| View Stats | Return the current accumulated statistics and window progress without modifying state. |
| Reset | Clear all accumulated state and start a fresh window. |
Usage Examples
Example 1: Average Temperature over 10 Readings
| Field | Value |
|---|---|
| Value Field | {{ $node["Read Sensor"].temperature }} |
| Window Size | 10 |
| Operations | avg, min, max |
Every sensor reading increments the window. After 10 readings, the node emits the average, minimum, and maximum temperatures downstream—useful for feeding a dashboard or triggering an alert if the average exceeds a threshold.
Example 2: Hourly Production Sum
| Field | Value |
|---|---|
| Value Field | {{ $node["PLC Reader"].unitsProduced }} |
| Window Size | 60 |
| Operations | sum, count |
If the pipeline fires once per minute, a window of 60 produces an hourly total. Downstream nodes receive the cumulative sum for reporting or UNS publishing.
Example 3: Quality Metric Roll-Up from Upstream Node
| Field | Value |
|---|---|
| Value Field | {{ $node["Measure"].thickness }} |
| Window Size | 100 |
| Operations | avg, min, max, sum, count |
References the thickness field from an upstream node named "Measure". After 100 measurements, all five statistics are emitted for a comprehensive quality summary.
- Choose the smallest set of operations you need. The output stays clean and downstream expressions are simpler.
- Pair with a Counter or Condition node if you need both per-event and windowed logic in the same pipeline.
- Use View Stats during development to check accumulation progress without waiting for a full window flush.
Downstream nodes only execute when the window is complete (flushed: true). If you need every execution to propagate, use the Set or JavaScript node with manual aggregation logic instead.