

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Edge 中 SiteWise 设置 OPC UA 来源
<a name="configure-opcua-source"></a>

您可以使用 Amazon IoT SiteWise 控制台或 SiteWise Edge 网关功能来定义并向边缘网关添加 OPC UA 源，以表示本地 OPC UA 服务器。 SiteWise 

**Topics**
+ [配置 OPC UA 源（控制台）](#config-opcua-source-console)
+ [配置 OPC UA 来源 ()Amazon CLI](#configure-opc-ua-source-cli)

## 配置 OPC UA 源（控制台）
<a name="config-opcua-source-console"></a>

您可以使用控制台按照以下步骤配置 OPC UA 源。

**注意**  
警告：重复 TQVs 可能会导致双重充电。

**使用控制台配置 OPC UA 源 Amazon IoT SiteWise**

1. 导航至 [Amazon IoT SiteWise 控制台](https://console.amazonaws.cn/iotsitewise/)。

1. 在左侧导航栏中，选择 **Edge 部分的 **Edge** 网关**。

1. 选择边 SiteWise 缘网关以添加 OPC UA 源。

1. 选择**添加数据来源**。

1. 输入源名称。

1. 输入数据源服务器的 **本地终端节点**。端点可以是 IP 地址或主机名。您也可以向本地端点添加端口号。例如，您的本地端点可能类似于 **opc.tcp://203.0.113.0:49320**。

1. 启用 MQTT 的 V3 网关和经典直播 V2 网关之间的@@ **目的地**各不相同。
   + **Classic Steam、V2 网关目的地**与源有 1:1 的关系。每个源都将数据发送到特定的目的地。
   + **支持 MQTT 的 V3 网关目的地**是单独设置的，因为中心和分支模型允许您集中配置和管理跨不同网关的多个数据源。要在 V3 网关中设置目的地，请参阅[了解 Amazon IoT SiteWise 边缘目的地](gw-destinations.md#source-destination)。

------
#### [ Classic steams, V2 gateway destinations ]
   + **Amazon IoT SiteWise 实时**-选择此选项可将数据直接发送到 Amazon IoT SiteWise 存储器。在边缘实时摄取和监控数据。
   + **Amazon IoT SiteWise 使用 Amazon S3 进行缓冲** — 以 Parquet 格式将数据发送到 Amazon S3，然后导入 Amazon IoT SiteWise 存储。选择此选项可批量摄取数据，并以经济高效的方式存储历史数据。您可以配置您的首选 Amazon S3 存储桶位置，以及您希望将数据上传到 Amazon S3 的频率。您还可以选择在将数据摄取到 Amazon IoT SiteWise后如何处理数据。您可以选择同时在 Amazon S3 Amazon IoT SiteWise 和 Amazon S3 中提供数据，也可以选择在数据导入 Amazon S3 后自动将其从 Amazon S3 中删除 Amazon IoT SiteWise。
     + Amazon S3 存储桶是一种暂存和缓冲机制，支持 Parquet 格式的文件。
     + 如果您选中 “**将数据导入 Amazon IoT SiteWise 存储**” 复选框，则会先将数据上传到 Amazon S3，然后上传到 Amazon IoT SiteWise 存储中。
       + 如果您选中 “**从 Amazon S3 中删除数据**” 复选框，则在数据导入 SiteWise 存储后，数据将从 Amazon S3 中删除。
       + 如果您清除 “**从 Amazon S3 中删除数据**” 复选框，则数据将存储在 Amazon S3 和 SiteWise 存储中。
     + 如果您清除**将数据导入 Amazon IoT SiteWise 存储**复选框，则数据将仅存储在 Amazon S3 中，它不会导入到 SiteWise 存储中。

     有关 Amazon IoT SiteWise 提供的各种存储选项的详细信息，请访问[管理数据存储](manage-data-storage.md)。要了解有关定价选项的更多信息，请参阅 [Amazon IoT SiteWise 定价](https://www.amazonaws.cn/iot-sitewise/pricing/)。

      
   + **Amazon IoT Greengrass 流管理器** — 使用 Amazon IoT Greengrass 流管理器将数据发送到以下 Amazon 云端目标：传入的频道、Amazon Kinesis Data Streams 中的流 Amazon IoT Analytics、中的资产属性或亚马逊简单存储服务 (Amazon S3) Simple Storage Service Amazon IoT SiteWise中的对象。有关更多信息，请参阅《*Amazon IoT Greengrass Version 2 开发者指南》*中的 [“在 Amazon IoT Greengrass Core 上管理数据流](https://docs.amazonaws.cn/greengrass/v2/developerguide/manage-data-streams.html)”。

     输入 Amazon IoT Greengrass 直播的名称。

------
#### [ MQTT-enabled, V3 gateway destinations ]

   1. [支持 MQTT 的边缘版 V3 网关 Amazon IoT SiteWise](mqtt-enabled-v3-gateway.md)有关添加相关目的地的信息，请参阅。

   1. 添加源目标后，返回此过程。

------

1. 在**高级配置**窗格中，您可以执行以下操作：

   1. 为源服务器和 SiteWise Edge 网关之间传输的连接和数据选择**消息安全模式**。此字段是 OPC UA 安全策略和消息安全模式的组合。选择与您为 OPC UA 服务器指定的相同的安全策略和消息安全模式。

   1. 如果您的来源需要身份验证，请从**身份验证配置**列表中选择一个 Amazon Secrets Manager 密钥。 SiteWise Edge 网关在连接到此数据源时使用此密钥中的身份验证凭据。您必须将密钥附加到 SiteWise Edge 网关的 Amazon IoT Greengrass 组件，才能将其用于数据源身份验证。有关更多信息，请参阅 [为 SiteWise Edge 配置数据源身份验证](configure-source-authentication-ggv2.md)。
**提示**  
您的数据服务器可能有一个名为 **允许匿名登录** 的选项。如果此选项为 **是**，则说明您的源不需要身份验证。

   1. （可选）您可以通过选择**激活数据流前缀 - *可选***来激活数据流前缀。

      1. （可选）输入**数据流前缀**。 SiteWise Edge 网关将此前缀添加到来自该源的所有数据流。使用数据流前缀，可以区分来自不同源的同名数据流。在您的账户中，每个数据流都应具有唯一的名称。

   1. （可选）选择**数据类型转换**选项，将不支持的 OPC UA 数据类型转换为字符串，然后再将其摄取到 Amazon IoT SiteWise中。将具有简单数据类型的数组值转换为 JSON 字符串，将 DateTime 数据类型转换为 ISO 8601 字符串。有关更多信息，请参阅 [转换不支持的数据类型](string-conversion.md)。

   1. 为不包含在用户定义的属性组中的节点选择**默认数据更改触发器**。默认的数据更改触发器决定 OPC UA 服务器何时向网关发送更新的值。您可以选择以下选项之一：
      + **状态**-仅在状态更改时接收数据。
      + **StatusValue**— 用于在状态或值发生变化时接收数据。
      + **StatusValueTimestamp**— 用于在状态、值或时间戳发生变化时接收数据。

   1. （可选）在支持 MQTT 的 V3 网关上，您可以使用**发现配置来配置** OPC UA 节点发现过程。Discovery 配置将这些选项的先前配置覆盖文件系统替换为基于控制台的设置，这些设置无需重新启动网关即可动态更新。
**注意**  
**默认数据更改触发器**需要 IoT SiteWise OPC UA 收集器组件的 3.1.0 或更高版本。有关更多信息，请参阅 [更新 Amazon IoT SiteWise 组件的版本](manage-gateways-ggv2.md#update-component-version)。

      1. 对于**最大并发浏览请求数**，请输入您的 OPC UA 服务器可以同时处理的最大浏览请求数。每个数据源最多可以配置 500 个并发浏览请求。

      1. 对于**每次浏览请求的最大节点数**，请输入每次浏览请求中发送到 OPC UA 服务器的最大节点数。每个浏览请求最多可以发送 1,000 个节点。

      1. 选择 “**避免节点树循环**”，以防止网关在浏览 OPC UA 服务器的结构时陷入循环引用中。选中后，网关会跟踪访问过的位置，以避免服务器节点以圆形模式相互引用时可能出现的无限循环。

      1. 选择 “**启用节点遍历**”，允许网关浏览 OPC UA 服务器的完整结构，发现设备和设备中的所有可用数据点。选中后，网关将在根级别之外的设备数据组织中导航，以自动查找所有传感器、控件和测量点。

      1. 选择 “**启用定期发现**” 可定期自动运行发现操作，以检测 OPC UA 服务器结构的变化。选中后，网关会持续监控新添加的设备或数据点，确保它们被自动检测并可供数据收集。

         1. 对于**定期发现间隔**，请设置运行定期发现时自动发现操作之间的时间间隔。最小周期性发现间隔为 30 秒，最长为 30 天。

         1. 对于**每间隔发现的最大节点**数，请设置每个发现间隔应发现的最大节点数。这有助于控制发现操作期间网关和 OPC UA 服务器的负载。

   1. （可选）对于**属性组**，选择**添加新组**。

      1. 为属性组输入**名称**。

      1. 对于**属性**：

         1. 对于**节点路径**，添加 OPC UA 节点筛选条件以限制上传到 Amazon IoT SiteWise的 OPC UA 路径。其格式类似于**要选择的节点 ID**。

      1. 对于 **组设置**，请执行以下操作：

         1. 在**数据质量设置**中，选择您希望 C Amazon IoT SiteWise ollector 采集的数据质量类型。

         1. 对于**扫描模式设置**，请使用**扫描模式**配置标准订阅属性。您可以选择**订阅**或**轮询**。有关扫描模式的更多信息，请参阅 [使用 OPC UA 筛选数据摄取范围](opcua-data-acquisition.md)。

------
#### [ Subscribe ]

**要发送每个数据点，请执行以下步骤：**

            1. 选择**订阅**并设置以下内容：

               1. **[数据更改触发器](https://reference.opcfoundation.org/v104/Core/docs/Part4/7.17.2/)** — 启动数据变更警报的条件。

               1. **[订阅队列大小](https://reference.opcfoundation.org/v104/Core/docs/Part4/7.16/)**-OPC UA 服务器上特定指标的队列深度，其中监控项目的通知已排队。

               1. **[订阅发布间隔](https://reference.opcfoundation.org/v104/Core/docs/Part4/5.13.2/)** — 创建订阅时指定的发布周期间隔（以毫秒为单位）。

               1. **快照间隔-*可选*-** 用于确保 Amazon IoT SiteWise Edge 摄取稳定的数据流的快照频率超时设置。

               1. **扫描速率** — 您希望 SiteWise Edge 网关读取寄存器的速率。 Amazon IoT SiteWise 自动计算您的 SiteWise Edge 网关允许的最低扫描速率。

               1. **时间戳** — 要包含在 OPC UA 数据点中的时间戳。您可以使用服务器时间戳或设备的时间戳。
**注意**  
使用 2.5.0 或更高版本的 IoT SiteWise OPC UA 收集器组件。如果您在早期版本中使用时间戳功能，则配置更新会失败。有关更多信息，请参阅 [更新 Amazon IoT SiteWise 组件的版本](manage-gateways-ggv2.md#update-component-version)。

            1. 在**死区设置**中，配置**死区类型**。死区类型控制您的源发送给您的 Amazon IoT SiteWise数据以及它丢弃了哪些数据。有关死区设置的更多信息，请参阅 [使用 OPC UA 筛选数据摄取范围](opcua-data-acquisition.md)。
               + **无** — 关联的服务器发送此属性组的所有数据点。
               + **百分比** — 关联的服务器仅发送超出数据范围指定百分比的数据。该范围由服务器根据为每个节点定义的最小和最大工程单位计算得出。如果服务器不支持百分比死区或缺少定义的工程单元，则网关将使用下面提供的最小值和最大值来计算范围。
               + **绝对** — 关联的服务器仅发送超出特定范围的数据。

               1. 将**死区值**设置为数据范围与死区的百分比。

               1. （可选）使用**最小范围 - *可选***和**最大范围 - *可选***，为死区范围指定最小值和最大值。

------
#### [ Poll ]

**要按特定间隔发送数据点，请执行以下步骤：**
            + 选择**轮询**并设置以下内容：

              1. **扫描速率** — 您希望 SiteWise Edge 网关读取寄存器的速率。 Amazon IoT SiteWise 自动计算您的 SiteWise Edge 网关允许的最低扫描速率。

              1. **时间戳** — 要包含在 OPC UA 数据点中的时间戳。您可以使用服务器时间戳或设备的时间戳。
**注意**  
使用 IoT SiteWise OPC UA 收集器组件的 3.1.0 或更高版本。如果您在早期版本中使用时间戳功能，则配置更新会失败。有关更多信息，请参阅 [更新 Amazon IoT SiteWise 组件的版本](manage-gateways-ggv2.md#update-component-version)。

**注意**  
当您在**扫描模式设置**中选择**订阅**时，**死区设置**适用。

------

1. 选择**保存**。

## 配置 OPC UA 来源 ()Amazon CLI
<a name="configure-opc-ua-source-cli"></a>

您可以使用为 SiteWise Edge 网关定义 OPC UA 数据源。 Amazon CLI为此，请创建一个 OPC UA 功能配置 JSON 文件，然后使用[ update-gateway-capability-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/update-gateway-capability-configuration.html#)命令更新 SiteWise Edge 网关配置。您必须在单个功能配置中定义所有 OPC UA 源。

------
#### [ MQTT-enabled, V3 gateway ]

此功能具有以下命名空间。
+ `iotsitewise:opcuacollector:3`

```
{
  "sources": [
    {
      "name": "string",
      "endpoint": {
        "certificateTrust": {
          "type": "TrustAny" | "X509",
          "certificateBody": "string",
          "certificateChain": "string",
        },
        "endpointUri": "string",
        "securityPolicy": "NONE" | "BASIC128_RSA15" | "BASIC256" | "BASIC256_SHA256" | "AES128_SHA256_RSAOAEP" | "AES256_SHA256_RSAPSS",
        "messageSecurityMode": "NONE" | "SIGN" | "SIGN_AND_ENCRYPT",
        "identityProvider": {
          "type": "Anonymous" | "Username",
          "usernameSecretArn": "string"
        },
        "nodeFilterRules": [
          {
            "action": "INCLUDE",
            "definition": {
              "type": "OpcUaRootPath",
              "rootPath": "string"
            }
          }
        ]
      },
      "measurementDataStreamPrefix": "string",
      "typeConversions": {
        "array": "JsonArray",
        "datetime": "ISO8601String"
        },
      "destination": {
        {
          "type":"MQTT"
        }           
      },
      "defaultPropertyGroupConfig": {
        "dataChangeTrigger": "STATUS" | "STATUS_VALUE" | "STATUS_VALUE_TIMESTAMP"
      },
      "discoveryConfig": {
        "enableNodeTraversal": true | false,
        "avoidNodeTreeLoops": true | false,
        "maxConcurrentBrowseRequests": integer,
        "maxNodesPerBrowseRequest": integer,
        "periodicDiscovery": {
          "interval": "string",
          "maxNodesDiscoveredPerInterval": integer
        }
      },
      "propertyGroups": [
        {
          "name": "string",
          "nodeFilterRuleDefinitions": [
            {
              "type": "OpcUaRootPath",
              "rootPath": "string"
            }
          ],
          "deadband": {
            "type": "PERCENT" | "ABSOLUTE",
            "value": double,
            "eguMin": double,
            "eguMax": double,
            "timeoutMilliseconds": integer
          },
          "scanMode": {
            "type": "EXCEPTION" | "POLL",
            "rate": integer,
            "timestampToReturn": "SOURCE_TIME" | "SERVER_TIME"
          },
          "dataQuality": {
            "allowGoodQuality": true | false,
            "allowBadQuality": true | false,
            "allowUncertainQuality": true | false
          },
          "subscription": {
            "dataChangeTrigger": "STATUS" | "STATUS_VALUE" | "STATUS_VALUE_TIMESTAMP",
            "queueSize": integer,
            "publishingIntervalMilliseconds": integer,
            "snapshotFrequencyMilliseconds": integer
          }  
        }  
      ]  
    }  
  ]  
}
```

------
#### [ Classic streams, V2 gateway ]

此功能具有以下命名空间。
+ `iotsitewise:opcuacollector:2`

请求语法

```
{
  "sources": [
    {
      "name": "string",
      "endpoint": {
        "certificateTrust": {
          "type": "TrustAny" | "X509",
          "certificateBody": "string",
          "certificateChain": "string",
        },
        "endpointUri": "string",
        "securityPolicy": "NONE" | "BASIC128_RSA15" | "BASIC256" | "BASIC256_SHA256" | "AES128_SHA256_RSAOAEP" | "AES256_SHA256_RSAPSS",
        "messageSecurityMode": "NONE" | "SIGN" | "SIGN_AND_ENCRYPT",
        "identityProvider": {
          "type": "Anonymous" | "Username",
          "usernameSecretArn": "string"
        },
        "nodeFilterRules": [
          {
            "action": "INCLUDE",
            "definition": {
              "type": "OpcUaRootPath",
              "rootPath": "string"
            }
          }
        ]
      },
      "measurementDataStreamPrefix": "string",
      "typeConversions": {
        "array": "JsonArray",
        "datetime": "ISO8601String"
        },
      "destination": {
        "type": "StreamManager",
        "streamName": "string",
        "streamBufferSize": integer,                      
      },
      "propertyGroups": [
        {
          "name": "string",
          "nodeFilterRuleDefinitions": [
            {
              "type": "OpcUaRootPath",
              "rootPath": "string"
            }
          ],
          "deadband": {
            "type": "PERCENT" | "ABSOLUTE",
            "value": double,
            "eguMin": double,
            "eguMax": double,
            "timeoutMilliseconds": integer
          },
          "scanMode": {
            "type": "EXCEPTION" | "POLL",
            "rate": integer,
            "timestampToReturn": "SOURCE_TIME" | "SERVER_TIME"
          },
          "dataQuality": {
            "allowGoodQuality": true | false,
            "allowBadQuality": true | false,
            "allowUncertainQuality": true | false
          },
          "subscription": {
            "dataChangeTrigger": "STATUS" | "STATUS_VALUE" | "STATUS_VALUE_TIMESTAMP",
            "queueSize": integer,
            "publishingIntervalMilliseconds": integer,
            "snapshotFrequencyMilliseconds": integer
          }  
        }  
      ]  
    }  
  ]  
}
```

------

### 请求正文
<a name="opcua-request-body"></a>

`sources`  
OPC UA 源定义结构的列表，每个结构均包含以下信息：    
`name`  
源的唯一友好名称。  
`endpoint`  
一个包含以下信息的终端节点结构：    
`certificateTrust`  
一个包含以下信息的证书信任策略结构：    
`type`  
源的证书信任模式。选择下列选项之一：  
+ `TrustAny`— 边 SiteWise 缘网关在连接到 OPC UA 源时信任任何证书。
+ `X509`— 边 SiteWise 缘网关在连接到 OPC UA 源时信任 X.509 证书。如果选择此选项，则必须在 `certificateTrust` 中定义 `certificateBody`。也可以在 `certificateTrust` 中定义 `certificateChain`。  
`certificateBody`  
（可选）X.509 证书的正文。  
如果您在 `certificateTrust` 中为 `type` 选择 `X509`，则此字段为必填字段。  
`certificateChain`  
（可选）X.509 证书的信任链。  
仅当您在 `certificateTrust` 中为 `type` 选择 `X509` 时使用此字段。  
`endpointUri`  
OPC UA 源的本地端点。例如，您的本地终端节点可能类似于 `opc.tcp://203.0.113.0:49320`。  
`securityPolicy`  
要使用的安全策略，可保护从 OPC UA 源读取的消息。选择下列选项之一：  
+ `NONE`— 边 SiteWise 缘网关不保护来自 OPC UA 来源的消息。建议您选择不同的安全策略。如果选择此选项，则还必须为 `messageSecurityMode` 选择 `NONE`。
+ `BASIC256_SHA256` — `Basic256Sha256` 安全政策。
+ `AES128_SHA256_RSAOAEP` — `Aes128_Sha256_RsaOaep` 安全政策。
+ `AES256_SHA256_RSAPSS` — `Aes256_Sha256_RsaPss` 安全政策。
+ `BASIC128_RSA15` —（已弃用）OPC UA 规范中已弃用 `Basic128Rsa15` 安全策略，因为它被视为不再安全。建议您选择不同的安全策略。有关更多信息，请参阅[配置文件 SecurityPolicy — Basic](https://profiles.opcfoundation.org/profile/1532) 128Rsa15。
+ `BASIC256` —（已弃用）OPC UA 规范中已弃用 `Basic256` 安全策略，因为它被视为不再安全。建议您选择不同的安全策略。有关更多信息，请参阅 [SecurityPolicy — Basic256](https://profiles.opcfoundation.org/profile/1536)。
如果您选择除 `NONE` 外的其他安全策略，则 `messageSecurityMode` 必须选择 `SIGN` 或 `SIGN_AND_ENCRYPT`。您还必须将源服务器配置为信任 SiteWise Edge 网关。有关更多信息，请参阅 [设置 OPC UA 服务器以信任边 Amazon IoT SiteWise 缘网关](enable-source-trust.md)。  
`messageSecurityMode`  
用于保护与 OPC UA 源的连接的消息安全模式。选择下列选项之一：  
+ `NONE`— 边 SiteWise 缘网关无法保护与 OPC UA 源的连接。建议您选择不同的消息安全模式。如果选择此选项，则还必须为 `securityPolicy` 选择 `NONE`。
+ `SIGN`— 在 SiteWise Edge 网关和 OPC UA 源之间传输的数据已签名，但未加密。
+ `SIGN_AND_ENCRYPT` — 对网关和 OPC UA 源之间的传输中数据进行签名和加密。
如果您选择除 `NONE` 外的消息安全模式，则必须选择除 `NONE` 外的 `securityPolicy`。您还必须将源服务器配置为信任 SiteWise Edge 网关。有关更多信息，请参阅 [设置 OPC UA 服务器以信任边 Amazon IoT SiteWise 缘网关](enable-source-trust.md)。  
`identityProvider`  
一个包含以下信息的身份提供程序结构：    
`type`  
源所需的身份验证凭证的类型。选择下列选项之一：  
+ `Anonymous` — 源不需要身份验证即可连接。
+ `Username` — 源需要用户名和密码才能连接。如果选择此选项，则必须在 `identityProvider` 中定义 `usernameSecretArn`。  
`usernameSecretArn`  
（可选）密钥的 ARN。 Amazon Secrets Manager SiteWise Edge 网关在连接到此源时使用此密钥中的身份验证凭证。您必须将密钥附加到 SiteWise Edge 网关的 IoT SiteWise 连接器，才能将其用于源身份验证。有关更多信息，请参阅 [为 SiteWise Edge 配置数据源身份验证](configure-source-authentication-ggv2.md)。  
如果您在 `identityProvider` 中为 `type` 选择 `Username`，则此字段为必填字段。  
`nodeFilterRules`  
此列表中的每个结构都必须包含以下信息：    
`action`  
此节点筛选器规则的操作。可以选择以下选项：  
+ `INCLUDE`— SiteWise Edge 网关仅包含符合此规则的数据流。  
`definition`  
一个包含以下信息的节点筛选器规则结构：    
`type`  
此规则的节点筛选器路径的类型。可以选择以下选项：  
+ `OpcUaRootPath`— SiteWise Edge 网关根据 OPC UA 路径层次结构的根目录评估此节点筛选路径。  
`rootPath`  
根据 OPC UA 路径层次结构的根进行评估的节点筛选条件路径。此路径必须以 `/` 开头。  
`measurementDataStreamPrefix`  
要在源中所有数据流的前面加上的字符串。 SiteWise Edge 网关将此前缀添加到来自该源的所有数据流。使用数据流前缀，可以区分来自不同源的同名数据流。在您的账户中，每个数据流都应具有唯一的名称。  
`typeConversions`  
不支持的 OPC UA 数据类型可用的转换类型。每种数据类型都转换为字符串。有关更多信息，请参阅 [转换不支持的数据类型](string-conversion.md)。    
`array`  
转换为字符串的简单数组数据类型。可以选择以下选项：  
+ `JsonArray` — 表示您选择将简单数组数据类型转换为字符串。  
`datetime`  
转换为字符串 DateTime 的数据类型。可以选择以下选项：  
+ `ISO8601String` — 表示您选择将 ISO 8601 数据类型转换为字符串。  
`destination`  
OPC UA 标签目标的配置。支持 v2 和 MQTT 的 Classic Stream、V3 网关对目的地的配置不同。    
`type`  
目标的类型。  
`streamName`— *仅适用于经典直播、V2 网关*  
流的名称。流名称应该唯一。  
`streamBufferSize`— *仅适用于经典直播、V2 网关*  
流的缓冲区大小。这对于管理来自 OPC UA 源的数据流非常重要。  
`defaultPropertyGroupConfig`— *支持 MQTT，仅*限 V3 网关  
（可选）默认属性组的配置。默认属性组包含所有未包含在用户定义的属性组中的节点。    
`dataChangeTrigger`  
要在默认属性组中使用的默认数据更改触发器。有效值为 `STATUS_VALUE_TIMESTAMP`、`STATUS_VALUE` 或 `STATUS`。
`defaultPropertyGroupConfig`需要物联网 SiteWise OPC UA 收集器组件的 3.1.0 或更高版本。有关更多信息，请参阅 [更新 Amazon IoT SiteWise 组件的版本](manage-gateways-ggv2.md#update-component-version)。  
`discoveryConfig`— *支持 MQTT，仅*限 V3 网关  
（可选）OPC UA 节点发现过程的配置。    
`enableNodeTraversal`  
指定是否继续遍历由数据源的节点筛选器定义的根节点的子节点。设置为时`false`，发现将在根节点停止。  
`avoidNodeTreeLoops`  
指定是否在 OPC UA 节点浏览过程中避免无限循环。设置为时`true`，网关会跟踪访问过的节点以防止循环引用。  
`maxConcurrentBrowseRequests`  
您的 OPC UA 服务器可以同时处理的最大并发浏览请求数。有效范围为 1 到 500。  
`maxNodesPerBrowseRequest`  
每次浏览请求中向 OPC UA 服务器发送的最大节点数。有效范围为 1 到 1,000。  
`periodicDiscovery`  
以固定间隔定期运行发现的配置。提供此配置后，将启用定期发现。    
`interval`  
定期发现操作之间的时间间隔。你可以使用几`m`分钟、`h`几小时和几`d`天。例如，`90m` 或 `1h`。最小间隔为 30 秒。  
`maxNodesDiscoveredPerInterval`  
每个发现间隔应发现的最大节点数。这有助于控制网关和 OPC UA 服务器上的负载。
`periodicDiscovery`需要物联网 SiteWise OPC UA 收集器组件的 3.1.0 或更高版本。有关更多信息，请参阅 [更新 Amazon IoT SiteWise 组件的版本](manage-gateways-ggv2.md#update-component-version)。
如果发现无限循环，请启用`avoidNodeTreeLoops`。在`aws.iot.SiteWiseOpcUaCollector`组件下的 CloudWatch 日志中监控发现进度。

`propertyGroups`  
（可选）定义协议要求的 `deadband` 和 `scanMode` 的属性组列表。    
`name`  
属性组的名称。这应该是一个唯一的标识符。  
`deadband`  
`deadband` 值定义了在将数据发送到云端之前数据点的值必须发生的最小变化。它包含以下信息：    
`type`  
支持的死区类型。可以选择以下选项：  
+ `ABSOLUTE` — 一个固定值，它指定了将数据点视为足够重要以发送到云端所需的最小绝对变化。
+ `PERCENT` — 一个动态值，它以占上次发送的数据点值的百分比形式指定所需的最小变化。当数据值随时间变化显著时，这种类型的死区非常有用。  
`value`  
死区值。如果 `type` 是 `ABSOLUTE`，则此值为无单位的双精度。如果 `type` 是 `PERCENT`，则此值是 `1` 和 `100` 之间的双精度。  
`eguMin`  
（可选）使用 `PERCENT` 死区时的工程单位最小值。如果 OPC UA 服务器未配置工程单元，则可以设置此项。  
`eguMax`  
（可选）使用 `PERCENT` 死区时的工程单位最大值。如果 OPC UA 服务器未配置工程单元，则可以设置此项。  
`timeoutMilliseconds`  
超时前的持续时间，以毫秒为单位。最少为 `100`。  
`scanMode`  
`scanMode` 结构包含以下信息：    
`type`  
支持的 `scanMode` 类型。接受的值为：`POLL` 和 `EXCEPTION`。  
`rate`  
扫描模式的采样间隔。  
`timestampToReturn`  
时间戳的来源。可以选择以下选项：  
+ `SOURCE_TIME` — 使用设备上的时间戳。
+ `SERVER_TIME` — 使用服务器上的时间戳。
`TimestampToReturn`与 2.5.0 或更高版本的 IoT SiteWise OPC UA 收集器组件一起使用。如果您在早期版本中使用此功能，则配置更新会失败。有关更多信息，请参阅 [更新 Amazon IoT SiteWise 组件的版本](manage-gateways-ggv2.md#update-component-version)。  
`nodeFilterRuleDefinitions`  
（可选）包含在属性组中的节点路径列表。属性组不能重叠。如果您不为此字段指定值，则该组包含根目录下的所有路径，且您无法创建其他属性组。`nodeFilterRuleDefinitions` 结构包含以下信息：    
`type`  
`OpcUaRootPath` 是唯一支持的类型。这指定 `rootPath` 值是相对于 OPC UA 浏览空间根目录的路径。  
`rootPath`  
以逗号分隔的列表，用于指定要包含在属性组中的路径（相对于根路径）。

### 经典流、V2 网关的其他功能配置示例 ()Amazon CLI
<a name="opc-ua-source-example-cli"></a>

以下示例根据存储在 JSON 文件中的有效负载定义了 OPC UA SiteWise Edge 网关功能配置。

```
aws iotsitewise update-gateway-capability-configuration \
--capability-namespace "iotsitewise:opcuacollector:2" \
--capability-configuration file://opc-ua-configuration.json
```

**Example ：OPC UA 源配置**  
以下 `opc-ua-configuration.json` 文件定义了基本的、不安全的 OPC UA 源配置。  

```
{
    "sources": [
        {
            "name": "Wind Farm #1",
            "endpoint": {
                "certificateTrust": {
                    "type": "TrustAny"
                },
                "endpointUri": "opc.tcp://203.0.113.0:49320",
                "securityPolicy": "NONE",
                "messageSecurityMode": "NONE",
                "identityProvider": {
                    "type": "Anonymous"
                },
                "nodeFilterRules": []
            },
            "measurementDataStreamPrefix": ""
        }
    ]
}
```

**Example ：带有已定义属性组的 OPC UA 源配置**  
以下 `opc-ua-configuration.json` 文件定义了一个基本的、不安全的 OPC UA 源配置，其中包含已定义的属性组。  

```
{
    "sources": [
        {
            "name": "source1",
            "endpoint": {
                "certificateTrust": {
                    "type": "TrustAny"
                },
                "endpointUri": "opc.tcp://10.0.0.9:49320",
                "securityPolicy": "NONE",
                "messageSecurityMode": "NONE",
                "identityProvider": {
                    "type": "Anonymous"
                },
                "nodeFilterRules": [
                    {
                        "action": "INCLUDE",
                        "definition": {
                            "type": "OpcUaRootPath",
                            "rootPath": "/Utilities/Tank"
                        }
                    }
                ]
            },
            "measurementDataStreamPrefix": "propertyGroups",
            "propertyGroups": [
                 {
                     "name": "Deadband_Abs_5",
                     "nodeFilterRuleDefinitions": [
                         {
                             "type": "OpcUaRootPath",
                             "rootPath": "/Utilities/Tank/Temperature/TT-001"
                         },
                         {
                             "type": "OpcUaRootPath",
                             "rootPath": "/Utilities/Tank/Temperature/TT-002"
                         }
                     ],
                     "deadband": {
                         "type":"ABSOLUTE",
                         "value": 5.0,
                         "timeoutMilliseconds": 120000
                     }
                 },
                 {
                     "name": "Polling_10s",
                     "nodeFilterRuleDefinitions": [
                         {
                             "type": "OpcUaRootPath",
                             "rootPath": "/Utilities/Tank/Pressure/PT-001"
                         }
                     ],
                     "scanMode": {
                         "type": "POLL",
                         "rate": 10000
                     }
                 },
                 {
                     "name": "Percent_Deadband_Timeout_90s",
                     "nodeFilterRuleDefinitions": [
                         {
                             "type": "OpcUaRootPath",
                             "rootPath": "/Utilities/Tank/Flow/FT-*"
                         }
                     ],
                     "deadband": {
                         "type":"PERCENT",
                         "value": 5.0,
                         "eguMin": -100,
                         "eguMax": 100,
                         "timeoutMilliseconds": 90000
                     }
                 }
             ]
        }
    ]
}
```

**Example ：带属性的 OPC UA 源配置**  
针对 `opc-ua-configuration.json` 的以下 JSON 示例定义了具有以下属性的 OPC UA 源配置：  
+ 信任任何证书。
+ 使用 `BASIC256` 安全策略保护消息。
+ 使用 `SIGN_AND_ENCRYPT` 模式保护连接。
+ 使用存储在 Secrets Manager 密钥中的身份验证凭证。
+ 筛选出数据流（路径以 `/WindFarm/2/WindTurbine/` 开头的数据流除外）。
+ 在每个数据流路径的开头添加 `/Washington` 以将此“Wind Farm \$12”与另一个区域中的“Wind Farm \$12”区分开来。

```
{
    "sources": [
        {
            "name": "Wind Farm #2",
            "endpoint": {
                "certificateTrust": {
                    "type": "TrustAny"
                },
                "endpointUri": "opc.tcp://203.0.113.1:49320",
                "securityPolicy": "BASIC256",
                "messageSecurityMode": "SIGN_AND_ENCRYPT",
                "identityProvider": {
                    "type": "Username",
                    "usernameSecretArn": "arn:aws:secretsmanager:region:123456789012:secret:greengrass-windfarm2-auth-1ABCDE"
                },
                "nodeFilterRules": [
                  {
                      "action": "INCLUDE",
                      "definition": {
                          "type": "OpcUaRootPath",
                          "rootPath": "/WindFarm/2/WindTurbine/"
                    }
                  }
                ]
            },
            "measurementDataStreamPrefix": "/Washington"
        }
    ]
}
```

**Example ：具有证书信任的 OPC UA 源配置**  
针对 `opc-ua-configuration.json` 的以下 JSON 示例定义了具有以下属性的 OPC UA 源配置：  
+ 信任给定的 X.509 证书。
+ 使用 `BASIC256` 安全策略保护消息。
+ 使用 `SIGN_AND_ENCRYPT` 模式保护连接。

```
{
    "sources": [
        {
            "name": "Wind Farm #3",
            "endpoint": {
                "certificateTrust": {
                    "type": "X509",
                    "certificateBody": "-----BEGIN CERTIFICATE-----
          MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
 0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
 WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
 EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
 jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
 MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
 WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
 HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
 BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
 k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
 ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
 AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
 KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
 EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
 3rrszlaEXAMPLE=
          -----END CERTIFICATE-----",
                    "certificateChain": "-----BEGIN CERTIFICATE-----
          MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
 0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
 WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
 EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
 jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
 MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
 WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
 HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
 BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
 k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
 ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
 AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
 KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
 EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
 3rrszlaEXAMPLE=
          -----END CERTIFICATE-----"
                },
                "endpointUri": "opc.tcp://203.0.113.2:49320",
                "securityPolicy": "BASIC256",
                "messageSecurityMode": "SIGN_AND_ENCRYPT",
                "identityProvider": {
                    "type": "Anonymous"
                },
                "nodeFilterRules": []
              },
            "measurementDataStreamPrefix": ""
              
        }
    ]
}
```