Skip to main content

Explore

The OPC UA Explore node enables discovery and navigation of an OPC UA server's address space. It traverses the hierarchical structure of objects, variables, and methods, returning the results as a JSON object that mirrors the server's organization.

Overview

The Explore node helps you understand what data is available on an OPC UA server and how it's structured. Unlike browsing which shows one level at a time, the Explore node recursively traverses the address space and returns a complete structure in a single operation.

Key Features:

  • Recursive Exploration: Automatically traverse entire subtrees
  • Multiple Output Types: Return values, NodeIds, browse paths, or metadata
  • Flexible Input: Static configuration or dynamic injection
  • Filtering Options: Control depth, exclude empty nodes, follow specific references
  • Direct Integration: Connect output to Monitor node for automatic monitoring setup

Tutorials

Quick Start

Basic Example - Explore Server Status:

  1. Add an Explore node to your flow
  2. Configure the OPC UA endpoint
  3. Set NodeId to /Server/ServerStatus
  4. Set Output Type to Value
  5. Add a debug node to see the structure
  6. Deploy and inject a message

The node returns the complete ServerStatus structure with all current values.

Exploration Concepts

Address Space Hierarchy

The OPC UA address space is organized hierarchically:

Objects (root)
├── Server
│ ├── ServerStatus
│ │ ├── StartTime
│ │ ├── CurrentTime
│ │ └── BuildInfo
│ │ ├── ProductName
│ │ └── SoftwareVersion
│ └── ServerCapabilities
└── Equipment
└── Reactor1
├── Temperature
├── Pressure
└── Status

Node Types

Objects: Containers for other nodes (equipment, systems, folders) Variables: Data points with values (temperature, pressure, status) Methods: Callable functions ObjectTypes: Templates for objects

Exploration Behavior

  1. Start at the specified NodeId
  2. Traverse following configured references
  3. Read values when reaching variables
  4. Return structured JSON object

Output Control

Control what is returned for leaf nodes (variables):

Output TypeReturnsUse Case
ValueCurrent valuesDisplay, analysis
NodeIdNode identifiersMonitoring setup
DataValueValues with metadataQuality checking
BrowsePathNavigation pathsDocumentation

Use Cases

Monitoring Setup

Explore equipment and automatically configure monitoring:

// Explore with NodeId output
msg.outputType = "NodeId";
msg.nodeId = "ns=2;s=Equipment.Reactor1";
// Connect to Monitor node

Data Discovery

Find what data is available on the server:

// Explore with Value output
msg.outputType = "Value";
msg.nodeId = "ns=2;s=Equipment";

Documentation Generation

Create documentation of available variables:

// Explore with AliasedBrowsePath output
msg.outputType = "AliasedBrowsePath";
msg.nodeId = "/Objects";

System Health Check

Check data quality across the system:

// Explore with DataValue output
msg.outputType = "DataValue";
// Analyze statusCode for each variable

Configuration Parameters

Common Settings

ParameterDescriptionDefault
NameNode identifier-
EndpointOPC UA server connection-
NodeIdStarting point (optional)-
Output TypeWhat to return for variablesValue
Follow OrganizesFollow folder referencestrue
Exclude EmptyRemove empty foldersfalse

Input Properties

Override configuration via message properties:

{
"nodeId": "ns=2;s=Equipment.Reactor1",
"outputType": "NodeId",
"followOrganizes": true,
"excludeEmpty": true
}

Output Structure

The Explore node returns a JSON object that mirrors the server's structure:

Input:

msg.nodeId = "/Server/ServerStatus/BuildInfo";
msg.outputType = "Value";

Output:

{
"payload": {
"ProductUri": "urn:MyServer",
"ManufacturerName": "ACME Corp",
"ProductName": "MyServer",
"SoftwareVersion": "1.0.0",
"BuildNumber": "12345",
"BuildDate": "2024-01-01T00:00:00.000Z"
}
}

NodeId Specification

Multiple ways to specify what to explore:

Static Configuration

// In node settings
nodeId: "ns=1;s=Equipment.Reactor1"

Dynamic Injection

// Via topic
msg.topic = "ns=1;s=Equipment.Reactor1";

// Via nodeId property
msg.nodeId = "ns=1;s=Equipment.Reactor1";

// Browse path
msg.topic = "/Server/ServerStatus";

Priority: msg.nodeId → msg.topic → configured NodeId

Tips & Best Practices

Start with Small Subtrees

Begin with specific equipment rather than the entire server:

Good:

nodeId: "ns=2;s=Equipment.Reactor1"

Avoid:

nodeId: "i=85"  // Objects folder - entire server!

Use Appropriate Output Types

Match output type to your use case:

  • Monitoring: Use NodeId
  • Display: Use Value
  • Quality Check: Use DataValue
  • Documentation: Use AliasedBrowsePath

Cache Exploration Results

Structure rarely changes - cache to improve performance:

const cached = flow.get('structure_cache');
if (cached && Date.now() - cached.timestamp < 3600000) {
msg.payload = cached.structure;
return msg;
}

Limit Exploration Depth

Prevent excessive exploration by using specific NodeIds:

// Use specific equipment NodeIds instead of root nodes
msg.nodeId = "ns=2;s=Equipment.Reactor1";

Exclude Empty Nodes

Clean up output by removing empty folders:

msg.excludeEmpty = true;

Common Patterns

Explore → Monitor

// 1. Explore with NodeId
msg.outputType = "NodeId";

// 2. Send to Monitor node
// Monitor automatically subscribes to all variables

Explore → Read

// 1. Explore to find NodeIds
msg.outputType = "NodeId";

// 2. Extract NodeIds
// 3. Read specific variables

Explore → Analyze

// 1. Explore with Value
msg.outputType = "Value";

// 2. Process structure
// 3. Generate reports/alerts

Troubleshooting

No Results Returned

  • Verify NodeId exists and is correct
  • Check endpoint connection
  • Try Server object: i=2253
  • Check followOrganizes setting

Too Much Data

  • Use more specific starting NodeId
  • Enable excludeEmpty
  • Set followOrganizes to false

Missing Variables

  • Set followOrganizes to true
  • Check server permissions
  • Verify NodeId is correct
  • Try exploring from parent node

Performance Issues

  • Reduce exploration scope
  • Use more specific NodeIds
  • Cache results
  • Use excludeEmpty
  • Read - Read specific variables
  • Monitor - Monitor value changes
  • Browse - Browse one level at a time
  • Connection - Configure server connections

Resources