Create OPC-UA Thing Description
See Things documentation on how to manage Things in Studio.
A Thing for this device driver uses a schema as described on this page.
Once it exists in Studio it can be synced to the cluster (asset) as shown on the Sync Things page.
The following is an example of a Thing description to be instantiated by the OPC-UA driver:
{
"@type": [
"swx:opcua,endpoint=opc.tcp://localhost:26543,interval=1000"
],
"id": "<leave blank when creating a thing>",
"title": "My OPCUA Test Device",
"category": "<set to the cloud category to be used>",
"properties": {
"ns=1;s=Temperature": {
"@type": "float64",
"title": "Temperature",
"type": "number",
"readOnly": true
},
"opcuaInterval": {
"title": "Reporting Interval",
"type": "integer",
"readOnly": false
}
}
}
- the "swx:opcua,endpoint=opc.tcp://..." string in the "@type" array
- the "ns=1;s=Temperature" property key
The first item is essential for the OPC-UA driver to recognise this Thing description as a OPC-UA device. Details on how to construct this string can be found in the next section.
The second item is essential for the OPC-UA driver to recognise the node it needs to manage. Details on how to construct property keys and the rest of the property object can be found in a subsequent section.
Construct the "swx:opcua,endpoint=opc.tcp://..." "@type"
The following element in the "@type"` array is required to configure the OPC-UA endpoint. It is comma-separated string of parameters. The element has to start with swx:opcua.
"swx:opcua,endpoint=opc.tcp://localhost:26543,interval=1000"
The remaining items in the comma-separated list are key value pairs separated by equal signs. The following keys are allowed:
- endpoint
- required: this is the endpoint of the OPC-UA server
- interval
- optional (default 30000): the subscription interval in milliseconds
It is recommended to only set the basic options and leave the advanced ones to the default values. If the OPC-UA server does not allow self-signed certs to be used by clients then the advanced options can be used.
- mode
- optional (default "auto"): the security mode to use, available options "auto", "None", "Sign", "SignAndEncrypt"
- policy
- optional (default "auto"): the security policy to use, available options "auto", "None", "Basic128Rsa15", "Basic256", "Basic256Sha256", "Aes128_Sha256_RsaOaep", "Aes256_Sha256_RsaPss"
- autogencert
- optional (default true): auto generate a self-signed cert if no certfile/keyfile are specified
- certfile
- optional: a public cert to use for communication with the endpoint
- keyfile
- optional: the private key of the public cert
- auth
- optional (default "Anonymous"): the authentication method for the connection to the server. Available options include "Anonymous", "Username", and "Certificate."
- username
- optional: needed when authentication method is set to Username
- password
- optional: needed when authentication method is set to Username
If either mode
or policy
are set to
None
then they will both be treated as set to
None
.
If both mode
and policy
are set to
auto
then the highest available security mode and level as
recommended by the server will be used.
If only policy
is set to auto
then the highest
available security level with the requested mode
will be used.
If only mode
is set to auto
then the highest
available security level with the requested policy
will be
used.
If no authentication method is configured, a UserIdentityToken
for
anonymous authentication will be set.
Construct a Property
The nodes to report are specified as keys in Properties section. Example below:
"ns=1;s=Temperature": {
"@type": "float64",
"title": "Temperature",
"type": "number",
"readOnly": true
},
The corresponding section of node discovery report is the following:
"Objects": {
"MyDevices": {
"Temperature": {
"BrowseName": "Temperature",
"DataType": "float64",
"Description": "",
"DisplayName": "Temperature",
"NodeID": "ns=1;s=Temperature",
"Value": 34.52512524858854,
"Writable": false
},
The complete NodeID
should be used at the property key of the Thing
description.
The @type
is the DataType
returned in the
report.
The readOnly
should be set to true if Writable
is
false (and vice versa).
The type
can be determined from the DataType
where
available options are number
, integer
,
string
, etc (see the Web-of-Things Modelling section).
If it is desirable to change the subscription interval on-the-fly, then the
opcuaInterval
property as shown in the example of the
introduction should be included in the Thing description.