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
- Exploring Basics - Getting started with address space exploration
- Explore Output Types - Understanding and using different output types
- Explore to Monitor Pattern - Discover and continuously monitor object structures
- Exploring a Subtree - Detailed subtree exploration techniques
- Tips & Best Practices - Optimization techniques
- Troubleshooting - Common problems and solutions
Quick Start
Basic Example - Explore Server Status:
- Add an Explore node to your flow
- Configure the OPC UA endpoint
- Set NodeId to
/Server/ServerStatus - Set Output Type to
Value - Add a debug node to see the structure
- 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
- Start at the specified NodeId
- Traverse following configured references
- Read values when reaching variables
- Return structured JSON object
Output Control
Control what is returned for leaf nodes (variables):
| Output Type | Returns | Use Case |
|---|---|---|
| Value | Current values | Display, analysis |
| NodeId | Node identifiers | Monitoring setup |
| DataValue | Values with metadata | Quality checking |
| BrowsePath | Navigation paths | Documentation |
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
| Parameter | Description | Default |
|---|---|---|
| Name | Node identifier | - |
| Endpoint | OPC UA server connection | - |
| NodeId | Starting point (optional) | - |
| Output Type | What to return for variables | Value |
| Follow Organizes | Follow folder references | true |
| Exclude Empty | Remove empty folders | false |
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
Related Sections
- Read - Read specific variables
- Monitor - Monitor value changes
- Browse - Browse one level at a time
- Connection - Configure server connections