【 Cloud 】透過 Azure Event Hub 與 Azure Function 將 Azure Digital Twins 更新資訊顯示於 Time Series Insights - 使用 Azure CLI 與 Portal
內容
- 學習目標
- 前置準備作業
- 流程
- 建立與設定 Twin Hub
- 設定 Azure Digital Twin 的 Endpoint 與 Event route
- 建立與設定 TSI Hub
- 建立讀取 Twin Hub 資訊與傳送資訊到 TSI Hub 的 Azure Functions
- 設定身分識別
- 建立與設定 Time Series Insights
- 執行與驗證
學習目標
- 如何使用
Azure CLI 與 Portal
並透過Azure Event Hub
與Azure Function
將Azure Digital Twins
更新資訊顯示資訊於Time Series Insights
前置準備作業
- 已建立 Azure 帳號並能正常登入
- 已於電腦端安裝 Node.js
- 已於電腦端安裝 IDE,本範例使用 Visual Studio Code
- 已完成將
Azure IoT Plug and Play
裝置的量測數據透過Azure IoT Hub
與Azure Function ( Node.js )
傳送到Azure Digital Twins
流程
- ① 建立並上傳 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
- 請在終端機輸入下方指令
- 選擇所要使用的帳號
- 登入成功
Step 2. 建立資源群組
- 請在終端機輸入下方指令
- 請將
<resource-group>
修改成唯一且可識別的名稱 - 請將
<region>
修改成所位於資料中心的名稱,可透過az account list-locations -o table
指令查詢可用的資料中心
- 請將
Step 3. 建立 Azure Event Hub Namespace
- 請在終端機輸入下方指令
- 請將
<event-hub-namespace>
修改成唯一且可識別的名稱 - 請將
<resource-group>
修改成Step 2
所建立的資料群組名稱 - 請將
<region>
修改成所位於資料中心的名稱
- 請將
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
- 請將
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
- 請將
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
名稱
- 請將
設定 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 所建立的資源群組名稱
- 請將
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 所建立的資源群組名稱
- 請將
建立與設定 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
- 請將
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
- 請將
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
- 請將
建立讀取 Twin Hub 資訊與傳送資訊到 TSI Hub 的 Azure Functions
Step 1. 在上方搜尋框輸入 function
關鍵字並點選 Function App
的搜尋結果
Step 2. 點選 + Create
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
Step 4. 建立服務
- 確認資訊正確則點選
Create
Step 5. 點選 Go to resource
Step 6. 建立 Twin_EventHub_To_Tsi_EventHub
- 點選左側的
Functions
> 再點選上方的+ Create
- 選擇
Azure Event Hub trigger
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
- 設定
Twin_EventHub_To_Tsi_EventHub
- ① 點選
Twin_EventHub_To_Tsi_EventHub
- ② 點選左側的
Code + Test
- ① 點選
- 點選上方的選單選擇
index.js
再輸入下方程式後再點選上方的Save
按鈕
Step 7. 設定 Config
- 點選左側的
Configuration
- 點選
+ New application setting
- 設定 TSI Event Hub 的名稱
Name
欄位請輸入TSI_EVENTHUB_NAME
Value
欄位請輸入建立tsi-hub
- 當輸入完成後點選
OK
- 再點選
+ New application setting
- 設定 TSI Event Hub 的連接字串
Name
欄位請輸入TSI_EVENTHUB_CONNECTION_STRING
Value
欄位請輸入在建立與設定 TSI Event Hub
段落Step 3
時所取得取得 TSI Event Hub 的 Primary Connection String
- 當輸入完成後點選
OK
- 點選
Save
- 點選
Continue
Step 8. 安裝套件
- 點選左側的
Advanced Tools
> 再點選Go →
- 點選上方的
Debug console
>CMD
- 切換路徑到
Twin_EventHub_To_Tsi_EventHub
資料夾- 請輸入
cd site\wwwroot\Twin_EventHub_To_Tsi_EventHub
- 請輸入
- 初始化專案
- 請輸入
npm init -y
- 請輸入
- 安裝
@azure/event-hubs
與dotenv
套件 ( 需花一段時間進行安裝 )- 請輸入
npm i @azure/event-hubs dotenv
- 請輸入
設定身分識別
Step 1. 點選所建立的 Azure Function
左側的 identity
Step 2. 將 Status
設成 On
> 再點選 Save
Step 3. 再點選 Yes
Step 4. 點選 Azure role assignments
Step 5. 點選 + Add role assignment (Preview)
Step 6. 填寫相關資訊
Scope
欄位請點選Subscription
Subscription
欄位請點選所要使用的訂閱Role
欄位請選擇Azure Digital Twins Data Owner
- 資料選取完成後再點選
Save
Step 7. 設定完成
建立與設定 Time Series Insights
Step 1. 建立 Time Series Insights
- 在上方搜尋框輸入
Time Series Insights
關鍵字並點選Time Series Insights environments
的搜尋結果
- 點選
+ Create
- 輸入
Basic
相關資訊Subscription
欄位選擇所要使用的訂閱Resource group
欄位請輸入此服務所要歸屬於的群組Environment name
欄位請輸入唯一且可識別的名稱- 本範例使用
adtTsi
- 本範例使用
Location
欄位請選擇此服務所要位於的資料中心Property name
欄位請輸入$dtId
Storage account name
欄位請輸入唯一且可識別的名稱- 本範例使用
adttsiblob
- 本範例使用
- 以上資訊輸入完成後點選
Next: Event Source >
- 輸入
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
- 確認資訊正確則點選
Review + Create
- 點選
Go to resource
Step 2.開啟 TSI Explorer
- 點選上方
TSI Explorer
- 開啟完成
執行與驗證
Step 1. 執行 send.js
- ① 開啟終端機再切換工作路徑到剛才所建立
send.js
程式的地方 - ② 執行下方指令
node send.js
Step 2. 查看 TSI
- 點選所設定的 IoT Hub Device 名稱 > 再點選
temperature
> 再點選新增
- 出現
Step 1
所上傳的數據