OPC UA Bridge
Overview
The OPC UA Bridge enables seamless data collection from industrial equipment and systems using the OPC UA (Open Platform Communications Unified Architecture) protocol. This addon acts as a bridge between your OPC UA servers and Connhex Edge Agent, automatically gathering data from variables and events and publishing them for further processing and analysis.
OPC UA is the de facto standard for industrial communication, supported by virtually all major equipment manufacturers including Siemens, Rockwell Automation, Schneider Electric, ABB, and many others. By leveraging this universal protocol, the OPC UA Addon provides a unified approach to collecting data from diverse industrial equipment.
Key Benefits
Simplified Data Collection
- Multi-vendor support: Connect to equipment from any manufacturer that supports OPC UA
- Automatic data polling: Configure monitoring intervals and let the addon handle data collection
- Event-driven architecture: Capture real-time events from industrial processes
Flexible Configuration
- Multiple monitoring groups: Organize variables into logical groups with different parameters
- Fine-grained control: Configure sampling rates, queue sizes, and data change triggers per group or node
- Deadband filtering: Reduce unnecessary updates by filtering insignificant value changes
Use Cases
The OPC UA Addon is ideal for:
- Manufacturing execution systems: Monitor production lines, track equipment status, and collect quality metrics
- Process industries: Gather real-time data from PLCs, SCADA systems, and distributed control systems
- Predictive maintenance: Collect operational data for analysis and early fault detection
- Energy management: Monitor consumption, efficiency metrics, and environmental parameters
- Multi-site operations: Standardize data collection across facilities with different equipment vendors
Configuration
General Settings
| Parameter | Description | Default |
|---|---|---|
log_level | Logging verbosity level | "info" |
OPC UA Connection Settings
Configure the connection to your OPC UA server in the [opcua] section.
| Parameter | Description | Default |
|---|---|---|
endpoint | OPC UA server endpoint URL (e.g., opc.tcp://127.0.0.1:4840) | "opc.tcp://127.0.0.1:4840" |
security_policy | Security policy: "None", "Basic128Rsa15", "Basic256", "Basic256Sha256", or "auto" | "auto" |
security_mode | Security mode: "None", "Sign", "SignAndEncrypt", or "auto" | "auto" |
certificate | Path to certificate file (required when security is enabled) | "configs/opcua-cert.pem" |
private_key | Path to private key file (required when security is enabled) | "configs/opcua-key.pem" |
auth_method | Authentication method: "Anonymous", "UserName", or "Certificate" | "Anonymous" |
username | Username for authentication (required when auth_method = "UserName") | - |
password | Password for authentication (required when auth_method = "UserName") | - |
dial_timeout | Timeout for establishing connection (set to zero for no timeout) | "10s" |
request_timeout | Maximum time allowed for a request | "10s" |
session_timeout | Maximum session idle time | "20m" |
Listener Settings
Configure data collection behavior in the [listener] section.
| Parameter | Description | Default |
|---|---|---|
subscription_interval | Minimum interval at which the server updates monitored items | "10s" |
Variable Groups
Variable groups allow you to organize nodes into logical collections with shared monitoring parameters. Each group can publish data to a specific agent bus topic.
Group Configuration
| Parameter | Description | Default |
|---|---|---|
topic | Agent bus topic where metrics are published | "events.data" |
include_quality | Send additional metrics with _q suffix containing status codes | false |
By default (include_quality = false), the addon only collects metrics with StatusCode == 0 (Good).
Enable include_quality = true to collect all metrics regardless of their status (useful for diagnostics or when quality flags need to be processed downstream).
Monitoring Parameters
Configure monitoring behavior for all nodes in a variable group.
| Parameter | Description | Default |
|---|---|---|
queue_size | Number of samples stored between subscription intervals | 10 |
discard_oldest | Replace oldest value when queue is full (true) or replace last value (false) | true |
sampling_interval | Interval for checking data changes (0 = use server default) | "0s" |
Data Change Filter
Define conditions for reporting data changes.
| Parameter | Description |
|---|---|
trigger | Trigger condition: "Status", "StatusValue", or "StatusValueTimestamp" |
deadband_type | Deadband filter type: "Absolute" or "Percent" |
deadband_value | Deadband threshold value (negative values disable filtering) |
Trigger Options:
"Status": Report only when status changes"StatusValue": Report when status or value changes"StatusValueTimestamp": Report when status, value, or timestamp changes
Deadband Types:
"Absolute": Report when absolute change exceedsdeadband_value"Percent": Report when(last_value - current_value) > (deadband_value/100.0) * (EURange.high - EURange.low)
Node Configuration
Define individual OPC UA nodes to monitor.
| Parameter | Description | Default |
|---|---|---|
id | Node identifier (format: ns=<namespace>;<type>=<value>) | Required |
name | Metric name (uses node ID if not specified) | Node ID |
include_quality | Override group-level quality flag for this node | Group setting |
monitoring_params | Node-specific monitoring parameters (overrides group settings) | Group settings |
Node ID Types:
s=string: String identifieri=numeric: Numeric identifierg=guid: GUID identifierb=opaque: Opaque identifier
By default (include_quality = false), the addon only collects metrics with StatusCode == 0 (Good).
Enable include_quality = true to collect all metrics regardless of their status (useful for diagnostics or when quality flags need to be processed downstream).
Event Groups
Monitor OPC UA events for capturing alarms, notifications, and state changes.
| Parameter | Description | Default |
|---|---|---|
topic | Agent bus topic where events are published | "events.data" |
sampling_interval | Polling interval for event collection | Required |
queue_size | Number of events stored in notification queue | 10 |
event_node_type | Type or level of events to capture | Required |
source_names | Filter events by source name | - |
fields | Event fields to capture (e.g., "Severity", "Message", "Time") | - |
node_ids | List of nodes to monitor for events | Required |
Configuration Examples
Monitoring Variables
[listener]
subscription_interval = "10s"
[[listener.variables]]
[listener.variables.monitoring_params]
queue_size = 20
sampling_interval = "2s"
[listener.variables.monitoring_params.data_change_filter]
trigger = "StatusValue"
deadband_type = "Absolute"
deadband_value = 1.0
[[listener.variables.nodes]]
id = "ns=2;i=1001"
name = "temperature"
[[listener.variables.nodes]]
id = "ns=2;i=1002"
name = "pressure"
[[listener.variables.nodes]]
id = "ns=2;i=1003"
name = "flow_rate"
Multiple Variable Groups
[listener]
subscription_interval = "10s"
# High-frequency critical parameters
[[listener.variables]]
topic = "critical.sensors"
[listener.variables.monitoring_params]
queue_size = 50
sampling_interval = "500ms"
[listener.variables.monitoring_params.data_change_filter]
trigger = "StatusValue"
deadband_type = "Absolute"
deadband_value = 0.1
[[listener.variables.nodes]]
id = "ns=3;s=CriticalTemp"
name = "reactor_temperature"
[[listener.variables.nodes]]
id = "ns=3;s=CriticalPressure"
name = "reactor_pressure"
# Low-frequency status indicators
[[listener.variables]]
[listener.variables.monitoring_params]
queue_size = 5
sampling_interval = "30s"
[listener.variables.monitoring_params.data_change_filter]
trigger = "StatusValue"
deadband_type = "Absolute"
deadband_value = 1.0
[[listener.variables.nodes]]
id = "ns=3;s=MotorStatus"
name = "pump_status"
[[listener.variables.nodes]]
id = "ns=3;s=ValvePosition"
name = "valve_position"
Per-Node Custom Monitoring
[listener]
subscription_interval = "10s"
[[listener.variables]]
[listener.variables.monitoring_params]
queue_size = 10
sampling_interval = "5s"
[listener.variables.monitoring_params.data_change_filter]
trigger = "StatusValue"
deadband_type = "Absolute"
deadband_value = 1.0
# Standard monitoring
[[listener.variables.nodes]]
id = "ns=2;i=2001"
name = "ambient_temp"
# Custom fast sampling for critical sensor
[[listener.variables.nodes]]
id = "ns=2;i=2002"
name = "core_temp"
[listener.variables.nodes.monitoring_params]
sampling_interval = "1s"
queue_size = 100
[listener.variables.nodes.monitoring_params.data_change_filter]
deadband_value = 0.1
# Slow sampling for stable value
[[listener.variables.nodes]]
id = "ns=2;i=2003"
name = "tank_level"
[listener.variables.nodes.monitoring_params]
sampling_interval = "60s"
Best Practices
Performance Optimization
- Choose appropriate sampling intervals: Balance between data freshness and system load
- Use deadband filtering: Reduce network traffic by filtering insignificant changes
- Size queues appropriately: Increase queues size only if needed
- Group related variables: Organize nodes with similar update requirements into the same group
Monitoring Strategy
- Enable quality flags for critical data: Use
include_quality = trueonly for sensors where also invalid data needs to be collected - Monitor different data types separately: Create separate variable groups for fast-changing and stable values