

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

# 手動設定開放原始碼整合 (Windows)
<a name="windows-manual-setup"></a>

使用本指南手動為與 Grafana® 和 Node-RED® 連線的風速資料建立時間序列儲存貯體。

 在 上手動安裝和設定 Node-RED、InfluxDB® 和 Grafana，Microsoft Windows以控制您的部署組態。您可以使用 InfluxDB 從裝置存放和管理時間序列資料。

## 手動設定先決條件
<a name="windows-open-source-prerequisites"></a>

開始之前，請先完成下列要求：

**注意**  
在相同的主機上執行所有服務 (SiteWise Edge、InfluxDB、Node-RED 和 Grafana)。
+ 安裝已啟用 MQTT 的 V3 閘道。如需詳細資訊，請參閱[啟用 MQTT 的 AWS IoT SiteWise Edge V3 閘道](mqtt-enabled-v3-gateway.md)。
+ 在本機安裝和執行這些服務：
  + InfluxDB OSS v2。如需安裝步驟，請參閱[安裝 InfluxDB](https://docs.influxdata.com/influxdb/v2/install/)。
  + Node-RED。如需安裝步驟，請參閱[在本機安裝 Node-RED](https://nodered.org/docs/getting-started/local)。
  + Grafana。如需安裝步驟，請參閱[安裝 Grafana](https://grafana.com/docs/grafana/latest/setup-grafana/installation/)。

# 使用 InfluxDB 設定本機儲存
<a name="windows-influxdb-setup"></a>

使用 InfluxDB®，您可以在本機儲存來自裝置的時間序列資料。本機儲存功能的目的是在網路中斷期間維持操作可見性，並減少時間關鍵型應用程式的延遲。您可以在邊緣執行分析和視覺化，同時仍可選擇選擇性地將資料轉送至雲端。

在本節中，您會為渦輪風速資料建立時間序列儲存貯體，並為 Grafana® 和 Node-RED® 連線產生 API 字符。InfluxDB 儲存貯體可做為時間序列資料的專用儲存容器，類似於傳統系統中的資料庫。API 字符可安全以程式設計方式存取您的資料。

**設定 InfluxDB**

1. 完成先決條件步驟並確保所有工具都在相同的主機上執行後，請開啟您的 Web 瀏覽器並前往 https：//[http://127.0.0.1:8086](http://127.0.0.1:8086)。

1. （選用） 啟用 TLS 加密以增強安全性。如需詳細資訊，請參閱《》中的[啟用 TLS 加密](https://docs.influxdata.com/influxdb/v2/admin/security/enable-tls/)*InfluxData Documentation*。

1. 建立時間序列 InfluxDB 儲存貯體以存放 Node-RED 中的資料。儲存貯體將做為風力發電廠資料的專用容器，可讓您組織和管理此資料集特有的保留政策。如需詳細資訊，請參閱《》中的[管理儲存貯](https://docs.influxdata.com/influxdb/v2/admin/buckets/)體*InfluxData Documentation*。

1. （選用） 設定節點的資料保留期間。設定適當的保留期有助於有效管理儲存資源，方法是自動移除本機操作不再需要的舊資料。

   如需資料保留的相關資訊，請參閱《[》中的 InfluxDB 中的資料保留](https://docs.influxdata.com/influxdb/v2/reference/internals/data-retention/)*InfluxData Documentation*。

1. 產生儲存貯體的 API 字符。此字符將啟用 InfluxDB 與 Node-RED 和 Grafana 等其他元件之間的安全通訊。如此一來，只有授權的服務才能讀取或寫入您的資料存放區。如需詳細資訊，請參閱《》中的[建立權杖](https://docs.influxdata.com/influxdb/cloud/admin/tokens/create-token/)*InfluxData Documentation*。

完成這些步驟後，您可以將時間序列資料儲存在 InfluxDB 執行個體中，為邊緣環境中的本機資料持久性和分析提供基礎。

# 設定 Node-RED 流程以進行 AWS IoT SiteWise 資料整合
<a name="windows-nodered-config"></a>

使用 Node-RED®，您可以實作兩個流程來管理裝置和 之間的資料 AWS IoT SiteWise。這些流程協同運作，以建立可處理本機和雲端資料流程的全方位資料管理解決方案。
+ **資料發佈流程 – **發佈至雲端。資料發佈流程會將資料傳送至 AWS IoT SiteWise。此流程透過產生感應器資料、將其轉換為 AWS IoT SiteWise 格式，以及發佈至 SiteWise Edge MQTT 代理程式，來模擬渦輪裝置。這可讓您利用 AWS IoT SiteWise的雲端功能來儲存、分析，以及與其他 AWS 服務的整合。

  如需詳細資訊，請參閱[設定資料發佈流程](windows-nodered-data-publish-flow.md)。
+ **資料保留流程** – 將資料存放在邊緣。資料保留流程會訂閱 SiteWise Edge MQTT 代理程式以接收資料、將其翻譯為 InfluxDB® 格式，並將其儲存在本機以進行監控。此本機儲存可讓您立即存取操作資料、降低關鍵時間應用程式的延遲，以及確保網路中斷期間的持續性。

  如需詳細資訊，請參閱[設定資料保留流程](windows-nodered-data-retention-flow.md)。

這兩個流程可一起運作，確保資料同時傳送至 AWS IoT SiteWise 並儲存在本機以供立即存取。

若要存取 Node-RED 主控台，請前往 https：//[http://127.0.0.1:1880](http://127.0.0.1:1880)。如需啟用 TLS 的資訊，請參閱[啟用 TLS 加密](https://docs.influxdata.com/influxdb/v2/admin/security/enable-tls/)。

# 設定資料發佈流程
<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. 連接三個節點，如資料發佈流程中所示。  
![\[Data publish flow diagram showing input from turbine simulator to AWS IoT SiteWise to MQTT broker.\]](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`別名。

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

# 設定資料保留流程
<a name="windows-nodered-data-retention-flow"></a>

資料保留流程可用來維持邊緣的操作可見性。這在網路中斷或您需要立即存取資料時非常有用。此流程會訂閱 MQTT 代理程式以接收裝置資料、將其轉換為 InfluxDB® 格式，並將其儲存在本機。透過實作此流程，您可以建立彈性的本機資料存放區，讓操作員無需雲端相依性即可存取，並在邊緣實現即時監控和決策。

流程由三個關鍵元件組成，共同確保正確擷取和存放您的資料：
+ **MQTT 訂閱用戶端** - 從代理程式接收資料，確保您擷取所有相關工業資料
+ **InfluxDB 轉譯器** - 將 AWS IoT SiteWise 承載轉換為 InfluxDB 格式，準備資料以實現高效的時間序列儲存
+ **InfluxDB 寫入器** - 處理本機儲存，確保本機應用程式的資料持久性和可用性

![\[Node-RED 資料保留流程\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-data-retention.png)


## 設定 MQTT 訂閱用戶端
<a name="windows-nodered-mqtt-subscriber"></a>
+  AWS IoT SiteWise 匯入以下範例，在 Node-RED 中設定 MQTT 訂閱用戶端，以接收來自 中 MQTT EMQX 代理程式的資料。  
**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`
+ QoS – `1`

如需詳細資訊，請參閱 *Node-RED 文件*中的[連線至 MQTT 中介裝置](https://cookbook.nodered.org/mqtt/connect-to-broker)。

## 設定 InfluxDB 轉譯器
<a name="windows-nodered-influxdb-translator"></a>

InfluxDB 使用索引的[標籤](https://docs.influxdata.com/influxdb/v1/concepts/glossary/#tag)和值[的欄位](https://docs.influxdata.com/influxdb/v1/concepts/glossary/#field)來組織資料。此組織會最佳化時間序列資料的查詢效能和儲存效率。匯入包含 JavaScript 程式碼的範例函數節點，將 AWS IoT SiteWise 承載轉換為 InfluxDB 格式。轉譯器會將屬性分割成兩個群組：
+ 標籤 – 有效率索引的品質和名稱屬性
+ 欄位 – 時間戳記 （自 epoch 起以毫秒為單位） 和值

**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)。 GitHub 

## 設定 InfluxDB 寫入器
<a name="windows-nodered-influxdb-writer"></a>

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 組織名稱 – 組織是一組使用者的工作區，您的儲存貯體和儀表板屬於其中。如需詳細資訊，請參閱《》中的[管理組織](https://docs.influxdata.com/influxdb/v2/admin/organizations/)*InfluxData Documentation*。

   1. 指定 InfluxDB 儲存貯體 （例如 `WindFarmData`) – 儲存貯體等同於傳統系統中的資料庫，可作為時間序列資料的容器

   1. 設定 InfluxDB 測量 （例如 `TurbineData`) – 測量類似於關聯式資料庫中的資料表，可組織相關資料點

**注意**  
在 InfluxDB 執行個體的左側邊欄中尋找您的組織名稱。組織、儲存貯體和測量概念是 InfluxDB 資料組織模型的基礎。如需詳細資訊，請參閱 [InfluxDB 文件](https://docs.influxdata.com/influxdb/v2/admin/organizations/)。

## 部署和驗證保留流程
<a name="windows-nodered-retention-deploy"></a>

設定資料保留流程的所有元件之後，您需要部署並驗證系統是否正常運作。此驗證可確保您的工業資料在本機正確存放，以便立即存取和分析。

1. 連接三個節點，如資料保留流程圖所示。這會建立從資料訂閱到本機儲存的完整管道。  
![\[Node-RED 資料保留流程\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-data-retention.png)

1. 選擇**部署**以套用變更並啟用流程。這會啟動資料收集和儲存程序。

1. 使用 InfluxDB Data Explorer 查詢和視覺化您的資料。此工具可讓您驗證資料是否已正確儲存，並建立時間序列資料的初始視覺化。

   在 Data Explorer 中，您應該能夠查看隨時間記錄的風速測量結果，確認從產生資料到本機儲存的整個管道都正常運作。

   如需詳細資訊，請參閱《》[中的在 Data Explorer 中查詢](https://docs.influxdata.com/influxdb/v2/query-data/execute-queries/data-explorer/)*InfluxData Documentation*。

部署資料發佈流程和資料保留流程後，您現在擁有將資料傳送至 AWS IoT SiteWise 雲端的完整系統，同時保留本機複本以立即存取和恢復能力。這種雙路徑方法可確保您獲得雲端型分析和儲存的優勢，同時保持邊緣的操作可見性。

# 設定 Grafana for SiteWise Edge
<a name="windows-grafana"></a>

 Grafana® 可讓您為工業資料建立本機即時監控儀表板。透過視覺化儲存在 InfluxDB® 中的資料，您可以為操作員提供設備效能、程序效率和潛在問題的即時洞見。在邊緣的這種可見性對於時間敏感的操作和在網路中斷期間維持持續性至關重要。

## 設定資料來源
<a name="windows-grafana-data-source-config"></a>

將 Grafana 連接到 InfluxDB 資料庫會為您的工業資料建立強大的視覺化層。此連線可啟用即時監控儀表板，讓運算子在沒有雲端相依性的情況下做出明智的決策。

1. 在瀏覽器中導覽至 [http://127.0.0.1:3000](http://127.0.0.1:3000)，在本機存取您的 Grafana 執行個體。如果需要啟用 TLS，您可以參考 *Grafana Labs 文件*中的[設定 Grafana HTTPS 以取得安全 Web 流量](https://grafana.com/docs/grafana/latest/setup-grafana/set-up-https/)。

1. 新增 InfluxDB 資料來源，指向 Node-RED 寫入資料的 InfluxDB 時間序列儲存貯體。例如 `WindFarmData`。此連線會在儲存的資料與視覺化平台之間建立連結。

1. 如需詳細說明，請參閱 *Grafana Labs 文件*中的[設定 InfluxDB 資料來源](https://grafana.com/docs/grafana/latest/datasources/influxdb/configure-influxdb-data-source/)。

### 為 SiteWise Edge 資料建立 Grafana 儀表板
<a name="windows-grafana-create-dashboard"></a>

建立儀表板是建置本機監控解決方案的最後一步。儀表板提供工業資料的視覺化呈現，讓您更輕鬆地一目了然地識別趨勢、異常和潛在問題。
+ 依照指南建立儀表板。如需詳細資訊，請參閱 *Grafana Labs 文件*中的[建置您的第一個儀表板](https://grafana.com/docs/grafana/latest/getting-started/build-first-dashboard/)。此範本假設您的儲存貯體已命名，`WindFarmData`且測量結果為 `TurbineData`。

  您也可以透過匯入提供的範例儀表板範本來使用快速入門指南，快速為 Node-RED 在上一節中產生的資料建立具有時間序列圖的儀表板。此範本提供一個起點，您可以自訂以滿足您的特定監控需求。

  ```
  {
    "__inputs": [
      {
        "name": "DS_WINDFARM-DEMO",
        "label": "windfarm-demo",
        "description": "",
        "type": "datasource",
        "pluginId": "influxdb",
        "pluginName": "InfluxDB"
      }
    ],
    "__elements": {},
    "__requires": [
      {
        "type": "grafana",
        "id": "grafana",
        "name": "Grafana",
        "version": "11.6.0-pre"
      },
      {
        "type": "datasource",
        "id": "influxdb",
        "name": "InfluxDB",
        "version": "1.0.0"
      },
      {
        "type": "panel",
        "id": "timeseries",
        "name": "Time series",
        "version": ""
      }
    ],
    "annotations": {
      "list": [
        {
          "builtIn": 1,
          "datasource": {
            "type": "grafana",
            "uid": "-- Grafana --"
          },
          "enable": true,
          "hide": true,
          "iconColor": "rgba(0, 211, 255, 1)",
          "name": "Annotations & Alerts",
          "type": "dashboard"
        }
      ]
    },
    "editable": true,
    "fiscalYearStartMonth": 0,
    "graphTooltip": 0,
    "id": null,
    "links": [],
    "panels": [
      {
        "datasource": {
          "type": "influxdb",
          "uid": "${DS_WINDFARM-DEMO}"
        },
        "fieldConfig": {
          "defaults": {
            "color": {
              "mode": "palette-classic"
            },
            "custom": {
              "axisBorderShow": false,
              "axisCenteredZero": false,
              "axisColorMode": "text",
              "axisLabel": "",
              "axisPlacement": "auto",
              "barAlignment": 0,
              "barWidthFactor": 0.6,
              "drawStyle": "line",
              "fillOpacity": 0,
              "gradientMode": "none",
              "hideFrom": {
                "legend": false,
                "tooltip": false,
                "viz": false
              },
              "insertNulls": false,
              "lineInterpolation": "linear",
              "lineWidth": 1,
              "pointSize": 5,
              "scaleDistribution": {
                "type": "linear"
              },
              "showPoints": "auto",
              "spanNulls": false,
              "stacking": {
                "group": "A",
                "mode": "none"
              },
              "thresholdsStyle": {
                "mode": "off"
              }
            },
            "mappings": [],
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "green"
                },
                {
                  "color": "red",
                  "value": 80
                }
              ]
            }
          },
          "overrides": []
        },
        "gridPos": {
          "h": 8,
          "w": 12,
          "x": 0,
          "y": 0
        },
        "id": 1,
        "options": {
          "legend": {
            "calcs": [],
            "displayMode": "list",
            "placement": "bottom",
            "showLegend": true
          },
          "tooltip": {
            "hideZeros": false,
            "mode": "single",
            "sort": "none"
          }
        },
        "pluginVersion": "11.6.0-pre",
        "targets": [
          {
            "datasource": {
              "type": "influxdb",
              "uid": "${DS_WINDFARM-DEMO}"
            },
            "query": "from(bucket: \"WindFarmData\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"TurbineData\")\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\n  |> filter(fn: (r) => r[\"name\"] == \"/Renton/WindFarm/Turbine/WindSpeed\")\n  |> filter(fn: (r) => r[\"quality\"] == \"GOOD\")\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n  |> yield(name: \"mean\")",
            "refId": "A"
          }
        ],
        "title": "Panel Title",
        "type": "timeseries"
      }
    ],
    "schemaVersion": 41,
    "tags": [],
    "templating": {
      "list": []
    },
    "time": {
      "from": "now-6h",
      "to": "now"
    },
    "timepicker": {},
    "timezone": "browser",
    "title": "demo dashboard",
    "uid": "fejc0t08o6d4wb",
    "version": 1,
    "weekStart": ""
  }
  ```