

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定資料發佈流程
<a name="windows-nodered-data-publish-flow"></a>

資料發佈流程使用三個節點來建立管道，將工業資料傳送至雲端。此流程對於啟用雲端型分析、長期儲存以及與其他 AWS 服務的整合至關重要。首先，模擬的裝置資料會傳送至 SiteWise Edge MQTT 代理程式。閘道會從代理程式取得資料，允許傳輸到 AWS IoT SiteWise 雲端，您可以在其中利用強大的分析和視覺化功能。
+ **資料輸入** - 從工業設備或模擬器接收裝置資料
+ **適用於 的資料轉譯器 AWS IoT SiteWise** - 將資料轉譯為 AWS IoT SiteWise 格式，以確保與 SiteWise Edge 閘道的相容性
+ **MQTT 發佈者** - 將資料發佈至 SiteWise Edge MQTT 代理程式，使其可供本機和雲端消費者使用

![顯示 Node-RED 資料發佈流程的圖表。它會將模擬裝置資料傳送至 SiteWise Edge MQTT 代理程式，以供 SiteWise Edge Gateway 擷取，然後傳送至 AWS IoT SiteWise 雲端。](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-publish-flow.png)


## 設定資料輸入節點
<a name="windows-nodered-data-input-config"></a>

在此範例中，資料輸入節點使用模擬風力渦輪機裝置來產生風速資料。此節點可做為工業資料的進入點，無論是來自模擬來源 （如範例所示），還是來自生產環境中的實際工業設備。

我們為資料承載使用自訂 JSON 格式，以提供標準化結構，可有效率地與本機處理工具和 AWS IoT SiteWise 雲端服務搭配使用。此格式包含基本中繼資料，例如時間戳記和品質指標，以及實際的測量值，可在整個管道中實現全面的資料管理和品質追蹤。匯入注入節點以接收此標準化 JSON 格式的模擬資料，其中包含時間戳記、品質指標和值。

如需 Node-RED 注入節點的詳細資訊，請參閱 *Node-RED 文件*中的[注入](https://nodered.org/docs/user-guide/nodes#inject)一節。

渦輪模擬器會以此標準化 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"
            ]
        ]
    }
]
```

## 設定節點以進行資料轉譯
<a name="windows-nodered-sitewiseise-translator-config"></a>

SiteWise Edge 閘道需要特定格式的資料，以確保與 AWS IoT SiteWise 雲端的相容性。轉譯器節點是將您的輸入資料轉換為所需 AWS IoT SiteWise 承載格式的重要元件。此轉譯步驟可確保在雲端環境中正確處理、儲存及稍後分析 AWS 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`)。這可確保您的資料與 中的正確資產屬性正確關聯 AWS IoT SiteWise。如需詳細資訊，請參閱 中的「資料串流別名」概念[AWS IoT SiteWise 概念](concept-overview.md)。

1. 匯入用於 AWS IoT SiteWise 承載轉譯的範例函數節點。此函數會處理從標準化輸入格式到 AWS 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
   + 將時間戳記從毫秒轉換為所需的秒和奈秒格式
   + 保留資料可靠性追蹤的品質指標
   + 自動偵測值類型並根據需求格式化 AWS IoT SiteWise 

1. 將節點連接至您的流程，將其在資料輸入節點和 MQTT 發佈者之間連結。

如需撰寫專屬於您業務需求之函數的指引，請參閱 *Node-RED 文件*中的[撰寫函數](https://nodered.org/docs/user-guide/writing-functions) 

## 設定 MQTT 發佈者
<a name="windows-nodered-mqtt-publisher-config"></a>

翻譯後，資料已準備好發佈至 SiteWise Edge MQTT 代理程式。

使用這些設定來設定 MQTT 發佈者，將資料傳送至 SiteWise Edge MQTT 代理程式：

**匯入 MQTT 輸出節點**

1. 使用 匯入 MQTT 輸出組態節點`"type": "mqtt out"`。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 連線：
+ 伺服器： `127.0.0.1`
+ 連接埠： `1883`
+ 通訊協定： `MQTT V5`

然後，MQTT 輸出節點會使用下列資訊設定訊息路由：
+ 主題：`/Renton/WindFarm/Turbine/WindSpeed`
+ QoS： `1`

## 部署和驗證節點
<a name="windows-verify-deployment"></a>

設定三個資料發佈流程節點之後，請依照下列步驟部署流程，並確認資料已正確傳輸至 AWS IoT SiteWise

**部署和驗證連線**

1. 連接三個節點，如資料發佈流程中所示。  
![](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-publish-flow.png)

1. 選擇**部署**以套用所有節點連線變更。

1. 導覽至 [AWS IoT SiteWise 主控台](https://console.aws.amazon.com/iotsitewise/)，然後選擇**資料串流**。

1. 確定已在下拉式功能表中選取**別名字首**。然後，搜尋`/Renton/WindFarm/Turbine/WindSpeed`別名。

如果您在搜尋中看到正確的別名，表示您已部署流程和已驗證的資料傳輸。