Measurements
The Measurements page is where you configure the actual data that will be collected for a connection.
A connection can contain multiple measurements. A measurement represents one table in the local and cloud storage. Each measurement contains one or more variables. Variables define what to read and when to store it.
The page is split into:
- A measurement list (select which measurement to edit)
- Tabs for the selected measurement: Configuration, Variables, and Custom settings
Measurement list
The measurement list shows all measurements configured for the connection.
Common actions:
- Add: create a new measurement
- Enable/disable: toggle whether the measurement is active
- Select a measurement to edit its configuration and variables
Measurement tabs
Configuration tab
The Configuration tab defines storage and processing behavior for the selected measurement.
General
Name
The measurement name. This name is used as the table name in the local and cloud database.
Raw data bucket(s)
Select one or more buckets where raw data for this measurement will be stored.
Buckets are defined under Local storage. This selection controls retention behavior through the bucket configuration.
Analytics detail
When enabled, datapoints from this measurement are additionally written to an analytics detail table whenever an analytics trigger evaluates to true.
Use this to capture and synchronize high-resolution data only during periods that matter (for example, when a device enters an error state or performs a specific operation), instead of syncing all raw data continuously.
You configure the trigger logic, capture timeframe, and destination table name on the analytics page.
Downsampling
Downsampling generates a lower-resolution series from the raw measurement data. This reduces storage and sync volume by aggregating datapoints into fixed time windows.
Enabled
When enabled, Capture produces downsampled datapoints for this measurement in addition to the raw datapoints.
Downsampled data bucket(s)
Select one or more buckets where the downsampled (aggregated) datapoints will be stored.
Use buckets with longer retention than raw data when you want to keep trends for a longer period while discarding high-resolution raw data sooner.
Timespan (ms)
Defines the size of the aggregation window in milliseconds.
All raw datapoints that fall within the same timespan window are aggregated into a single downsampled datapoint (per variable, per window).
Example:
- Timespan =
250 ms - Raw datapoints within each 250 ms window are combined into one aggregated datapoint.
Method
Selects the aggregation function used to produce one downsampled datapoint per timespan window (per variable).
Supported methods:
- Mean: arithmetic average of all values in the window.
- Sum: sum of all values in the window.
- First: the first value in the window (by timestamp/order).
- Last: the last value in the window (by timestamp/order).
- Min: the smallest value in the window.
- Max: the largest value in the window.
- Count: number of values in the window.
- Mode: most frequent value in the window.
- Median: middle value of the sorted values in the window.
- Integral: integral of the value over time across the window (area under the curve). This is computed using the available timestamps within the window.
Variables tab
The Variables tab defines the individual datapoints collected inside the selected measurement.

Each variable has these options:
- Enabled toggle
- Name
- Collect type
- Timer (only relevant for timer-based collection modes)
- Condition (optional gating using conditional triggers)
- Mapping (where the value is read from)
Name
Variable name. This is used as the identifier for the datapoint.
Mapping
Defines where the value is read from. The mapping format depends on the connection type (for example a topic/path for MQTT, an address/node for OPC UA, etc.).
Collect type
Controls when a variable produces a datapoint.
These collect types are supported:
- Any value
Collects every value that is received/read for the variable.
Warning: On polling based protocols (for example Redis key/value), collect type Any Value will generate a lot of data. - On change
Collects only when the value changes compared to the previous value.
Note: After startup the first value will always be logged. - Timer
Collects on a fixed time interval (see Timer (ms)). - On increment
Collects only when the value increases compared to the previous value.
Note: After startup the first value will always be logged. - On decrement
Collects only when the value decreases compared to the previous value.
Note: After startup the first value will always be logged. - Hybrid
A combination of Timer and On Change: Collects on interval, but also immediately after a change.
After a change, the first interval collection is skipped. - Mirror
No data is collected, the values are only sent to the replicators (if any).
Timer (ms)
Only relevant when Collect type is Timer or Hybrid.
Defines the interval in milliseconds for collecting datapoints for the variable.
On an ADS connection the Interval is also used as the cycle time.
Condition (optional)
Variables can be gated by one or more Conditional triggers.
If conditions are configured, the variable is collected only when the condition logic evaluates to true (based on the selected combine mode).
When editing the condition configuration for a variable, you can choose:
- Always return true: bypasses condition evaluation for the variable
- Selecting one or more Condition(s)
- Selecting how multiple conditions are combined:
- AND: all selected conditions must be true
- OR: at least one selected condition must be true
Conditional triggers themselves are defined on the Conditional Triggers page for the connection.
Variable Custom Settings
The Custom settings tab is a JSON editor for advanced variable configuration. In most cases you don't need any custom settings.
These settings are supported for all variables.
| Option | Type | Example | Description |
|---|---|---|---|
FieldName | string | "FieldName": "MyVal" | Overrides the generated field name. |
FieldNamePrefix | string | "FieldNamePrefix": "Pre_" | Overrides the prefix of the generated field names (default is the variable name). Set to an empty string to only keep the dynamic part of the fieldname. Only supported with the NestedObject data type. |
AddVariableSourceTag | boolean | "AddVariableSourceTag": true | Adds a tag column containing the variable name. |
AddMappingSourceTag | boolean | "AddMappingSourceTag": true | Adds a tag column containing the full ADS mapping path. |
AddVariableSourceField | boolean | "AddVariableSourceField": true | Adds a field column containing the variable name. |
AddMappingSourceField | boolean | "AddMappingSourceField": true | Adds a field column containing the full ADS mapping path. |
VirtualTags | string[] | "VirtualTags": ["ID"] | Extracts specific parts of the variable name as tags (useful if your variable names contain metadata like Motor_ID123). |
PivotArrayIndexes | int[] | "PivotArrayIndexes": [0,3] | Can only be used with the NestedObject data type. See data types. |
Debug | boolean | "Debug": true | Enables detailed logs for this specific variable. |
See the documentation page of the connection type for which extra custom settings are available for a specific connection.
Variable additional settings (overlay)
On the Variables tab, each variable has an additional settings button (slider-style icon). Selecting it opens an overlay with per-variable additional settings.
The overlay contains these pages:
- General
- Replicators
- Static fields
- Custom settings
General
Data type
Selects how the value for this variable is interpreted/serialized.
- The available data type options are connection-type dependent.
- Example options can include
AutoandJSON, but the full set depends on the selected connection type.
See the data types page for more info.
Use as tag
When enabled, the last known value of this variable is added as a tag to all data rows generated by this measurement.
Use this when a variable represents context that should be attached to every row (for example: active recipe, current order, machine mode).
Allow cloud overrides
When enabled, this variable can be written from the cloud (cloud-to-gateway override).
This is not supported for all connection types. See the documentation on the specific connection type.
Replicators
Replicators can forward every value produced by this variable to one or more replicators (for example: an MQTT broker or an internal OPC UA server). This is per-variable routing.
Configuration on this page:
- Select which replicators (if any) receive this variable.
- For each selected replicator, configure:
- Read: values produced by the variable are sent to the replicator. Connection source (e.g. PLC) -> Capture Edge -> Replicator
- Write: the variable can be written from the replicator (only supported for connection types that support writes). Replicator -> Capture Edge -> Connection source (e.g. PLC)
Replicator concepts and setup are documented on the Replicator page.
Static fields
Static fields add hardcoded columns to the rows generated by this variable.
Each static field has:
- Name: column name.
- Value: constant value written for every row produced by this variable.
- Use as tag: if enabled, the field is written as a tag column when using an Influx local database.
Use static fields to attach fixed context to specific variables (for example: unit, sensor location, asset identifier).
Custom settings
The Custom settings page is a JSON editor for advanced per-variable options.
- The available options are connection-type dependent.
- Use this only for advanced scenarios that are not exposed through the standard UI.