Create OPC-UA Thing Description

See Things documentation on how to manage Things in Altair IoT 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
        }
    }
}
There are two important items to note here:
  1. the "swx:opcua,endpoint=opc.tcp://..." string in the "@type" array
  2. 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.

Note: Without the "category" Property the Thing can not synchronize from the edge to the cloud.

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:

Basic:
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.

Advanced:
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.