This guide will help you to get familiar with OPC-UA connector configuration for ThingsBoard IoT Gateway. Use general configuration to enable this extension. The connector configuration file will be described below.
Example of OPC-UA Connector config file.
Section “server”
The configuration in this section is used to connect to the OPC-UA server.
Parameter | Default value | Description |
---|---|---|
name | OPC-UA Default Server | Name of the connector to server. |
host | localhost:4840/freeopcua/server/ | Hostname or ip address of OPC-UA server. |
timeoutInMillis | 5000 | Timeout in seconds for connecting to OPC-UA server. |
scanPeriodInMillis | 5000 | Period in milliseconds to rescan the server. |
disableSubscriptions | false | If true - the gateway will subscribe to interesting nodes and wait for data update and if false - the gateway will rescan OPC-UA server every scanPeriodInMillis |
subCheckPeriodInMillis | 100 | Period to check the subscriptions in the OPC-UA server. |
showMap | true | Show nodes on scanning true or false. |
security | Basic128Rsa15 | Security policy (Basic128Rsa15, Basic256, Basic256Sha256) |
Let’s look at an example.
This example uses the Prosys OPC-UA Simulation Server to demonstrate how to configure the OPC-UA connector.
On the main “Status” tab, copy connection address (UA TCP).
To connect your OPC-UA server to ThingsBoard, open the OPC-UA Connector configuration file (opcua.json) and replace the “url” value with the copied connection address.
Our server section would look like this:
1
2
3
4
5
6
7
8
9
"server": {
"name": "OPC-UA Default Server",
"url": "localhost:53530/OPCUA/SimulationServer",
"timeoutInMillis": 5000,
"scanPeriodInMillis": 5000,
"disableSubscriptions": false,
"subCheckPeriodInMillis": 100,
"showMap": false,
"security": "Basic128Rsa15",
Subsection “identity”
There are several types available for this subsection:
- anonymous
- username
- cert.PEM
This option of identity subsection is the simplest.
This part of configuration will look like this:
|
Using this option you can provide the username and password for connection to OPC-UA server.
This part of configuration will look like:
|
This option of identity subsection is the safest.
Optionally, you can provide the username/password pair. This part of configuration will look like:
|
Section “mapping”
This configuration section contains an array of nodes that the gateway will subscribe to after connecting to the OPC-UA server, along with settings for processing data from these nodes.
Parameter | Default value | Description |
---|---|---|
deviceNodePattern | Root\.Objects\.Device1 | Regular expression, is used for looking the node for a current device. |
deviceNamePattern | Device ${Root\.Objects\.Device1\.serialNumber} | Path to a variable with device name, is used for looking the device name in some variable. |
This part of the configuration will look like this:
1
2
"deviceNodePattern": "Root\\.Objects\\.Device1",
"deviceNamePattern": "Device ${Root\\.Objects\\.Device1\\.serialNumber}",
Optionally, in this section, you can add the “converter” parameter to use a custom converter.
Let’s look at an example.
Specify deviceNodePattern as it is on our test server. In this example it is “Root\.Objects\.Simulation”.
deviceNamePattern should be specified as “Device OPC-UA”.
In this example, the mapping section would look like this:
1
2
"deviceNodePattern": "Root\\.Objects\\.Simulation",
"deviceNamePattern": "Device OPC-UA",
After running ThingsBoard IoT gateway, you will see the new Device OPC-UA device in your ThingsBoard instance.
Subsection “attributes”
This subsection contains configurations for variables of the object, that will be interpreted as attributes for the device.
Parameter | Default value | Description |
---|---|---|
key | CertificateNumber | Tag, that will be interpreted as attribute for the ThingsBoard platform instance. |
path | ${ns=2;i=5} | Name of the variable in the OPC-UA object is used for looking up the value within a specific variable. ** * ** |
** * ** You can input some expressions for search here, like:
- Full path to node - ${Root\.Objects\.Device1\.TemperatureAndHumiditySensor\.CertificateNumber}
- Relative path from device object - ${TemperatureAndHumiditySensor\.CertificateNumber}
- Some regular expression to search - ${Root\.Objects\.Device\d*\.TemperatureAndHumiditySensor\.CertificateNumber}
- Namespace identifier and node identifier - ${ns=2;i=5}
This part of the configuration will look like this:
1
2
3
4
5
6
"attributes": [
{
"key": "CertificateNumber",
"path": "${ns=2;i=5}"
}
],
Let’s look at an example.
In the “path” line set the NodeId value taken from our test server.
In this example, the attributes section would look like this:
1
2
3
4
5
6
7
8
9
10
"attributes": [
{
"key": "model",
"path": "${ns=3;i=1008}"
},
{
"key": "CertificateNumber",
"path": "${ns=3;i=1007}"
}
],
You should be able to see the attributes you have sent to ThingsBoard in the Attributes section of your device:
Subsection “timeseries”
This subsection contains configurations for variables of the object, that will be interpreted as telemetry for the device.
Parameter | Default value | Description |
---|---|---|
key | temperature °C | Tag, that will be interpreted as telemetry for ThingsBoard platform instance. |
path | ${Root\.Objects\.Device1\.TemperatureAndHumiditySensor\.Temperature} | Name of the variable in the OPC-UA object is used for looking up the value within a specific variable. ** * ** |
** * ** You can input some expressions for search here, like:
- Full path to node - ${Root\.Objects\.Device1\.TemperatureAndHumiditySensor\.Temperature}
- Relative path from device object - ${TemperatureAndHumiditySensor\.Temperature}
- Some regular expression to search - ${Root\.Objects\.Device\d*\.TemperatureAndHumiditySensor\.Temperature}
- Namespace identifier and node identifier - ${ns=2;i=5}
This part of the configuration will look like this:
1
2
3
4
5
6
"timeseries": [
{
"key": "temperature °C",
"path": "${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Temperature}"
}
],
Let’s look at an example.
Replace the “path” value with the “NodeId” value. This is a relative path from device object or Display Name identifier taken from our test server.
In this example, the timeseries section would look like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
"timeseries": [
{
"key": "humidity",
"path": "${Counter}"
},
{
"key": "pressure",
"path": "${Root\\.Objects\\.Simulation\\.Triangle}"
},
{
"key": "temperature °C",
"path": "${ns=3;i=1002}"
}
],
You should be able to see the telemetry you have sent to ThingsBoard in the Latest telemetry section of your device:
Subsection “rpc_methods”
This subsection contains configuration for RPC request from ThingsBoard platform instance.
Parameter | Default value | Description |
---|---|---|
method | multiply | Name of method on OPC-UA server. |
arguments | [2,4] | Arguments for the method (if this parameter doesn’t exist, arguments will be taken from RPC request). |
This part of configuration will look like this:
1
2
3
4
5
6
"rpc_methods": [
{
"method": "multiply",
"arguments": [2, 4]
}
]
Subsection “attributes_updates”
This subsection contains configuration for attribute updates request from ThingsBoard platform instance.
Parameter | Default value | Description |
---|---|---|
attributeOnThingsBoard | deviceName | Name of a server side argument. |
attributeOnDevice | Root\.Objects\.Device1\.serialNumber | Name of a variable that will change its own value with a value from attribute update request. |
This part of configuration will look like this:
1
2
3
4
5
6
"attributes_updates": [
{
"attributeOnThingsBoard": "deviceName",
"attributeOnDevice": "Root\\.Objects\\.Device1\\.serialNumber"
}
]
Let’s look at an example.
Suppose you want to set the value of the “deviceName” attribute. Currently, the attribute doesn’t have any value.
In the OPC-UA Connector configuration file (opcua.json) change “attributeOnDevice” value to the full path to the “deviceName” node.
In this example it is “Root\.Objects\.Simulation\.deviceName”.
Our attributes_updates section would look like this:
1
2
3
4
5
6
"attributes_updates": [
{
"attributeOnThingsBoard": "deviceName",
"attributeOnDevice": "Root\\.Objects\\.Simulation\\.deviceName"
}
]
Go to “Shared attributes” and create a new one for your device in the ThingsBoard instance.
Specify the key name - deviceName, value type - String, string value - Device OPC-UA.
Now go to OPC UA server and make sure the value of the deviceName node is updated.
Next steps
Explore guides related to main ThingsBoard features:
- How to connect OPC-UA server to the gateway
- ThingsBoard IoT Gateway Features
- Data Visualization - how to visualize collected data.
- Device attributes - how to use device attributes.
- Telemetry data collection - how to collect telemetry data.
- Using RPC capabilities - how to send commands to/from devices.
- Rule Engine - how to use rule engine to analyze data from devices.