This guide will help you to get familiar with OPC-UA connector configuration for ThingsBoard IoT Gateway. Use general configuration to enable this extension. We will describe connector configuration file below.
Example of OPC-UA Connector config file. Press to expand.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{
"server": {
"name": "OPC-UA Default Server",
"url": "localhost:4840/freeopcua/server/",
"timeoutInMillis": 5000,
"scanPeriodInMillis": 5000,
"disableSubscriptions":false,
"subCheckPeriodInMillis": 100,
"showMap": false,
"security": "Basic128Rsa15",
"identity": {
"type": "anonymous"
},
"mapping": [
{
"deviceNodePattern": "Root\\.Objects\\.Device1",
"deviceNamePattern": "Device ${Root\\.Objects\\.Device1\\.serialNumber}",
"attributes": [
{
"key": "CertificateNumber",
"path": "${ns=2;i=5}"
}
],
"timeseries": [
{
"key": "temperature °C",
"path": "${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Temperature}"
},
{
"key": "batteryLevel",
"path": "${Battery\\.batteryLevel}"
}
],
"rpc_methods": [
{
"method": "multiply",
"arguments": [2, 4]
}
],
"attributes_updates": [
{
"attributeOnThingsBoard": "deviceName",
"attributeOnDevice": "Root\\.Objects\\.Device1\\.serialNumber"
}
]
}
]
}
}
Section “server”
Configuration in this section uses for connecting to OPC-UA server.
参数 | Default value | 描述 |
---|---|---|
name | OPC-UA Default Server | Name of 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 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 an example.
In 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, in the OPC-UA Connector configuration file (opcua.json), 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 simplest.
This part of configuration will look like:
|
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 for identity is safest.
Optionally, you can provide the username/password pair. This part of configuration will look like:
|
Section “mapping”
This configuration section contains array of nodes that the gateway will subscribe to after connecting to the OPC-UA server and settings about processing data from these nodes.
参数 | Default value | 描述 |
---|---|---|
deviceNodePattern | Root\.Objects\.Device1 | Regular expression, uses for looking the node for a current device. |
deviceNamePattern | Device ${Root\.Objects\.Device1\.serialNumber} | Path to variable with device name, uses for looking the device name in some variable. |
This part of configuration will look like:
1
2
"deviceNodePattern": "Root\\.Objects\\.Device1",
"deviceNamePattern": "Device ${Root\\.Objects\\.Device1\\.serialNumber}",
Optionally, you can add in this section parameter “converter” for using custom converter.
Let’s look an example.
Specify deviceNodePattern as on our test server. In this example it is “Root\.Objects\.Simulation”.
deviceNamePattern specify 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 see the new device Device OPC-UA in your ThingsBoard instance.
Subsection “attributes”
This subsection contains configurations for variables of the object, that will be interpreted as attributes for the device.
参数 | Default value | 描述 |
---|---|---|
key | CertificateNumber | Tag, that will interpreted as attribute for ThingsBoard platform instance. |
path | ${ns=2;i=5} | Name of the variable in the OPC-UA object, uses for looking the value in some variable. ** * ** |
** * ** You can put here some expression for search 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 configuration will look like:
1
2
3
4
5
6
"attributes": [
{
"key": "CertificateNumber",
"path": "${ns=2;i=5}"
}
],
Let’s look 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 must see the attributes you 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.
参数 | Default value | 描述 |
---|---|---|
key | temperature °C | Tag, that will interpreted as telemetry for ThingsBoard platform instance. |
path | ${Root\.Objects\.Device1\.TemperatureAndHumiditySensor\.Temperature} | Name of the variable in the OPC-UA object, uses for looking the value in some variable. ** * ** |
** * ** You can put here some expression for search 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 configuration will look like:
1
2
3
4
5
6
"timeseries": [
{
"key": "temperature °C",
"path": "${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Temperature}"
}
],
Let’s look an example.
Replace “path” value to the “NodeId” value, 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 must see the telemetry you 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.
参数 | Default value | 描述 |
---|---|---|
method | multiply | Name of method on OPC-UA server. |
arguments | [2,4] | Arguments for the method (if this parameter doesn’t exist, arguments will take from rpc request). |
This part of configuration will look like:
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.
参数 | Default value | 描述 |
---|---|---|
attributeOnThingsBoard | deviceName | Name of server side argument. |
attributeOnDevice | Root\.Objects\.Device1\.serialNumber | Name of variable that will change itself value with a value from attribute update request. |
This part of configuration will look like:
1
2
3
4
5
6
"attributes_updates": [
{
"attributeOnThingsBoard": "deviceName",
"attributeOnDevice": "Root\\.Objects\\.Device1\\.serialNumber"
}
]
Let’s look an example.
Suppose you want to set the value of the “deviceName” attribute. Currently, the attribute hasn’t any value.
In the OPC-UA Connector configuration file (opcua.json) change “attributeOnDevice” value to the full path to the node “deviceName”.
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.