

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

# 为数据集成配置 Node-red 流程 Amazon IoT SiteWise
配置 Node-red 流

借助 Node-red®，您可以实现两个流程来管理设备和之间的数据。 Amazon IoT SiteWise这些流程共同创建了一个全面的数据管理解决方案，可同时满足本地和云端数据流的需求。
+ **数据发布流程**-发布到云端。数据发布流程将数据发送到 Amazon IoT SiteWise。该流程通过生成传感器数据、将其转换为 Amazon IoT SiteWise 格式并发布到 SiteWise Edge MQTT 代理来模拟涡轮机设备。这使您能够利用 Amazon IoT SiteWise云功能进行存储、分析以及与其他 Amazon 服务的集成。

  有关更多信息，请参阅 [配置数据发布流程](windows-nodered-data-publish-flow.md)。
+ **数据保留流程**-将数据存储在边缘。数据保留流程订阅 SiteWise Edge MQTT 代理以接收数据，将其转换为 InfluxDB® 格式，然后将其存储在本地以进行监控。这种本地存储允许即时访问操作数据，减少时间关键型应用程序的延迟，并确保网络中断期间的连续性。

  有关更多信息，请参阅 [配置数据保留流程](windows-nodered-data-retention-flow.md)。

这两个流程协同工作，确保数据既发送到本地， Amazon IoT SiteWise 又存储在本地，以便立即访问。

[要访问你的 Node-red 主机，请访问 http://127.0.0.1:1880。](http://127.0.0.1:1880)有关启用 TLS 的信息，请参阅[启用 TLS 加密](https://docs.influxdata.com/influxdb/v2/admin/security/enable-tls/)。

# 配置数据发布流程


数据发布流程使用三个节点来创建将您的工业数据发送到云端的管道。该流程对于实现基于云的分析、长期存储以及与其他 Amazon 服务的集成至关重要。首先，将模拟设备数据发送到 SiteWise Edge MQTT 代理。网关从经纪人那里获取数据，然后将其传输到 Amazon IoT SiteWise 云端，在那里你可以利用强大的分析和可视化功能。
+ **数据输入**-接收来自工业设备或模拟器的设备数据
+ **数据转换器 Amazon IoT SiteWise**-将数据转换为 Amazon IoT SiteWise 格式，以确保与 SiteWise Edge 网关兼容
+ **MQTT 发布者**-向 SiteWise Edge MQTT 代理发布数据，使其可供本地和云用户使用

![\[显示了 Node-red 数据发布流程的图表。它将模拟设备数据发送到 SiteWise Edge MQTT 代理，由 Ed SiteWise ge Gateway 获取，然后发送到 Amazon IoT SiteWise 云端。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-publish-flow.png)


## 配置数据输入节点


在此示例中，数据输入节点使用模拟风力涡轮机设备来生成风速数据。无论是来自模拟源（如我们的示例）还是来自生产环境中的实际工业设备，此节点都是您的工业数据的入口点。

我们对数据负载使用自定义 JSON 格式，以提供可与本地处理工具和 Amazon IoT SiteWise 云服务高效配合使用的标准化结构。这种格式包括时间戳和质量指标等基本元数据以及实际测量值，从而在整个管道中实现全面的数据管理和质量跟踪。导入注入节点，以此标准化 JSON 格式接收带有时间戳、质量指标和值的模拟数据。

*有关 Node-RED 注入节点的更多信息，请参阅文档中的[注入](https://nodered.org/docs/user-guide/nodes#inject)部分。Node-RED*

涡轮机模拟器每秒以这种标准化 JSON 格式生成风速数据：

**Example : 涡轮机数据有效载荷**  

```
{
    name: string,         // Property name/identifier
    timestamp: number,    // Epoch time in nanoseconds
    quality: "GOOD" | "UNCERTAIN" | "BAD",
    value: number | string | boolean
}
```

这种格式有几个好处：
+ 该`name`字段标识特定的属性或测量值，允许您跟踪来自同一设备的多个数据点
+ `timestamp`以纳秒为单位可确保精确的时间跟踪，从而进行准确的历史分析
+ 该`quality`指标可帮助您根据数据的可靠性筛选和管理数据
+ 灵活的`value`字段支持不同的数据类型，以适应不同的传感器输出

**Example : 涡轮模拟器的注入节点**  

```
[
    {
        "id": "string",
        "type": "inject",
        "z": "string",
        "name": "Turbine Simulator",
        "props": [
            {
                "p": "payload.timestamp",
                "v": "",
                "vt": "date"
            },
            {
                "p": "payload.quality",
                "v": "GOOD",
                "vt": "str"
            },
            {
                "p": "payload.value",
                "v": "$random()",
                "vt": "jsonata"
            },
            {
                "p": "payload.name",
                "v": "/Renton/WindFarm/Turbine/WindSpeed",
                "vt": "str"
            }
        ],
        "repeat": "1",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "x": 270,
        "y": 200,
        "wires": [
            [
                "string"
            ]
        ]
    }
]
```

## 为数据转换配置节点


E SiteWise dge 网关需要特定格式的数据，以确保与 Amazon IoT SiteWise 云的兼容性。转换器节点是将输入数据转换为所需 Amazon IoT SiteWise 有效载荷格式的重要组件。此转换步骤可确保您的工业数据能够在 Amazon IoT SiteWise 云环境中得到正确处理、存储和分析。

通过在此阶段对数据格式进行标准化，您可以实现边缘设备与云服务之间的集成，您可以在其中使用资产建模、分析和可视化功能。使用以下结构：

**Example : SiteWise Edge 数据解析的有效载荷结构**  

```
{
  "propertyAlias": "string",  
  "propertyValues": [
    {
      "value": { 
          "booleanValue": boolean, 
          "doubleValue": number, 
          "integerValue": number,
          "stringValue": "string" 
     },
      "timestamp": {
          "timeInSeconds": number,
          "offsetInNanos": number
      },
      "quality": "GOOD" | "UNCERTAIN" | "BAD",
  }]
}
```

**注意**  
`propertyAlias`将与您的 MQTT 主题层次结构相匹配（例如，`/Renton/WindFarm/Turbine/WindSpeed`）。这样可以确保您的数据与中的正确资产属性正确关联 Amazon IoT SiteWise。有关更多信息，请参阅中的 “数据流别名” 概念[Amazon IoT SiteWise 概念](concept-overview.md)。

1. 导入用于 Amazon IoT SiteWise 有效载荷转换的示例函数节点。此函数处理从标准化输入格式到 Amazon IoT SiteWise兼容格式的转换，确保正确的时间戳格式、质量指标和值键入。

   ```
   [
       {
           "id": "string",
           "type": "function",
           "z": "string",
           "name": "Translate to SiteWise payload",
           "func": "let input = msg.payload;\nlet output = {};\n\noutput[\"propertyAlias\"] = input.name;\n\nlet propertyVal = {}\n\nlet timeInSeconds = Math.floor(input.timestamp / 1000);\nlet offsetInNanos = (input.timestamp % 1000) * 1000000;\n\npropertyVal[\"timestamp\"] = {\n    \"timeInSeconds\": timeInSeconds,\n    \"offsetInNanos\": offsetInNanos,\n};\n\npropertyVal[\"quality\"] = input.quality\n\nlet typeNameConverter = {\n    \"number\": (x) => Number.isInteger(x) ? \"integerValue\" : \"doubleValue\",\n    \"boolean\": (x) => \"booleanValue\",\n    \"string\": (x) => \"stringValue\", \n}\nlet typeName = typeNameConverter[typeof input.value](input.value)\npropertyVal[\"value\"] = {}\npropertyVal[\"value\"][typeName] = input.value;\n\noutput[\"propertyValues\"] = [propertyVal]\n\nreturn {\n    payload: JSON.stringify(output)\n};",
           "outputs": 1,
           "timeout": "",
           "noerr": 0,
           "initialize": "",
           "finalize": "",
           "libs": [],
           "x": 530,
           "y": 200,
           "wires": [
               [
                   "string"
               ]
           ]
       }
   ]
   ```

1. 验证 JavaScript 代码是否正确转换了风速数据。该函数执行几项重要任务：
   + 从输入中提取属性名称并将其设置为 propertyAlias
   + 将时间戳从毫秒转换为所需的秒和纳秒格式
   + 保留用于数据可靠性跟踪的质量指标
   + 自动检测值类型并根据 Amazon IoT SiteWise 要求对其进行格式化

1. 将该节点连接到您的流程，将其链接到数据输入节点和 MQTT 发布者之间。

有关编写特定于业务需求的函数的指导，请参阅*Node-RED文档*中的[编写函数](https://nodered.org/docs/user-guide/writing-functions)

## 配置 MQTT 发布器


翻译完成后，数据就可以发布到 SiteWise Edge MQTT 代理了。

使用以下设置配置 MQTT 发布者以向 SiteWise Edge MQTT 代理发送数据：

**导入 MQTT 输出节点**

1. 使用`"type": "mqtt out"`将 MQTT 导出配置节点。MQTT 输出节点允许您共享经纪商的配置。

1. 输入键值对以获取与 MQTT 代理连接和消息路由相关的信息。

导入示例`mqtt out`节点。

**Example**  

```
[
    {
        "id": "string",
        "type": "mqtt out",
        "z": "string",
        "name": "Publish to MQTT broker",
        "topic": "/Renton/WindFarm/Turbine/WindSpeed",
        "qos": "1",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "string",
        "x": 830,
        "y": 200,
        "wires": []
    },
    {
        "id": "string",
        "type": "mqtt-broker",
        "name": "emqx",
        "broker": "127.0.0.1",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "5",
        "keepalive": 15,
        "cleansession": true,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]
```

示例 MQTT 输出节点使用以下信息创建 MQTT 连接：
+ Server：`127.0.0.1`
+ 端口：`1883`
+ 协议：`MQTT V5`

然后，MQTT 输出节点使用以下信息配置消息路由：
+ 主题: `/Renton/WindFarm/Turbine/WindSpeed`
+ 服务质量：`1`

## 部署并验证节点


配置三个数据发布流程节点后，请按照以下步骤部署流程并验证数据是否正确传输到 Amazon IoT SiteWise

**部署和验证连接**

1. 按照数据发布流程所示连接三个节点。  
![\[Data publish flow diagram showing input from turbine simulator to Amazon IoT SiteWise to MQTT broker.\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-publish-flow.png)

1. 选择 **Deploy** 以应用所有节点连接更改。

1. 导航到[Amazon IoT SiteWise 控制台](https://console.amazonaws.cn/iotsitewise/)并选择 “**数据流**”。

1. 确保在下拉菜单中选择了**别名前缀**。然后，搜索`/Renton/WindFarm/Turbine/WindSpeed`别名。

如果您在搜索中看到正确的别名，则表示您已经部署了流程并验证了数据传输。

# 配置数据保留流程


数据保留流程可用于保持边缘的操作可见性。这在网络中断或需要立即访问数据时非常有用。此流程订阅 MQTT 代理以接收设备数据，将其转换为 InfluxDB® 格式，然后将其存储在本地。通过实施此流程，您可以创建弹性本地数据存储，操作员无需依赖云即可访问该数据存储，从而实现边缘的实时监控和决策。

该流程由三个关键组件组成，它们协同工作，以确保正确捕获和存储您的数据：
+ **MQTT 订阅客户端**-接收来自经纪商的数据，确保您捕获所有相关的行业数据
+ **InfluxDB 转换器**-将 Amazon IoT SiteWise 有效负载转换为 InfluxDB 格式，为高效的时间序列存储做好准备
+ **InfluxDB 写入器**-处理本地存储，确保本地应用程序的数据持久性和可用性

![\[Node-red 数据保留流程\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-data-retention.png)


## 设置 MQTT 订阅客户端

+ 通过导入以下示例，在 Node-RED 中配置 MQTT 订阅客户端，使其接收来自 MQTT EMQX 代理的数据。 Amazon IoT SiteWise   
**Example : 节点中的 MQTT**  

  ```
  [
      {
          "id": "string",
          "type": "mqtt in",
          "z": "string",
          "name": "Subscribe to MQTT broker",
          "topic": "/Renton/WindFarm/Turbine/WindSpeed",
          "qos": "1",
          "datatype": "auto-detect",
          "broker": "string",
          "nl": false,
          "rap": true,
          "rh": 0,
          "inputs": 0,
          "x": 290,
          "y": 340,
          "wires": [
              [
                  "string"
              ]
          ]
      },
      {
          "id": "string",
          "type": "mqtt-broker",
          "name": "emqx",
          "broker": "127.0.0.1",
          "port": "1883",
          "clientid": "",
          "autoConnect": true,
          "usetls": false,
          "protocolVersion": "5",
          "keepalive": 15,
          "cleansession": true,
          "autoUnsubscribe": true,
          "birthTopic": "",
          "birthQos": "0",
          "birthPayload": "",
          "birthMsg": {},
          "closeTopic": "",
          "closePayload": "",
          "closeMsg": {},
          "willTopic": "",
          "willQos": "0",
          "willPayload": "",
          "willMsg": {},
          "userProps": "",
          "sessionExpiry": ""
      }
  ]
  ```

此订阅可确保捕获发布给经纪商的所有相关数据以供本地存储，从而提供您的工业运营的完整记录。该节点使用与该[配置 MQTT 发布器](windows-nodered-data-publish-flow.md#windows-nodered-mqtt-publisher-config)部分相同的 MQTT 连接参数，订阅设置如下：
+ 话题 — `/Renton/WindFarm/Turbine/WindSpeed`
+ 服务质量 — `1`

有关更多信息，请参阅*Node-RED文档*中的 [Connect 到 MQTT 代理](https://cookbook.nodered.org/mqtt/connect-to-broker)。

## 配置 InfluxDB 转换器


InfluxDB 使用[标签](https://docs.influxdata.com/influxdb/v1/concepts/glossary/#tag)进行索引，使用[字段](https://docs.influxdata.com/influxdb/v1/concepts/glossary/#field)作为值来组织数据。该组织优化了时间序列数据的查询性能和存储效率。导入包含将 Amazon IoT SiteWise 有效载荷转换为 InfluxDB 格式的 JavaScript 代码的示例函数节点。翻译器将属性分成两组：
+ 标签-用于高效索引的质量和名称属性
+ 字段-时间戳（自纪元以来的毫秒数）和值

**Example : 转换为 InfluxDB 有效负载的函数节点**  

```
[
    {
        "id": "string",
        "type": "function",
        "z": "string",
        "name": "Translate to InfluxDB payload",
        "func": "let data = msg.payload;\n\nlet timeInSeconds = data.propertyValues[0].timestamp.timeInSeconds;\nlet offsetInNanos = data.propertyValues[0].timestamp.offsetInNanos;\nlet timestampInMilliseconds = (timeInSeconds * 1000) + (offsetInNanos / 1000000);\n\nmsg.payload = [\n    {\n        \"timestamp(milliseconds_since_epoch)\": timestampInMilliseconds,\n        \"value\": data.propertyValues[0].value.doubleValue\n    },\n    {\n        \"name\": data.propertyAlias,\n        \"quality\": data.propertyValues[0].quality\n    }\n]\n\nreturn msg",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 560,
        "y": 340,
        "wires": [
            [
                "string"
            ]
        ]
    }
]
```

有关其他配置选项，请参阅 Node-red GitHub 存储库[node-red-contrib-influxdb](https://github.com/mblackstock/node-red-contrib-influxdb)中的。

## 设置 InfluxDB 写入器


InfluxDB 写入器节点是数据保留流程中的最后一个组件，负责将工业数据存储在本地 InfluxDB 数据库中。这种本地存储对于在网络中断期间保持操作可见性以及为时间紧迫的应用程序提供即时数据访问非常重要。

1. 通过 “管理面板” 选项安装 node-red-contrib-influxdb软件包。该软件包提供了将 Node-RED 与 InfluxDB 连接所需的节点。

1. 向您的流程中添加一个 InfluxDB 输出节点。这个节点将处理向你的InfluxDB数据库实际写入数据。

1. 配置服务器属性以建立与InfluxDB实例的安全连接：

   1. 将版本设置为 2.0-这指定您要连接到 InfluxDB v2.x，该版本使用与早期版本不同的 API

   1. 将 URL 设置为 `http://127.0.0.1:8086`-这指向您的本地 InfluxDB 实例

   1. 输入你的 InfluxDB 身份验证令牌。此安全令牌授权与您的数据库的连接。您在[使用 InfluxDB 设置本地存储](windows-influxdb-setup.md)操作过程中生成了令牌。

1. 指定存储位置参数以定义数据的存储位置和方式：

   1. 输入您的InfluxDB组织名称-该组织是一个供一组用户使用的工作空间，您的存储桶和仪表板属于该组。有关更多信息，请参阅中的[管理组织*InfluxData Documentation*](https://docs.influxdata.com/influxdb/v2/admin/organizations/)。

   1. 指定 InfluxDB 存储桶（例如，`WindFarmData`）— 该存储桶等同于传统系统中的数据库，可用作时间序列数据的容器

   1. 设置 InfluxDB 测量（例如`TurbineData`）— 测量值类似于关系数据库中的表，用于组织相关数据点

**注意**  
在InfluxDB实例的左侧边栏中找到您的组织名称。组织、存储桶和测量概念是InfluxDB数据组织模型的基础。有关更多信息，请参阅 [InfluxDB 文档](https://docs.influxdata.com/influxdb/v2/admin/organizations/)。

## 部署并验证保留流程


配置数据保留流程的所有组件后，您需要部署并验证系统是否正常运行。这种验证可确保您的工业数据正确存储在本地，便于即时访问和分析。

1. 如数据保留流程图所示，连接三个节点。这将创建从数据订阅到本地存储的完整管道。  
![\[Node-red 数据保留流程\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-data-retention.png)

1. 选择 **Deploy** 以应用您的更改并激活流程。这将启动数据收集和存储过程。

1. 使用 InfluxDB 数据资源管理器查询和可视化您的数据。此工具允许您验证数据存储是否正确，并创建时间序列数据的初始可视化效果。

   在 Data Explorer 中，您应该能够看到随时间推移记录的风速测量结果，从而确认从数据生成到本地存储的整个管道是否正常运行。

   有关更多信息，请参阅[中的在数据资源管理器中查询*InfluxData Documentation*](https://docs.influxdata.com/influxdb/v2/query-data/execute-queries/data-explorer/)。

部署了数据发布流程和数据保留流程后，您现在拥有了一个完整的系统，可以将数据发送到 Amazon IoT SiteWise 云端，同时维护本地副本以实现即时访问和弹性。这种双路径方法可确保您从基于云的分析和存储中受益，同时保持边缘的运营可见性。