产品定价 立即试用
IoT网关
文档 > 配置指南 > OPC-UA连接器
入门
安装
目录

OPC-UA连接器配置

概述

本文档将帮助您为ThingsBoard物联网网关设置OPC-UA连接器。我们将用简单的术语解释配置参数,使您易于理解和操作。OPC-UA(开放平台通信统一架构)是一种用于工业自动化的机器间通信协议,该连接器可以实现与ThingsBoard平台的无缝集成。使用通用配置来启用此连接器。

此外,如果您是ThingsBoard物联网网关的新用户,建议您阅读入门指南以了解ThingsBoard物联网网关的基本概念及其与OPC-UA协议的工作方式。

该连接器可以通过用户界面表单进行配置,帮助您建立与OPC-UA服务器的连接、采集数据并向节点写入数据。让我们来看看所有可用的设置,并逐一进行清晰的解释。这将帮助您了解一切是如何工作的。

文档信息图标

请注意: 要访问网关的实际UI——您需要在添加连接器之前已连接网关。否则,您将看到旧版UI。

配置模式

OPC-UA连接器可以在两种模式下进行配置:基础模式高级模式

  • 基础模式专为ThingsBoard物联网网关新用户设计,允许以最少的配置快速设置连接器。它提供了一个包含基本设置的简化界面。
  • 高级模式适用于需要对配置进行更多控制的经验丰富的用户。它提供了额外的选项和灵活性,适用于高级用例。
文档信息图标

请注意: 如果您是物联网网关的新用户,请使用”基础”配置模式。如果您熟悉物联网网关的配置, 可以使用”高级”配置模式。

您可以使用配置页面顶部的切换按钮在这些模式之间切换:

image

通用设置

本配置部分包含 connector 的通用设置,例如:

  • Name - 用于日志和保存到持久化设备的 connector 名称;
  • Logs configuration(日志配置) - 本地和远程日志设置:
    • Enable remote logging - 为 connector 启用远程日志;
    • Logging level - 本地和远程日志级别:NONE、ERROR、CRITICAL、WARNING、INFO、DEBUG、TRACE;
  • Report strategy - 向 ThingsBoard 发送数据的策略:
    • Report period - 向 ThingsBoard 发送数据的周期(毫秒);
    • Type - report strategy 类型:
      • On report period - 在上报周期后向 ThingsBoard 发送数据;
      • On value change - 值变化时向 ThingsBoard 发送数据;
      • On value change or report period - 值变化或到达上报周期时向 ThingsBoard 发送数据;
      • On received - 从设备接收数据后向 ThingsBoard 发送数据(默认策略)。
文档信息图标

更多关于 report strategy 的信息请参见此处

image

文档信息图标

设置中的”通用”选项卡在基础配置和高级配置中相同。

连接设置

连接设置定义了OPC-UA连接器如何与OPC-UA服务器建立和维护通信。这些设置涵盖了基本连接参数、服务器发现行为、安全配置和身份认证模式。

服务器

本小节指定目标OPC-UA服务器以及网关与其交互的方式。它包括服务器的URL、超时设置、扫描间隔,以及使用订阅或轮询来监控数据节点的选项。

此配置部分包含 OPC-UA 服务器连接设置,例如:

  • Server endpoint url(服务器端点 URL)- OPC-UA 服务器的主机名或 IP 地址;
  • Timeout in milliseconds(超时毫秒数)- 连接 OPC-UA 服务器的超时时间(毫秒);
  • Security policy(安全策略)- 安全策略(Basic128Rsa15Basic256Basic256Sha256);
  • Scan period in milliseconds(扫描周期毫秒数)- 重新扫描服务器的周期(毫秒);
  • Poll period(轮询周期)- 轮询服务器的周期(毫秒);
  • Subscription check period in milliseconds(订阅检查周期毫秒数)- 检查 OPC-UA 服务器中 subscription 的周期;
  • Enable subscription(启用订阅)- 若为 true 则网关订阅相关节点并等待数据更新,若为 false 则每 scanPeriodInMillis 重新扫描 OPC-UA 服务器;
  • Show map(显示映射)- 扫描时是否显示节点:truefalse
文档信息图标

所有配置参数列表及详细说明请参见高级配置部分。

image

安全

OPC-UA 服务器连接提供三种安全类型:

  • Anonymous(匿名)- 最简单的 identity 选项;

  • Basic(基本)- 使用此选项可提供用户名和密码以连接 OPC-UA 服务器;

  • Certificates(证书)- 最安全的 identity 选项。使用此选项还可提供网关所在机器上证书、私钥和 CA 证书的路径。可选地,可提供用户名/密码对。

数据映射

数据映射是一个允许您配置OPC-UA服务器中的哪个节点将分配给ThingsBoard中哪个设备的部分。 您还可以使用此部分来配置哪些数据将作为设备属性或遥测发送。 数据映射包含灵活设备和数据管理所需的所有设置。

以下参数用于配置设备的基础节点、名称和配置文件,以及上报策略:

  • Device node -设备的基础节点。设备名称、配置文件、属性和遥测的路径可以相对于此节点指定。
  • Device name -设备在ThingsBoard中的名称。可以指定为节点的路径或标识符,也可以指定为静态值(有关类型的更多信息,请参阅附加信息部分)。
  • Device profile -设备在ThingsBoard中的配置文件。可以指定为节点的路径或标识符,也可以指定为静态值(有关类型的更多信息,请参阅附加信息部分)。
  • Report strategy -向ThingsBoard发送数据的策略:
    • Report period -向ThingsBoard发送数据的周期(毫秒);
    • Type -上报策略类型:
      • On report period -在上报周期后向ThingsBoard发送数据;
      • On value change -当值发生变化时向ThingsBoard发送数据;
      • On value change or report period -当值发生变化或上报周期到达后向ThingsBoard发送数据;
      • On received -从设备接收到数据后向ThingsBoard发送数据(默认策略)。

image

要添加新设备,请执行以下步骤:

文档信息图标

有关上报策略的更多信息,请参阅此处

所有配置参数列表及其详细描述可以在高级配置部分找到。

更多使用示例可以在使用示例部分找到。

“属性”和”时间序列”子节

本小节中的配置提供了从OPC-UA节点处理数据的设置。这些设置将在ThingsBoard平台实例中被解释为设备的属性/时间序列。

以下参数用于配置设备属性和时间序列:

  • Key - ThingsBoard中属性/时间序列的键。可以指定为静态值。
  • Type - Value字段中表达式的类型(有关类型的更多信息,请参阅附加信息部分):
    • Path -可以是OPC-UA服务器中节点的绝对路径或相对路径。值将从指定路径的节点获取。
    • Identifier -可以是OPC-UA服务器中节点的数字、字符串、字节串或GUID标识符。值将从指定标识符的节点获取。
    • Constant -将作为属性/时间序列键发送到设备的静态值。
  • Value -将发送到平台设备的属性/时间序列的值。应根据所选类型(Path、Identifier或Constant)进行指定。
文档信息图标

所有配置参数列表及其详细描述可以在高级配置部分找到。

更多使用示例可以在使用示例部分找到。

image

To add new time series or attribute key, follow these steps:

  • Click the “pencil” icon in the “Attributes” section to add new attribute key;

  • Click on “Add attribute” in the opened window;

  • Enter the “Key” field, select the “Type” (can be path, identifier or constant), enter “Value” and click “Apply” button;

  • Now click on the “pencil” icon in the “Time series” section to add new time series key;

  • Click on “Add time series” in the opened window;

  • Enter the “Key” field, select the “Type” (can be path, identifier or constant), enter “Value” and click “Apply” button.

您可为每个 time series 或 attribute 启用特定的上报策略。该策略定义数据发送到 ThingsBoard 服务器的频率。可用策略如下:

  • On report period(按上报周期)- 在上报周期后向 ThingsBoard 发送数据;
  • On value change(按值变化)- 当值变化时向 ThingsBoard 发送数据;
  • On value change or report period(按值变化或上报周期)- 当值变化或在上报周期后向 ThingsBoard 发送数据;
  • On received(按接收)- 从设备接收数据后向 ThingsBoard 发送数据(默认策略)。
文档信息图标

有关 report strategy 的更多信息请参见此处

image

使用示例

设备名和配置文件可根据节点值动态设置。本示例使用绝对路径指定设备名和配置文件。

以下示例使用 Prosys OPC-UA 仿真服务器,地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。服务器结构如下:

image

我们关注节点 “DeviceModelName” 和 “DeviceSeries“。将用它们分别设置设备名和配置文件。

在 OPC-UA 连接器中配置设备名和配置文件。按以下步骤操作:

  • 在右侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择已创建的 OPC-UA 连接器,点击“数据映射”标签。首先配置父(或设备)节点。点击“+ 添加映射”按钮。

  • 在打开的窗口中,“设备节点”填 Root\.Objects\.DemoDevice,“来源”选“Path”。这是要创建设备的父节点的绝对路径。

  • 名称”填 ${Root\.Objects\.DemoDeviceInfo\.DeviceModelName},“来源”选“Path”。这是包含设备名的节点的绝对路径。

  • 配置文件名称”填 ${Root\.Objects\.DemoDeviceInfo\.DeviceSeries},“来源”选“Path”。这是包含设备配置的节点的绝对路径。

  • 还需至少添加一个属性/时序数据,因为连接器不会添加无可读数据的设备(可使用任意预装的 Prosys OPC-UA 仿真服务器节点)。点击“属性”旁的“铅笔”图标。

  • 在打开的窗口中,点击“添加属性”按钮并按对应图片填写字段。

  • 记得点击“保存”按钮保存更改。

可以检查设备名和配置文件是否正确设置。进入“实体”→“设备”,设备名应为 Demo Device,配置文件为 Demo Series

image

若使用高级配置模式并需用绝对路径设置设备名和配置文件,可使用以下配置:

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
{
  "name": "OPC-UA",
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "pollPeriodInMillis": 5000,
    "enableSubscriptions": false,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    }
  },
  "mapping": [
    {
      "deviceNodeSource": "path",
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceInfo": {
        "deviceNameExpression": "${Root\\.Objects\\.DemoDeviceInfo\\.DeviceModelName}",
        "deviceNameExpressionSource": "path",
        "deviceProfileExpressionSource": "path",
        "deviceProfileExpression": "${Root\\.Objects\\.DemoDeviceInfo\\.DeviceSeries}"
      },
      "attributes": [
        {
          "key": "some_key",
          "type": "identifier",
          "value": "${ns=3;i=1001}"
        }
      ],
      "timeseries": [],
      "rpc_methods": [],
      "attributes_updates": []
    }
  ]
}

设备名和配置文件可根据节点值动态设置。本示例使用相对路径指定设备名和配置文件。

以下示例使用 Prosys OPC-UA 仿真服务器,地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。服务器结构如下:

image

我们关注节点 “DeviceModelName” 和 “DeviceSeries“。将用它们分别设置设备名和配置文件。

在 OPC-UA 连接器中配置设备名和配置文件。按以下步骤操作:

  • 在右侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择已创建的 OPC-UA 连接器,点击“数据映射”标签。首先配置父(或设备)节点。点击“+ 添加映射”按钮。

  • 在打开的窗口中,“设备节点”填 Root\.Objects\.DemoDevice,“来源”选“Path”。这是要创建设备的父节点的绝对路径。

  • 名称”填 ${DeviceModelName},“来源”选“Path”。这是包含设备名的节点的相对路径。

  • 配置文件名称”填 ${DeviceSeries},“来源”选“Path”。这是包含设备配置的节点的相对路径。

  • 还需至少添加一个属性/时序数据,因为连接器不会添加无可读数据的设备(可使用任意预装的 Prosys OPC-UA 仿真服务器节点)。点击“属性”旁的“铅笔”图标。

  • 在打开的窗口中,点击“添加属性”按钮并按对应图片填写字段。

  • 记得点击“保存”按钮保存更改。

可以检查设备名和配置文件是否正确设置。进入“实体”→“设备”,设备名应为 Demo Device,配置文件为 Demo Series

image

若使用高级配置模式并需用相对路径设置设备名和配置文件,可使用以下配置:

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
{
  "name": "OPCUA",
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "pollPeriodInMillis": 5000,
    "enableSubscriptions": false,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    }
  },
  "mapping": [
    {
      "deviceNodeSource": "path",
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceInfo": {
        "deviceNameExpression": "${DeviceModelName}",
        "deviceNameExpressionSource": "path",
        "deviceProfileExpressionSource": "path",
        "deviceProfileExpression": "${DeviceSeries}"
      },
      "attributes": [
        {
          "key": "some_key",
          "type": "identifier",
          "value": "${ns=3;i=1001}"
        }
      ],
      "timeseries": [],
      "rpc_methods": [],
      "attributes_updates": []
    }
  ]
}

设备名和配置文件可根据节点值动态设置。本示例使用标识符指定设备名和配置文件。Identifier 可为 OPC-UA 服务器中节点的数字字符串字节串GUID 标识符。

以下示例使用 Prosys OPC-UA 仿真服务器,地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。服务器结构如下:

image

我们关注节点 “DeviceModelName“(标识符 ns=3;i=1014)和 “DeviceSeries“(标识符 ns=3;i=1015)。将用它们分别设置设备名和配置文件。

在 OPC-UA 连接器中配置设备名和配置文件。按以下步骤操作:

  • 在右侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择已创建的 OPC-UA 连接器,点击“数据映射”标签。首先配置父(或设备)节点。点击“+ 添加映射”按钮。

  • 在打开的窗口中,“设备节点”填 Root\.Objects\.DemoDevice,“来源”选“Path”。这是要创建设备的父节点的绝对路径。

  • 名称”填 ${ns=3;i=1014},“来源”选“Identifier”。

  • 配置文件名称”填 ${ns=3;i=1015},“来源”选“Identifier”。这是包含设备配置的节点的绝对路径。

  • 还需至少添加一个属性/时序数据,因为连接器不会添加无可读数据的设备(可使用任意预装的 Prosys OPC-UA 仿真服务器节点)。点击“属性”旁的“铅笔”图标。

  • 在打开的窗口中,点击“添加属性”按钮并按对应图片填写字段。

  • 记得点击“保存”按钮保存更改。

可以检查设备名和配置文件是否正确设置。进入“实体”→“设备”,设备名应为 Demo Device,配置文件为 Demo Series

image

若使用高级配置模式并需用标识符设置设备名和配置文件,可使用以下配置:

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
{
  "name": "OPCUA",
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "pollPeriodInMillis": 5000,
    "enableSubscriptions": false,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    }
  },
  "mapping": [
    {
      "deviceNodeSource": "path",
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceInfo": {
        "deviceNameExpression": "${ns=3;i=1014}",
        "deviceNameExpressionSource": "identifier",
        "deviceProfileExpressionSource": "identifier",
        "deviceProfileExpression": "${ns=3;i=1015}"
      },
      "attributes": [
        {
          "key": "some_key",
          "type": "identifier",
          "value": "${ns=3;i=1003}"
        }
      ],
      "timeseries": [],
      "rpc_methods": [],
      "attributes_updates": []
    }
  ]
}

在 OPC UA 连接器中,可使用相对路径访问属性和时序数据。 这样无需指定节点的完整路径即可获取数据。

以下示例使用 Prosys OPC-UA 仿真服务器,地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。服务器结构如下:

image

我们关注节点 “Humidity“,使用该节点获取湿度数据。

在 OPC-UA 连接器中配置湿度数据。按以下步骤操作:

  • 在右侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择 OPC-UA 连接器,点击“数据映射”标签。选择要添加时序数据的数据映射(若不清楚如何添加新设备,请参阅入门指南或本指南的数据映射及相应示例)。

  • 在打开的数据映射窗口中,点击“时序数据”或“属性”旁的“铅笔”图标。

  • 点击“添加时序数据”按钮。“”填 Humidity,“类型”选“Path”,“”填 ${Humidity}。这是包含湿度数据的节点的相对路径。

  • 记得点击“应用”按钮保存更改。

可以检查湿度数据是否发送正确。进入“实体”→“设备”,选择已创建设备,在“时序数据”部分可看到湿度数据:

image

若使用高级配置模式并需用相对路径设置湿度数据,可使用以下配置:

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
{
  "name": "OPCUA",
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "pollPeriodInMillis": 5000,
    "enableSubscriptions": false,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    }
  },
  "mapping": [
    {
      "deviceNodeSource": "path",
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpressionSource": "constant",
        "deviceProfileExpression": "default"
      },
      "attributes": [],
      "timeseries": [
        {
          "key": "Humidity",
          "type": "path",
          "value": "${Humidity}"
        }
      ],
      "rpc_methods": [],
      "attributes_updates": []
    }
  ]
}

在 OPC UA 连接器中,可使用相对路径访问属性和时序数据。 这样无需指定节点的完整路径即可获取数据。此外,可为 “设备节点” 使用标识符

以下示例使用 Prosys OPC-UA 仿真服务器,地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。服务器结构如下:

image

我们关注节点 “Humidity“,使用该节点获取湿度数据。

使用 相对路径 在 OPC-UA 连接器中配置湿度数据。按以下步骤操作:

  • 在左侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择 OPC-UA 连接器,点击“数据映射”标签。选择要添加时序数据的数据映射(若不清楚如何添加新设备,请参阅入门指南或本指南的数据映射及相应示例)。

  • 在打开的数据映射窗口中,点击“时序数据”或“属性”旁的“铅笔”图标。

  • 点击“添加时序数据”按钮。“”填 Humidity,“类型”选“Path”,“”填 ${Humidity}。这是包含湿度数据的节点的相对路径。

  • 记得点击“应用”按钮保存更改。

可以检查湿度数据是否发送正确。进入“实体”→“设备”,选择已创建设备,在“时序数据”部分可看到湿度数据:

image

若使用高级配置模式并需用相对路径设置湿度数据,可使用以下配置:

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
{
  "name": "OPCUA",
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "pollPeriodInMillis": 5000,
    "enableSubscriptions": false,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    }
  },
  "mapping": [
    {
      "deviceNodeSource": "identifier",
      "deviceNodePattern": "ns=3;i=1008",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpressionSource": "constant",
        "deviceProfileExpression": "default"
      },
      "attributes": [],
      "timeseries": [
        {
          "key": "Humidity",
          "type": "path",
          "value": "${Humidity}"
        }
      ],
      "rpc_methods": [],
      "attributes_updates": []
    }
  ]
}

在 OPC UA 连接器中,可使用绝对路径访问属性和时序数据。 可从与父(设备)节点无关联的节点获取数据。

以下示例使用 Prosys OPC-UA 仿真服务器,地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。服务器结构如下:

image

我们关注节点 “Humidity“,使用该节点获取湿度数据。

在 OPC-UA 连接器中配置湿度数据。按以下步骤操作:

  • 在右侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择 OPC-UA 连接器,点击“数据映射”标签。选择要添加时序数据的数据映射(若不清楚如何添加新设备,请参阅入门指南或本指南的数据映射及相应示例)。

  • 在打开的数据映射窗口中,点击“时序数据”或“属性”旁的“铅笔”图标。

  • 点击“添加时序数据”按钮。“”填 Humidity,“类型”选“Path”,“”填 ${Root\.Objects\.DemoDevice\.Humidity}。这是包含湿度数据的节点的绝对路径。

  • 记得点击“应用”按钮保存更改。

可以检查湿度数据是否发送正确。进入“实体”→“设备”,选择已创建设备,在“时序数据”部分可看到湿度数据:

image

若使用高级配置模式并需用绝对路径设置湿度数据,可使用以下配置:

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
{
  "name": "OPCUA",
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "pollPeriodInMillis": 5000,
    "enableSubscriptions": false,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    }
  },
  "mapping": [
    {
      "deviceNodeSource": "path",
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpressionSource": "constant",
        "deviceProfileExpression": "default"
      },
      "attributes": [],
      "timeseries": [
        {
          "key": "Humidity",
          "type": "path",
          "value": "${Root\\.Objects\\.DemoDevice\\.Humidity}"
        }
      ],
      "rpc_methods": [],
      "attributes_updates": []
    }
  ]
}

在 OPC UA 连接器中,可使用标识符访问属性和时序数据。 可通过标识符从与父(设备)节点无关联的节点获取数据。

以下示例使用 Prosys OPC-UA 仿真服务器,地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。服务器结构如下:

image

我们关注标识符为 ns=3;i=1011 的节点 “Humidity“。使用该节点获取湿度数据。

在 OPC-UA 连接器中配置湿度数据。按以下步骤操作:

  • 在左侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择 OPC-UA 连接器,点击“数据映射”标签。选择要添加时序数据的数据映射(若不清楚如何添加新设备,请参阅入门指南或本指南的数据映射及相应示例)。

  • 在打开的数据映射窗口中,点击“时序数据”或“属性”旁的“铅笔”图标。

  • 点击“添加时序数据”按钮。“”填 Humidity,“类型”选“Identifier”,“”填 ${ns=3;i=1011}。这是包含湿度数据的节点的标识符。

  • 记得点击“应用”按钮保存更改。

可以检查湿度数据是否发送正确。进入“实体”→“设备”,选择已创建设备,在“时序数据”部分可看到湿度数据:

image

若使用高级配置模式并需用标识符设置湿度数据,可使用以下配置:

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
{
  "name": "OPCUA",
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "pollPeriodInMillis": 5000,
    "enableSubscriptions": false,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    }
  },
  "mapping": [
    {
      "deviceNodeSource": "path",
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpressionSource": "constant",
        "deviceProfileExpression": "default"
      },
      "attributes": [],
      "timeseries": [
        {
          "key": "Humidity",
          "type": "identifier",
          "value": "${ns=3;i=1011}"
        }
      ],
      "rpc_methods": [],
      "attributes_updates": []
    }
  ]
}

请求映射

请求映射部分允许您配置ThingsBoard平台实例如何与设备交互。即平台如何从设备请求数据、如何更新设备属性,以及如何向设备发送RPC命令。

OPC-UA连接器支持以下请求映射:

  • Attribute updates -允许从ThingsBoard平台实例更新设备节点值。
  • RPC methods -允许向设备发送RPC命令。使用RPC方法,您可以获取或设置OPC-UA节点的值。 OPC-UA连接器支持不同类型的RPC方法,例如:
    • Reserved GET/SET methods -这些方法会自动为每个属性和时间序列参数创建。 您可以使用它们来获取或设置OPC-UA节点的值。
    • RPC method to connector -此方法允许您从ThingsBoard物联网网关UI向连接器发送命令。 命令将由连接器处理,结果将发送回ThingsBoard平台实例。
    • Configurable RPC methods to device -这些方法允许您在连接器配置中配置可发送到设备的自定义RPC命令。

“属性更新”子节

本小节包含来自ThingsBoard平台实例的属性更新请求的配置。

ThingsBoard允许配置设备属性并从设备应用程序获取部分属性。您可以将其视为设备的远程配置,使它们能够从ThingsBoard请求共享属性。更多详细信息请参阅用户指南

以下参数用于配置属性更新:

  • Key - ThingsBoard中共享属性的键。可以指定为静态值。
  • Type - Value字段中表达式的类型(有关类型的更多信息,请参阅附加信息部分):
    • Path -可以是OPC-UA服务器中节点的绝对路径或相对路径。值将从指定路径的节点获取。
    • Identifier -可以是OPC-UA服务器中节点的数字、字符串、字节串或GUID标识符。值将从指定标识符的节点获取。
    • Constant -将发送到设备的静态值。
  • Value -共享属性值将写入的节点。应根据所选类型(Path、Identifier或Constant)进行指定。
文档信息图标

所有配置参数列表及其详细描述可以在高级配置部分找到。

更多使用示例可以在使用示例部分找到。

image

要添加新的 attribute 更新,请按以下步骤操作:

  • 在 “Attribute updates” 部分点击 “pencil“(铅笔)图标以添加新的 attribute 更新;

  • 在打开的窗口中点击 “Add attribute update“(添加 attribute 更新);

  • 填写 “Key” 字段,选择 “Type“(可为 pathidentifier 或 constant),填写 “Value” 并点击 “Apply” 按钮。

“RPC方法”子节

ThingsBoard允许向直接连接到ThingsBoard或通过网关连接的设备发送RPC命令。 以下参数用于配置RPC方法:

  • Method name - OPC-UA服务器上的方法名称。
  • Arguments -将传递给OPC-UA服务器方法的参数列表。
文档信息图标

所有配置参数列表及其详细描述可以在高级配置部分找到。

更多使用示例可以在使用示例部分找到。

image

要添加新的 RPC 方法,请按以下步骤操作:

  • 在 “RPC methods” 部分点击 “pencil“(铅笔)图标以添加新的 RPC 方法;

  • 在打开的窗口中点击 “Add method“(添加方法);

  • 填写 “Method name“(方法名)字段。若方法有参数,点击 “Add argument“(添加参数)按钮并选择参数类型。填写 “Value” 字段并点击 “Apply” 按钮。

文档信息图标

此外,每个遥测和属性参数都内置了GET和SET RPC方法,因此您无需手动配置。请参阅指南

使用示例

Attribute 更新允许您更新 OPC-UA 服务器中的节点值。 您可在设备配置页面的 “Attribute updates” 部分添加新的 attribute 更新。

我们将使用 Prosys OPC-UA Simulation Server 作为示例,其地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。 服务器结构如下:

image

示例:继电器控制(相对路径)

我们关注 “Relay” 节点,已将其添加为 key 为 relay 的 telemetry 参数。我们使用 telemetry 以便后续方便查看通过 attribute 更新修改的值是否已生效。您也可在设备配置中添加此 telemetry 数据点,或使用保留的 get RPC 方法检查节点值。

让我们在配置中添加 attribute 更新。请按以下步骤操作:

  • 在右侧边栏中进入 “Entities” → “Gateways” 并选择您的网关。

  • 在右侧菜单中点击 “Connectors configuration“(连接器配置)按钮。

  • 选择已创建的 OPC-UA connector,点击 “Data mapping” 选项卡。请确保已配置并连接设备(若不知如何操作,请参阅入门指南或本指南的 Connection settingsData mapping 部分)。点击要配置 attribute 更新的设备旁的 “Pencil“(铅笔)图标。

  • 向下滚动至 “Attribute updates” 部分,点击 “Pencil” 图标编辑 attribute 更新。

  • 点击 “Add attribute update” 按钮。本示例中我们将添加 relay attribute 更新,在 “Key” 字段输入 relay,将 “Type” 选为 Path,在 “Value” 字段输入 ${Relay}。这是要更新的设备节点的相对路径。

  • 请记得点击 “Apply” 按钮保存更改。

现在我们可以检查 attribute 更新是否生效。进入 “Entities” → “Devices” → 选择已创建设备 → “Attributes” 选项卡 → 选择 “Shared attributes” → 点击 “+” 图标并添加类型为 “Boolean“、值为 “True” 的 relay attribute。

现在检查 relay 节点的值。在所选设备中进入 “Last telemetry” 选项卡,查看 relay telemetry 的值。由于我们将 shared attribute 设为 true,应显示为 true

image

尝试将 relay shared attribute 的值改为 false。几秒钟后,您应能看到 relay telemetry 值已变为 false,说明 attribute 更新已正确生效。

上述示例的 OPC-UA connector 完整配置如下:

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
{
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "enableSubscriptions": true,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    },
    "pollPeriodInMillis": 5000
  },
  "mapping": [
    {
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceNodeSource": "path",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpression": "default",
        "deviceProfileExpressionSource": "constant"
      },
      "attributes": [],
      "attributes_updates": [
        {
          "key": "relay",
          "type": "path",
          "value": "${Relay}"
        }
      ],
      "timeseries": [
        {
          "key": "relay",
          "type": "identifier",
          "value": "${ns=3;i=1012}"
        }
      ],
      "rpc_methods": []
    }
  ]
}

属性更新允许更新 OPC-UA 服务器中的节点值。 可在设备配置页的“属性更新”部分添加新的属性更新。

以下示例使用 Prosys OPC-UA 仿真服务器,地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。 服务器结构如下:

image

示例:风扇转速(绝对路径)

我们关注节点 “FanSpeed“,以键 fan_speed 将其添加为遥测参数。使用遥测便于后续通过属性更新查看值是否已变更。 您也可在设备配置中添加该遥测数据点,或使用保留 get 方法检查节点值。

按以下步骤添加属性更新配置:

  • 在左侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择已创建的 OPC-UA 连接器,点击“数据映射”标签。请确保已配置并连接设备(若不清楚如何操作,请参阅入门指南或本指南的连接设置数据映射)。点击要配置属性更新的设备旁的“铅笔”图标。

  • 向下滚动至“属性更新”部分,点击“铅笔”图标编辑属性更新。

  • 点击“添加属性更新”按钮。此处添加 fan_speed 属性更新,故在“”中填 fan_speed,“类型”选 Path,“”填 ${Root\.Objects\.DemoDeviceInfo\.FanSpeed}。这是要更新的 OPC-UA 服务器节点的绝对路径。

  • 记得点击“应用”按钮保存更改。

可以检查属性更新是否生效。进入“设备”→选择已创建设备→“属性”标签→ 选择“共享属性”→点击“+”图标,添加 fan_speed 属性,类型为“整数”,值设为“90”。

在所选设备的“最新遥测”标签中检查风扇转速节点的值。因共享属性已设为 90fan_speed 遥测值应为 90

image

尝试将 fan_speed 共享属性的值改为 30。几秒后,fan_speed 遥测值应变为 30,说明属性更新已正确生效。

上述示例的 OPC-UA 连接器完整配置如下:

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
{
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "enableSubscriptions": true,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    },
    "pollPeriodInMillis": 5000
  },
  "mapping": [
    {
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceNodeSource": "path",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpression": "default",
        "deviceProfileExpressionSource": "constant"
      },
      "attributes": [],
      "attributes_updates": [
        {
          "key": "fan_speed",
          "type": "path",
          "value": "${Root\\.Objects\\.DemoDeviceInfo\\.FanSpeed}"
        }
      ],
      "timeseries": [
        {
          "key": "fan_speed",
          "type": "identifier",
          "value": "${ns=3;i=1017}"
        }
      ],
      "rpc_methods": []
    }
  ]
}

属性更新允许更新 OPC-UA 服务器中的节点值。 可在设备配置页的“属性更新”部分添加新的属性更新。

以下示例使用 Prosys OPC-UA 仿真服务器,地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。 服务器结构如下:

image

示例:文本消息编辑(标识符)

我们关注节点 “TextMessage“,以键 text_message 将其添加为遥测参数。 使用遥测便于后续通过属性更新查看值是否已变更。 您也可在设备配置中添加该遥测数据点,或使用保留 get 方法检查节点值。

按以下步骤添加属性更新配置:

  • 进入“实体”→“网关”(右侧边栏)。
  • 选择您的网关。
  • 点击“连接器”标签。
  • 选择 OPC-UA 连接器并点击“数据映射”标签。
  • 请确保已配置并连接设备(若不清楚如何操作,请参阅入门指南或连接设置与数据映射部分)。点击要配置属性更新的设备旁的“铅笔”图标。
  • 向下滚动至“属性更新”部分,点击“铅笔”图标编辑属性更新。
  • 点击“添加属性更新”按钮。此处添加 text_message 属性更新,故在“”中填 text_message,“类型”选 Identifier,“”填 ${ns=2;i=1005}。这是要更新的 OPC-UA 服务器节点的标识符。
  • 记得点击“应用”按钮保存更改。
  • 在右侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择已创建的 OPC-UA 连接器,点击“数据映射”标签。请确保已配置并连接设备(若不清楚如何操作,请参阅入门指南或本指南的连接设置数据映射)。点击要配置属性更新的设备旁的“铅笔”图标。

  • 向下滚动至“属性更新”部分,点击“铅笔”图标编辑属性更新。

  • 点击“添加属性更新”按钮。此处添加 text_message 属性更新,故在“”中填 text_message,“类型”选 Identifier,“”填 ${ns=2;i=1005}。这是要更新的 OPC-UA 服务器节点的标识符。

  • 记得点击“应用”按钮保存更改。

可以检查属性更新是否生效。进入“设备”→选择已创建设备→“属性”标签→ 选择“共享属性”→点击“+”图标,添加 text_message 属性,类型为“字符串”,值设为“Hello from Gateway!”。

在所选设备的“最新遥测”标签中检查文本消息节点的值。因共享属性已设为 Hello from Gateway!text_message 遥测值应为 Hello from Gateway!

image

尝试将 text_message 共享属性的值改为 Hello from <your_name>!。几秒后, text_message 遥测值应变为 Hello from <your_name>!,说明属性更新已正确生效。

上述示例的 OPC-UA 连接器完整配置如下:

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
{
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "enableSubscriptions": true,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    },
    "pollPeriodInMillis": 5000
  },
  "mapping": [
    {
      "deviceNodeSource": "path",
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpression": "default",
        "deviceProfileExpressionSource": "constant"
      },
      "attributes": [],
      "timeseries": [
        {
          "key": "text_message",
          "type": "identifier",
          "value": "${ns=3;i=1018}"
        }
      ],
      "rpc_methods": [],
      "attributes_updates": [
        {
          "key": "text_message",
          "type": "identifier",
          "value": "${ns=3;i=1018}"
        }
      ]
    }
  ]
}

RPC 到设备允许在特定设备上执行 OPC-UA 服务器的方法。 需注意,调用的方法必须在 OPC-UA 服务器上已定义。

以下示例使用 ThingsBoard OPC-UA 演示服务器,可通过 Docker 及以下命令运行:

1
docker run -it -p 4840:4840 thingsboard/tb-gw-opcua-server:latest

服务器端点 URL 为:opc.tcp://0.0.0.0:4840/freeopcua/server/

示例:乘法运算

我们关注 “multiply” 方法节点,该方法将我们传入的两个数字相乘。 要调用该方法,需先配置 OPC-UA 连接器以支持 RPC 调用。按以下步骤操作:

  • 在右侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择已创建的 OPC-UA 连接器,点击“数据映射”标签。请确保已配置并连接设备(若不清楚如何操作,请参阅入门指南或本指南的连接设置数据映射)。点击要配置 RPC 方法的设备旁的“铅笔”图标。

  • 向下滚动至“RPC 方法”部分,点击“铅笔”图标编辑 RPC 方法。

  • 点击“添加方法”按钮。此处添加 multiply 方法,故在“方法”中填 multiply,在“参数”中填该方法接受的参数,此处为两个数字,可填任意数字。

  • 记得点击“应用”按钮保存更改。

配置完成后,在 RPC 调试终端部件中执行以下命令调用方法:

1
multiply

此情况下,将使用配置中的参数(默认参数)调用方法。 此处参数为 5 和 4,结果为:

image

也可在 RPC 调试终端部件中直接传入参数调用方法:

1
multiply [3,4]

响应:

image

上述示例的 OPC-UA 连接器完整配置如下:

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
50
51
52
{
  "name": "OPCUA",
  "server": {
    "url": "opc.tcp://0.0.0.0:4840/freeopcua/server/",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "pollPeriodInMillis": 5000,
    "enableSubscriptions": false,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    }
  },
  "mapping": [
    {
      "deviceNodeSource": "path",
      "deviceNodePattern": "Root\\.Objects\\.MyObject",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpression": "default",
        "deviceProfileExpressionSource": "constant"
      },
      "attributes": [],
      "timeseries": [
        {
          "key": "some_key",
          "type": "path",
          "value": "${some_key}"
        }
      ],
      "rpc_methods": [
        {
          "method": "multiply",
          "arguments": [
            {
              "type": "integer",
              "value": 5
            },
            {
              "type": "integer",
              "value": 4
            }
          ]
        }
      ],
      "attributes_updates": []
    }
  ]
}

每个 telemetry 和 attribute 参数都 GETSET RPC 方法,无需手动配置。

我们将使用 Prosys OPC-UA Simulation Server 作为示例,其地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。服务器结构如下:

image

我们关注标识符为 ns=3;i=1012 的 “Relay” 节点,已将其添加为 key 为 relay 的 telemetry 参数,路径使用节点标识符 ${ns=3;i=1012},该 telemetry 的配置如下:

1
2
3
4
5
6
"timeseries": [
  {
    "key": "relay",
    "path": "${ns=3;i=1012}"
  }
]

使用保留的 get 方法检查 relay 节点的值。要获取 relay 节点当前值,请在 RPC debug terminal 中运行以下查询:

1
get ns=3;i=1012;

响应:

1
{"result":  {"value":  false}}

image

因此,get 方法返回 relay 节点的当前值,可以看到 relay 处于关闭状态。

文档信息图标

RPC Debug Terminal 仅用于示例,您可使用任何支持 RPC 调用的部件。

要设置 relay 节点的值并开启 relay,请运行以下查询:

1
set ns=3;i=1012; true

响应:

1
{"result":  {"value":  true}}

如下图所示,relay telemetry 值已变为 true

image

我们再次检查 relay telemetry 的值:

1
get ns=3;i=1012;

响应:

1
{"result":  {"value":  true}}

image

上述示例的 OPC-UA connector 完整配置如下:

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
{
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "enableSubscriptions": true,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    },
    "pollPeriodInMillis": 5000
  },
  "mapping": [
    {
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceNodeSource": "path",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpression": "default",
        "deviceProfileExpressionSource": "constant"
      },
      "attributes": [],
      "attributes_updates": [],
      "timeseries": [
        {
          "key": "relay",
          "type": "identifier",
          "value": "${ns=3;i=1012}"
        }
      ],
      "rpc_methods": []
    }
  ]
}

所有遥测和属性参数均内置 getset RPC 方法,无需手动配置。

此外,可使用保留 RPC 方法访问 OPC-UA 服务器上的任意节点——即使该节点不属于特定设备。当管理或控制节点位于设备节点树之外时尤其有用。 我们将设备节点设为 Root\.Objects\.DemoDevice,但将访问位于 Root\.Objects\.DemoDeviceInfo\.TextMessageTextMessage 节点,该节点在设备节点树之外。 以下示例使用 Prosys OPC-UA 仿真服务器,地址为 opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer。服务器结构如下:

image

我们关注 “TextMessage“,其 “Path” 为 Root\.Objects\.DemoDeviceInfo\.TextMessage, 且不属于设备节点树。我们以键 textmessage 将该节点添加为遥测参数, 便于后续在调用保留 set RPC 方法后验证值是否已更改。

1
2
3
4
5
6
7
"timeseries": [
  {
    "key": "textmessage",
    "type": "path",   
    "path": "${Root\\.Objects\\.DemoDeviceInfo\\.TextMessage}"
  }
]

使用保留 get 方法检查 textmessage 节点的值。在 RPC 调试终端中执行以下查询获取 textmessage 节点当前值:

1
get Root\\.Objects\\.DemoDeviceInfo\\.TextMessage;

响应:

1
{"result":{"value":"HI"}}

image

因此 get 方法返回 textmessage 节点的当前值,可见 textmessage 为 HI

文档信息图标

RPC 调试终端仅用于示例,您可使用任何支持 RPC 调用的其他部件。

设置 textmessage 节点的值并修改其内容,执行以下查询:

1
set Root\\.Objects\\.DemoDeviceInfo\\.TextMessage; New Message

响应:

1
{"result":{"value":"New Message"}}

如下截图所示,textmessage 遥测值已变为 New Message

image

再次检查 textmessage 遥测值:

1
get Root\\.Objects\\.DemoDeviceInfo\\.TextMessage;

响应:

1
{"result":{"value":"New Message"}}

image

上述示例的 OPC-UA 连接器完整配置如下:

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
{
  "server": {
    "url": "opc.tcp://0.0.0.0:53530/OPCUA/SimulationServer",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "enableSubscriptions": true,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    },
    "pollPeriodInMillis": 5000
  },
  "mapping": [
    {
      "deviceNodePattern": "Root\\.Objects\\.DemoDevice",
      "deviceNodeSource": "path",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpression": "default",
        "deviceProfileExpressionSource": "constant"
      },
      "attributes": [],
      "attributes_updates": [],
      "timeseries": [
        {
          "key": "textmessage",
          "type": "path",
          "value": "${Root\\.Objects\\.DemoDeviceInfo\\.TextMessage}"
        }
      ],
      "rpc_methods": []
    }
  ]
}

RPC 到连接器允许从 ThingsBoard IoT 网关界面向连接器发送命令。 需注意,调用的方法必须在 OPC-UA 服务器上已定义。

文档信息图标

请注意:RPC 到连接器将在每个配置了 OPC-UA 连接器的设备上执行该方法。

以下示例使用 ThingsBoard OPC-UA 演示服务器,可通过 Docker 及以下命令运行:

1
docker run -it -p 4840:4840 thingsboard/tb-gw-opcua-server:latest

服务器端点 URL 为:opc.tcp://0.0.0.0:4840/freeopcua/server/

示例:继电器控制

下面展示 RPC 到连接器的实际用法。OPC-UA 服务器上有 “set_relay” 方法, 可开关继电器。该方法接受布尔参数,true 打开继电器,false 关闭继电器。调用该方法的步骤如下:

  • 在右侧边栏进入“实体”→“网关”并选择您的网关。

  • 点击右侧菜单中的“连接器配置”按钮。

  • 选择已创建的 OPC-UA 连接器,点击“RPC”图标。请确保已配置并连接设备(若不清楚如何操作,请参阅入门指南或本指南的连接设置数据映射)。

先打开继电器。在“方法”中填 set_relay,在“参数”中填 true,再点击“发送”按钮。

image

响应中包含 true,表示方法已成功执行且继电器已打开:

image

最后关闭继电器。在“方法”中填 set_relay,在“参数”中填 false,再点击“发送”按钮:

image

结果:

image

上述示例的 OPC-UA 连接器完整配置如下:

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
{
  "server": {
    "url": "opc.tcp://0.0.0.0:4840/freeopcua/server/",
    "timeoutInMillis": 5000,
    "scanPeriodInMillis": 3600000,
    "enableSubscriptions": true,
    "subCheckPeriodInMillis": 100,
    "showMap": false,
    "security": "Basic128Rsa15",
    "identity": {
      "type": "anonymous"
    },
    "pollPeriodInMillis": 5000
  },
  "mapping": [
    {
      "deviceNodePattern": "Root\\.Objects\\.MyObject",
      "deviceNodeSource": "path",
      "deviceInfo": {
        "deviceNameExpression": "Demo Device",
        "deviceNameExpressionSource": "constant",
        "deviceProfileExpression": "default",
        "deviceProfileExpressionSource": "constant"
      },
      "attributes": [],
      "attributes_updates": [],
      "timeseries": [
        {
          "key": "Frequency",
          "type": "path",
          "value": "${Frequency}"
        }
      ],
      "rpc_methods": []
    }
  ]
}

高级配置

高级配置部分提供了OPC-UA连接器所有可用参数的详细概述。

服务器

服务器对象指定目标OPC-UA服务器以及网关与其交互的方式。

参数 默认值 描述
server   服务器对象,指定目标OPC-UA服务器以及网关与其交互的方式。
server.url   OPC-UA服务器的主机名或IP地址。
server.timeoutInMillis (in ms) 5000 连接OPC-UA服务器的超时时间(秒)。
server.scanPeriodInMillis (in ms) 3600000 扫描OPC-UA服务器变更的周期(毫秒)。如果您的OPC-UA服务器结构不经常变化,可以设置较大的周期以节省网关资源。
server.pollPeriodInMillis (in ms) 5000 轮询服务器的周期(毫秒)。如果enableSubscriptions设置为true,pollPeriodInMillis不会影响数据读取。
server.enableSubscriptions true 如果为true——网关将订阅感兴趣的节点并等待数据更新;如果为false——网关将每隔 scanPeriodInMillis重新扫描OPC-UA服务器。
server.subCheckPeriodInMillis (in ms) 100 定义连接器在创建OPC-UA订阅时请求的发布/检查间隔。
server.subKeepAlivePeriodInSeconds (in seconds) ** 0 连接器检查OPC-UA订阅是否仍然“存活”(即发布/数据变更流程未停滞)的间隔。此检查默认禁用(设置为0)。如果订阅在超过此阈值的时间内没有活动,连接器将其视为已过期并触发重新订阅以恢复更新。
server.subDataMaxBatchSize 1000 单次订阅更新中最大数据项数量。这对性能优化很有用。
server.subDataMinBatchCreationTimeMs (in ms) 200 在订阅更新中创建新数据项批次之前等待的最小时间(毫秒)。这有助于减少发送到ThingsBoard的更新数量。
server.subscriptionProcessBatchSize 2000 处理订阅更新时单批处理的最大数据项数量。这对性能优化很有用。
server.sessionTimeoutInMillis (in ms) 120000 会话超时时间(毫秒)。这是会话在被服务器关闭之前可以处于非活动状态的最长时间。
server.showMap false 如果为true——网关将在终端中显示OPC-UA服务器节点的映射图。这对调试和理解OPC-UA服务器结构很有用。
server.security Basic128Rsa15 安全策略(Basic128Rsa15Basic256Basic256Sha256)。
文档信息图标

请注意: ** – OPC-UA中的订阅生命周期通过发布间隔、保持活动和生命周期设置进行协商,可以近似为RequestedLifetimeCount * RequestedPublishingInterval。 在asyncua中,RequestedLifetimeCount通常是内部默认值1000毫秒,而发布间隔来自创建订阅时使用的值(此处为:server.subCheckPeriodInMillis,例如100毫秒),因此近似生命周期为(1000 * 100) / 1000 = 100秒。 然而,确切的移除时间取决于OPC-UA服务器实现及其清理逻辑——某些服务器会保持订阅更长时间,而其他服务器可能在负载或会话/发布问题下更早丢弃它们。因此,此设置用于检测“静默”订阅并更新它们,但您应根据自己的服务器进行验证以避免额外开销。

服务器配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"server": {
  "url": "localhost:4840/freeopcua/server/",
  "timeoutInMillis": 5000,
  "scanPeriodInMillis": 3600000,
  "pollPeriodInMillis": 5000,
  "enableSubscriptions": true,
  "subCheckPeriodInMillis": 100,
  "subDataMaxBatchSize": 1000,
  "subDataMinBatchCreationTimeMs": 200,
  "subscriptionProcessBatchSize": 2000,
  "sessionTimeoutInMillis": 120000,
  "showMap": false,
  "security": "Basic128Rsa15",
  "identity": {
    "type": "anonymous"
  }
}

服务器身份认证

身份对象指定用于连接OPC-UA服务器的身份认证方法。可以是以下之一:anonymousbasiccertificates

匿名身份认证
Parameter Default value Description
server.identity.type anonymous OPC-UA服务器上的身份类型。
基本身份认证
Parameter Default value Description
server.identity.type basic OPC-UA服务器上的身份类型。
server.identity.username   登录OPC-UA服务器的用户名。
server.identity.password   登录OPC-UA服务器的密码。

基本身份认证配置示例:

1
2
3
4
5
"identity": {
  "type": "basic",
  "username": "user",
  "password": "5Tr0nG?@$sW0rD"
},
证书身份认证
Parameter Default value Description
server.identity.type cert.PEM OPC-UA服务器上的身份认证类型。
server.identity.caCert   CA证书的路径。
server.identity.cert   客户端证书的路径。
server.identity.privateKey   客户端私钥的路径。
server.identity.mode SignAndEncrypt 安全模式,有2个选项 – ——SignSignAndEncrypt
username   (可选)登录OPC-UA服务器的用户名。
password   (可选)登录OPC-UA服务器的密码。

证书身份认证配置示例:

1
2
3
4
5
6
7
8
9
"identity": {
  "type": "cert.PEM",
  "caCert": "etc/thingsboard-gateway/ca.pem",
  "privateKey": "etc/thingsboard-gateway/private_key.pem", 
  "cert": "etc/thingsboard-gateway/cert.pem",
  "mode": "SignAndEncrypt",
  "username": "user",
  "password": "5Tr0nG?@$sW0rD"
},

映射

映射列表用于配置OPC-UA连接器如何将OPC-UA服务器中的数据映射到ThingsBoard设备。它允许您指定OPC-UA服务器中哪些节点将用作设备名称、设备配置文件、设备属性和遥测数据。

设备映射

Parameter Description
mapping[].deviceNodeSource 设备节点的来源,可以是:path、identifier或constant。
mapping[].deviceNodePattern 绝对或相对路径,或标识符,用于查找当前设备的节点。设备名称、配置文件、属性和遥测的路径可以相对于此节点指定。
mapping[].deviceInfo 用于配置设备名称和配置文件的设备信息对象。
mapping[].deviceInfo.deviceNameExpressionSource 设备名称的来源(可以是路径标识符或constant)。
mapping[].deviceInfo.deviceNameExpression 包含设备名称的变量路径,用于在变量中查找设备名称。
mapping[].deviceInfo.deviceProfileSource 设备配置文件的来源(可以是路径标识符或constant)。
mapping[].deviceInfo.deviceProfileExpression 包含设备配置文件的变量路径,用于在某个变量中查找设备配置文件。
mapping[].reportStrategy 用于配置设备上报策略的上报策略对象。

设备映射配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
"mapping": [
  {
    "deviceNodeSource": "path",
    "deviceNodePattern": "Root\\.Objects\\.MyObject",
    "deviceInfo": {
      "deviceNameExpression": "OPCUA New Advanced Device",
      "deviceNameExpressionSource": "path",
      "deviceProfileExpression": "some other default 1",
      "deviceProfileExpressionSource": "constant"
    },
    "attributes": [],
    "timeseries": [],
    "attributes_updates": [],
    "rpc_methods": [],
  },
]

设备属性和时间序列

Parameter Description
mapping[].attributes[] 将发送到ThingsBoard平台实例的属性列表。
mapping[].attributes[].key ThingsBoard中属性的键名。可以指定为静态值。
mapping[].attributes[].type value字段中表达式的类型(可以是pathidentifier或constant)。
mapping[].attributes[].value 将发送到平台的属性值。应根据所选类型(pathidentifierconstant)进行指定。
mapping[].attributes[].reportStrategy (可选)属性数据的上报策略。如果未指定,将使用设备上报策略。
mapping[].timeseries[] 将发送到ThingsBoard平台实例的遥测数据列表。
mapping[].timeseries[].key ThingsBoard中遥测数据的键名。可以指定为静态值。
mapping[].timeseries[].type value字段中表达式的类型(可以是pathidentifier或constant)。
mapping[].timeseries[].value 将发送到平台的遥测数据值。应根据所选类型(pathidentifierconstant)进行指定。
mapping[].timeseries[].timestampLocation (可选)属性时间戳的位置。如果未指定,将使用当前时间。可以是:sourcetimestampservertimestamp
mapping[].timeseries[].reportStrategy (可选)时间序列数据的上报策略。如果未指定,将使用设备上报策略。

属性和遥测配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
"attributes": [
  {
    "key": "Power",
    "type": "path",
    "value": "${Power}"
  },
  {
    "key": "Frequency",
    "type": "path",
    "value": "${Frequency}"
  }
],
"timeseries": [
  {
    "key": "Humidity",
    "type": "path",
    "value": "${ns=2;i=16}"
  },
  {
    "key": "Temperature",
    "type": "path",
    "value": "${Root\\.Objects\\.MyObject\\.Temperature}"
  }
],

设备属性更新

Parameter Default value Description
mapping[].attributes_updates[]   将在设备上更新的属性列表。
mapping[].attributes_updates[].key   ThingsBoard中共享属性的键名。可以指定为静态值。
mapping[].attributes_updates[].type   value字段中表达式的类型(可以是pathidentifier或constant)。
mapping[].attributes_updates[].value   将发送到设备的属性值。应根据所选类型(pathidentifierconstant)进行指定。
mapping[].attributes_updates[].timeout (in ms) 5000 属性更新请求的超时时间(毫秒)。

属性更新配置示例:

1
2
3
4
5
6
7
8
"attributes_updates": [
  {
    "key": "nodeById",
    "type": "path",
    "value": "ns=2;i=23"
    "timeout": 5000
  },
]

设备RPC方法

Parameter Default value Description
mapping[].rpc_methods[]   将发送到设备的RPC方法列表。
mapping[].rpc_methods[].method   OPC-UA服务器上的方法名称。
mapping[].rpc_methods[].arguments   (可选)将传递给OPC-UA服务器方法的默认参数列表。
mapping[].rpc_methods[].arguments[].type   参数的类型。
mapping[].rpc_methods[].arguments[].value   (可选)参数的值。
mapping[].rpc_methods[].timeout (in ms) 5000 RPC方法执行的超时时间(毫秒)。

RPC方法配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
"rpc_methods": [
  {
    "timeout": 3000,
    "method": "multiply",
    "arguments": [
      {
        "type": "integer",
        "value": 2
      },
      {
        "type": "integer",
        "value": 4
      }
    ]
  },
]

附加信息

路径类型

路径类型是指OPC-UA服务器命名空间中的层次地址。它用于导航到服务器中的特定节点。

属性值的路径可以是绝对路径或相对路径。

绝对路径

绝对路径指定从OPC-UA服务器命名空间的根到目标节点的完整层次地址。

示例:

网关期望节点存在,且”Root.Objects.TempSensor.Temperature“的值为23.54

表达式:

${Root\\.Objects\\.TempSensor\\.Temperature}

转换后的数据:

23.54

相对路径

相对路径指定相对于OPC-UA服务器命名空间中预定义起点的地址。

示例:

网关期望节点存在,且”Root.Objects.TempSensor.Temperature“的值为23.56。

设备节点表达式:

Root\\.Objects\\.TempSensor

表达式:

${Temperature}

转换后的数据:

23.56

标识符类型

OPC-UA服务器中的标识符类型是分配给节点的唯一ID。它用于直接引用特定节点,无需通过命名空间层次结构进行导航。

OPC-UA连接器配置中的标识符类型可以采用多种形式来唯一引用OPC-UA服务器地址空间中的节点。标识符可以是不同类型,如数字(i)、字符串(s)、字节串(b)和GUID(g)。以下是每种标识符类型的说明和示例。

  • 数字标识符(i)

    数字标识符使用整数值来唯一引用OPC-UA服务器中的节点。

    表达式:

    ${ns=2;i=1235}

    转换后的数据:

    21.34

  • 字符串标识符(s)

    字符串标识符使用字符串值来唯一引用OPC-UA服务器中的节点。

    表达式:

    ${ns=3;s=TemperatureSensor}

    转换后的数据:

    21.34

  • 字节串标识符(b)

    字节串标识符使用字节串来唯一引用OPC-UA服务器中的节点。这对于可以转换为字节串的二进制数据很有用。

    表达式:

    ${ns=3;b=Q2xpZW50RGF0YQ==}

    转换后的数据:

    21.34

  • GUID标识符(g)

    GUID标识符使用全局唯一标识符(GUID)来唯一引用OPC-UA服务器中的节点。

    表达式:

    ${ns=3;g=550e8400-e29b-41d4-a716-446655440000}

    转换后的数据:

    21.34

下一步

探索与ThingsBoard主要功能相关的指南: