

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

# 配置数据发布流程


数据发布流程使用三个节点来创建将您的工业数据发送到云端的管道。该流程对于实现基于云的分析、长期存储以及与其他 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`别名。

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