【 Cloud 】透過 Azure Event Hub 與 Azure Function 將 Azure Digital Twins 更新資訊顯示於 Time Series Insights - 使用 Azure CLI 與 Portal

【 Cloud 】透過 Azure Event Hub 與 Azure Function 將 Azure Digital Twins 更新資訊顯示於 Time Series Insights - 使用 Azure CLI 與 Portal
Photo by Kris Guico / Unsplash

內容

  • 學習目標
  • 前置準備作業
  • 流程
  • 建立與設定 Twin Hub
  • 設定 Azure Digital Twin 的 Endpoint 與 Event route
  • 建立與設定 TSI Hub
  • 建立讀取 Twin Hub 資訊與傳送資訊到 TSI Hub 的 Azure Functions
  • 設定身分識別
  • 建立與設定 Time Series Insights
  • 執行與驗證

學習目標

  • 如何使用 Azure CLI 與 Portal 並透過 Azure Event HubAzure FunctionAzure Digital Twins 更新資訊顯示資訊於 Time Series Insights

前置準備作業

流程

---2021-12-09---11.23.18

  • ① 建立並上傳 Device 的 JSON Model 的定義語言檔案 ( Digital Twin Definition Language - DTDL )。
  • ② 透過 Azure IoT Plug and Play ( PnP )Device 端程式隨機產生溫度數據後上傳到 Azure IoT Hub
  • Azure Function 接收 Azure IoT Hub 內建 Event Hub 裡的 Consumer Groups 的溫度數據後,將其數據傳送到 Azure Digital Twins
  • ④ 當 Azure Digital Twins 中的 Twin 有變化時傳送資訊到 Twin Hub
  • ⑤ 因 Azure Functions 有監聽 Twin Hub ,故此時也收到 Twin Hub 傳來的訊息並經過解析後,再將新的資訊傳送到 TSI Hub
  • ⑥ 同時 Time Series Insights 也監聽 TSI Hub,當 TSI Hub 接收到新數據時,會將數據顯示於 Time Series Insights 中 Dashboard。
  • ㊟ 本範例主要實作右邊虛線框中的內容。

建立與設定 Twin Event Hub

Step 1. 登入到 Microsoft Azure

  • 請在終端機輸入下方指令
  • 選擇所要使用的帳號

---2021-12-09---1.26.36-1

  • 登入成功

---2021-12-09---1.27.42-1

---2021-12-09---1.28.11-1


Step 2. 建立資源群組

  • 請在終端機輸入下方指令
    • 請將 <resource-group> 修改成唯一且可識別的名稱
    • 請將 <region> 修改成所位於資料中心的名稱,可透過 az account list-locations -o table 指令查詢可用的資料中心

---2021-12-09---2.53.26


Step 3. 建立 Azure Event Hub Namespace

  • 請在終端機輸入下方指令
    • 請將 <event-hub-namespace> 修改成唯一且可識別的名稱
    • 請將 <resource-group> 修改成 Step 2 所建立的資料群組名稱
    • 請將 <region> 修改成所位於資料中心的名稱

---2021-12-09---2.56.41


Step 4. 在 Event Hubs Namespace 中建立 Twin Hub

  • 請在終端機輸入下方指令
    • 請將 <twin-hub-name> 修改成 twin-hub
    • 請將 <resource-group> 修改成 Step 2 所建立的資源群組名稱
    • 請將 <event-hub-namespace> 修改成 Step 3 所建立的 Azure Event Hub Namespace

---2021-12-09---2.58.31


Step 5. 在所建立 Twin 的 Event Hub 中設定 Shared access policies

  • 請在終端機輸入下方指令
    • 請將 <twins-hub-auth-rule> 修改成唯一且可識別的名稱
    • 請將 <resource-group> 修改成 Step 2 所建立的資源群組名稱
    • 請將 <event-hub-namespace> 修改成 Step 3 所建立的 Azure Event Hub Namespace
    • 請將 <twin-hub-name> 修改成 twin-hub

---2021-12-09---3.01.10


Step 6. 取得 Twin Event Hub 的 Primary Connection String

  • 請在終端機輸入下方指令
    • 請將 <resource-group> 修改成 Step 2 所建立的資源群組名稱
    • 請將 <event-hub-namespace> 修改成 Step 3 所建立的 Azure Event Hub Namespace
    • 請將 <twin-hub-name> 修改成 twin-hub
    • 請將 <twins-hub-auth-rule> 修改成 Step 5 所建立的 Shared access policies 名稱

---2021-12-09---3.02.30

設定 Azure Digital Twin 的 Endpoint 與 Event route

Step 1. 在所建立的 Azure Digital Twin 中建立 Endpoint

  • 請在終端機輸入下方指令
    • 請將 <Azure-Digital-Twins-instance-name> 修改成所建立的 Azure Digital Twin 的名稱
    • 請將 <resource-group> 修改成 建立與設定 Twin Event Hub 段落中 Step 2 所建立的資源群組名稱
    • 請將 <event-hub-namespace> 修改成 建立與設定 Twin Event Hub 段落中 Step 3 所建立的 Azure Event Hub Namespace
    • 請將 <twin-hub-name> 修改成 twin-hub
    • 請將 <twins-hub-auth-rule> 修改成 建立與設定 Twin Event Hub 段落中 Step 5 所建立的 Shared access policies 名稱
    • 請將 <twin-hub-endpoint> 修改成 twin-hub-endpoint
    • 請將 <adt-resource-group> 修改成 Azure Digital Twin 所建立的資源群組名稱

---2021-12-09---3.10.03


Step 2. 在所建立的 Azure Digital Twin 中建立 Event route

  • 請在終端機輸入下方指令
    • 請將 <Azure-Digital-Twins-instance-name> 修改成所建立的 Azure Digital Twin 的名稱
    • 請將 <twin-hub-endpoint> 修改成 twin-hub-endpoint
    • 請將 <twin-hub-event-route> 修改成 twin-hub-event-route
    • 請將 <adt-resource-group> 修改成 Azure Digital Twin 所建立的資源群組名稱

---2021-12-09---3.15.05

建立與設定 TSI Event Hub

Step 1. 建立 TSI Hub

  • 請在終端機輸入下方指令
    • 請將 <tsi-hub-name> 修改成 tsi-hub
    • 請將 <resource-group> 修改成 建立與設定 Twin Event Hub 段落中 Step 2 所建立的資源群組名稱
    • 請將 <event-hub-namespace> 修改成 建立與設定 Twin Event Hub 段落中 Step 3 所建立的 Azure Event Hub Namespace

---2021-12-09---3.16.37


Step 2. 在所建立 TSI Event Hub 中設定 Shared access policies

  • 請在終端機輸入下方指令
    • 請將 <tsi-auth-rule> 修改成 tsi-hub-policy
    • 請將 <resource-group> 修改成 建立與設定 Twin Event Hub 段落中 Step 2 所建立的資源群組名稱
    • 請將 <event-hub-namespace> 修改成 建立與設定 Twin Event Hub 段落中 Step 3 所建立的 Azure Event Hub Namespace
    • 請將 <tsi-hub-name> 修改成 tsi-hub

---2021-12-09---3.17.47


Step 3. 取得 TSI Event Hub 的 Primary Connection String

  • 請在終端機輸入下方指令
    • 請將 <resource-group> 修改成 建立與設定 Twin Event Hub 段落中 Step 2 所建立的資源群組名稱
    • 請將 <event-hub-namespace> 修改成 建立與設定 Twin Event Hub 段落中 Step 3 所建立的 Azure Event Hub Namespace
    • 請將 <tsi-hub-name> 修改成 tsi-hub
    • 請將 <tsi-auth-rule> 修改成 tsi-hub-policy

---2021-12-09---3.18.45

建立讀取 Twin Hub 資訊與傳送資訊到 TSI Hub 的 Azure Functions

Step 1. 在上方搜尋框輸入 function 關鍵字並點選 Function App 的搜尋結果

---2021-11-23---1.29.58


Step 2. 點選 + Create

---2021-11-23---1.31.58


Step 3. 輸入相關資訊

  • Subscription 欄位選擇所要使用的訂閱。
  • Resource group 欄位輸入此 Function 所要歸屬於的群組。
  • Function App name 欄位輸入一個可識別的名稱
    • 本範例使用 twin-hub-to-tsi-hub
  • Publish 欄位請選擇 Code
  • Runtime stack 欄位請選擇 Node.js
  • Version 欄位請選擇 14 LTS
  • Region 欄位請選擇 SignalR 服務所要位於的資料中心。
  • 當輸入完成後點選 Review + create

---2021-11-23---1.33.09


Step 4. 建立服務

  • 確認資訊正確則點選 Create

---2021-12-09---9.14.34


Step 5. 點選 Go to resource

---2021-12-09---9.16.38


Step 6. 建立 Twin_EventHub_To_Tsi_EventHub

  • 點選左側的 Functions > 再點選上方的 + Create

---2021-12-09---9.18.17


  • 選擇 Azure Event Hub trigger

---2021-12-09---9.20.18


  • Template details 輸入相關資訊
    • New Function 欄位請輸入 Twin_EventHub_To_Tsi_EventHub
    • 事件中樞連線 欄位請點選 New
      • 點選 Event Hub
      • 事件中樞連線 請選擇 建立與設定 Twin Event Hub 段落所建立的 Azure Event Hub Namespace
      • 事件中樞連線 請選擇 twin-hub
      • 事件中樞連線 請選擇 twin-hub-policy
      • 當輸入完成後點選 OK
    • 事件中樞名稱 請輸入 twin-hub
    • 事件中樞取用者群組 請輸入 $Default
    • 當輸入完成後點選 Create

---2021-12-09---9.23.16

---2021-12-09---9.39.42

---2021-12-09---9.42.45


  • 設定 Twin_EventHub_To_Tsi_EventHub
    • ① 點選 Twin_EventHub_To_Tsi_EventHub
    • ② 點選左側的 Code + Test

---2021-12-09---9.46.04

---2021-12-09---9.51.53


  • 點選上方的選單選擇 index.js 再輸入下方程式後再點選上方的 Save 按鈕

---2021-12-09---9.53.40


Step 7. 設定 Config

  • 點選左側的 Configuration

---2021-12-09---10.13.12


  • 點選 + New application setting

---2021-12-09---10.14.56


  • 設定 TSI Event Hub 的名稱
    • Name 欄位請輸入 TSI_EVENTHUB_NAME
    • Value 欄位請輸入建立 tsi-hub
    • 當輸入完成後點選 OK

---2021-11-24---9.21.08

---2021-12-09---10.17.59


  • 再點選 + New application setting

---2021-11-24---9.19.01


  • 設定 TSI Event Hub 的連接字串
    • Name 欄位請輸入 TSI_EVENTHUB_CONNECTION_STRING
    • Value 欄位請輸入在 建立與設定 TSI Event Hub 段落 Step 3 時所取得 取得 TSI Event Hub 的 Primary Connection String
    • 當輸入完成後點選 OK

---2021-11-24---9.21.08

---2021-12-09---10.21.41


  • 點選 Save

---2021-12-09---10.22.56


  • 點選 Continue

---2021-12-09---10.23.47


Step 8. 安裝套件

  • 點選左側的 Advanced Tools > 再點選 Go →

---2021-12-09---9.58.28


  • 點選上方的 Debug console > CMD

---2021-11-24---9.34.11


  • 切換路徑到 Twin_EventHub_To_Tsi_EventHub 資料夾
    • 請輸入 cd site\wwwroot\Twin_EventHub_To_Tsi_EventHub

---2021-12-09---10.00.43


  • 初始化專案
    • 請輸入 npm init -y

---2021-12-09---10.02.51


  • 安裝 @azure/event-hubsdotenv 套件 ( 需花一段時間進行安裝 )
    • 請輸入 npm i @azure/event-hubs dotenv

---2021-12-09---10.07.48-1

設定身分識別

Step 1. 點選所建立的 Azure Function 左側的 identity

---2021-12-09---10.25.56


Step 2. 將 Status 設成 On > 再點選 Save

---2021-12-09---10.26.51


Step 3. 再點選 Yes

---2021-12-09---10.27.49


Step 4. 點選 Azure role assignments

---2021-12-09---10.29.01


Step 5. 點選 + Add role assignment (Preview)

---2021-12-09---10.33.16


Step 6. 填寫相關資訊

  • Scope 欄位請點選 Subscription
  • Subscription 欄位請點選所要使用的訂閱
  • Role 欄位請選擇 Azure Digital Twins Data Owner
  • 資料選取完成後再點選 Save

---2021-12-09---10.34.08

---2021-12-09---10.34.41


Step 7. 設定完成

---2021-12-09---10.35.42

建立與設定 Time Series Insights

Step 1. 建立 Time Series Insights

  • 在上方搜尋框輸入 Time Series Insights 關鍵字並點選 Time Series Insights environments 的搜尋結果

---2021-12-09---10.37.23


  • 點選 + Create

---2021-12-09---10.39.20


  • 輸入 Basic 相關資訊
    • Subscription 欄位選擇所要使用的訂閱
    • Resource group 欄位請輸入此服務所要歸屬於的群組
    • Environment name 欄位請輸入唯一且可識別的名稱
      • 本範例使用 adtTsi
    • Location 欄位請選擇此服務所要位於的資料中心
    • Property name 欄位請輸入 $dtId
    • Storage account name 欄位請輸入唯一且可識別的名稱
      • 本範例使用adttsiblob
    • 以上資訊輸入完成後點選 Next: Event Source >

---2021-12-09---10.41.09

---2021-12-09---10.41.25

---2021-12-09---10.46.22

---2021-12-09---10.46.36


  • 輸入 Event Source 相關資訊
    • Source type 欄位請選擇 Event Hub
    • Name 欄位請輸入唯一且可識別的名稱
      • 本範例使用 adt-tsi-event-hub
    • Subscription 欄位選擇所要使用的訂閱
    • Event Hub namespace 欄位請選擇 建立與設定 Twin Event Hub 段落所建立的 Azure Event Hub Namespace
    • Event Hub name 欄位請選擇 tsi-hub
    • Event Hub access policy name 欄位請選擇 tsi-hub-policy
    • Event Hub consumer group 欄位請選擇 $Default
    • 以上資訊輸入完成後點選 Review + Create

---2021-12-09---10.48.07

---2021-12-09---10.56.40


  • 確認資訊正確則點選 Review + Create

---2021-12-09---10.58.20


  • 點選 Go to resource

---2021-12-09---11.02.03


Step 2.開啟 TSI Explorer

  • 點選上方 TSI Explorer

---2021-12-09---11.03.28


  • 開啟完成

---2021-12-09---11.04.50

執行與驗證

Step 1. 執行 send.js

node send.js

---2021-12-09---3.40.51


Step 2. 查看 TSI

  • 點選所設定的 IoT Hub Device 名稱 > 再點選 temperature > 再點選 新增

---2021-12-09---3.42.58


  • 出現 Step 1 所上傳的數據

---2021-12-09---3.44.19

GitHub

List of blogs