

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

# 配置数据保留流程


数据保留流程可用于保持边缘的操作可见性。这在网络中断或需要立即访问数据时非常有用。此流程订阅 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 云端，同时维护本地副本以实现即时访问和弹性。这种双路径方法可确保您从基于云的分析和存储中受益，同时保持边缘的运营可见性。