Skip to main content

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

ParameterDescriptionDefault
log_levelLogging verbosity level"info"

OPC UA Connection Settings

Configure the connection to your OPC UA server in the [opcua] section.

ParameterDescriptionDefault
endpointOPC UA server endpoint URL (e.g., opc.tcp://127.0.0.1:4840)"opc.tcp://127.0.0.1:4840"
security_policySecurity policy: "None", "Basic128Rsa15", "Basic256", "Basic256Sha256", or "auto""auto"
security_modeSecurity mode: "None", "Sign", "SignAndEncrypt", or "auto""auto"
certificatePath to certificate file (required when security is enabled)"configs/opcua-cert.pem"
private_keyPath to private key file (required when security is enabled)"configs/opcua-key.pem"
auth_methodAuthentication method: "Anonymous", "UserName", or "Certificate""Anonymous"
usernameUsername for authentication (required when auth_method = "UserName")-
passwordPassword for authentication (required when auth_method = "UserName")-
dial_timeoutTimeout for establishing connection (set to zero for no timeout)"10s"
request_timeoutMaximum time allowed for a request"10s"
session_timeoutMaximum session idle time"20m"

Listener Settings

Configure data collection behavior in the [listener] section.

ParameterDescriptionDefault
subscription_intervalMinimum 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

ParameterDescriptionDefault
topicAgent bus topic where metrics are published"events.data"
include_qualitySend additional metrics with _q suffix containing status codesfalse
info

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.

ParameterDescriptionDefault
queue_sizeNumber of samples stored between subscription intervals10
discard_oldestReplace oldest value when queue is full (true) or replace last value (false)true
sampling_intervalInterval for checking data changes (0 = use server default)"0s"

Data Change Filter

Define conditions for reporting data changes.

ParameterDescription
triggerTrigger condition: "Status", "StatusValue", or "StatusValueTimestamp"
deadband_typeDeadband filter type: "Absolute" or "Percent"
deadband_valueDeadband 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 exceeds deadband_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.

ParameterDescriptionDefault
idNode identifier (format: ns=<namespace>;<type>=<value>)Required
nameMetric name (uses node ID if not specified)Node ID
include_qualityOverride group-level quality flag for this nodeGroup setting
monitoring_paramsNode-specific monitoring parameters (overrides group settings)Group settings

Node ID Types:

  • s=string: String identifier
  • i=numeric: Numeric identifier
  • g=guid: GUID identifier
  • b=opaque: Opaque identifier
info

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.

ParameterDescriptionDefault
topicAgent bus topic where events are published"events.data"
sampling_intervalPolling interval for event collectionRequired
queue_sizeNumber of events stored in notification queue10
event_node_typeType or level of events to captureRequired
source_namesFilter events by source name-
fieldsEvent fields to capture (e.g., "Severity", "Message", "Time")-
node_idsList of nodes to monitor for eventsRequired

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 = true only 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