【 Cloud 】將 Azure IoT Plug and Play 裝置的量測數據透過 Azure IoT Hub 與 Azure Function ( Node.js ) 傳送到 Azure Digital Twins
內容
- 學習目標
- 前置準備作業
- 流程
- 上傳 DTDL 到 Azure Digital Twins 並建立 Twins
- 建立 Azure IoT Hub
- 建立 Azure Functions
- 設定身分識別
- 撰寫傳送 Node.js 程式
- 執行與驗證
學習目標
- 如何將
Azure IoT Plug and Play裝置的量測數據透過Azure IoT Hub與Azure Function ( Node.js )傳送到Azure Digital Twins
前置準備作業
- 已建立 Azure 帳號並能正常登入與使用
- 已於完成建立與設定
Azure Digital Twins、Azure Active Directory ( Azure AD ) - 已於電腦端安裝 IDE,本範例使用 Visual Studio Code
- 已於電腦端安裝 Node.js
流程

- 建立並上傳 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
上傳 DTDL 到 Azure Digital Twins 並建立 Twins
Step 1. 在本地端電腦建立 device.json 檔案並填入下方 JSON 資料
Step 2. 開啟 Azure Digital Twins Explorer
- 到所建立
Azure Digital Twins服務的Overview頁面並點選上方的Azure Digital Twins Explorer

Step 3. 上傳 DTDL
- 點選
Upload a Model按鈕

- 選擇
Step 1所建立的device.json檔案並點選打開

- 上傳完成

Step 4. 建立 Twins
- 點選
...> 再點選Create a Twin

- 在
New Twin name欄位輸入device001> 再點選Save

- 建立完成

Step 5. 初始化
- 點選
device001

- 新增初始化數字
168


- 點選儲存按鈕


- 初始化成功

建立 Azure IoT Hub
Step 1. 在上方搜尋框輸入 iot hub 關鍵字並點選 IoT Hub 的搜尋結果

Step 2. 點選 + Create

Step 3. 輸入相關資訊
Subscription欄位選擇所要使用的訂閱。Resource group欄位輸入此 IoT Hub 所要歸屬於的群組。IoT Hub Name欄位輸入一個可識別的名稱。Region欄位擇此 IoT Hub 要建置於哪個資料中心。- 當輸入完成後點選
Review + create

Step 4. 建立服務
- 確認資訊正確則點選
Create

Step 5. 點選 Go to resource

Step 6. 取得 IoT Hub Connection String
- 點選左側
Shared access policies>iothubowner

- 點選右側
Primary connection string旁的複製按鈕

Step 7. 取得 IoT Hub 中的 Device Connection String
- 點選
Devices>+ Add Device

- 輸入相關資訊
Device ID欄位請輸入device001- 當輸入完成後點選
Save

- 點選
device001

- 取得
Device Connection String- 點選
Primary Connection String右側的複製按鈕
- 點選

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

Step 2. 點選 + Create

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

Step 4. 建立服務
- 確認資訊正確則點選
Create

Step 5. 點選 Go to resource

Step 6. 建立 IoTHub_EventHub_To_Adt
- 點選左側的
Functions> 再點選上方的+ Create

- 選擇
IoT Hub (Event Hub)

Template details輸入相關資訊New Function欄位請輸入IoTHub_EventHub_To_Adt事件中樞連線欄位請點選New> 點選IoT Hub>事件中樞連線請選擇建立 Azure IoT Hub段落所建立的 IoT Hub,當輸入完成後點選OK- 當輸入完成後點選
Create



- 設定
IoTHub_EventHub_To_Adt- ① 點選
IoTHub_EventHub_To_Adt - ② 點選左側的
Code + Test
- ① 點選


- 點選上方的選單選擇
index.js再輸入下方程式後再點選上方的Save按鈕- ㊟ 請修改
index.js程式中的第 27 行中的ADT-Host-Name改成所立Azure Digital Twins的Host name
- ㊟ 請修改


Step 7. 安裝套件
- 點選左側的
Advanced Tools> 再點選Go →

- 點選上方的
Debug console>CMD

- 切換路徑到
IoTHub_EventHub_To_Adt資料夾- 請輸入
cd site\wwwroot\IoTHub_EventHub_To_Adt
- 請輸入

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

- 安裝
@azure/identity與axios套件 ( 需花一段時間進行安裝 )- 請輸入
npm i @azure/identity axios
- 請輸入

設定身分識別
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欄位請點選SubscriptionSubscription欄位請點選所要使用的訂閱Role欄位請選擇Azure Digital Twins Data Owner- 資料選取完成後再點選
Save


Step 7. 設定完成

撰寫傳送 Node.js 程式
Step 1. 初始化專案
- 在終端機輸入下方指令
npm init -y
Step 2. 安裝套件
- 在終端機輸入下方指令
npm i dotenv azure-iot-device-mqtt azure-iot-device
Step 3. 撰寫程式
- 建立一個名為
send.js的程式,其程式如下 :
Step 4. 於設定檔新增資訊
- 在剛才所建的
.env設定檔中新增下方資訊 :- 請將
=右側填入建立 Azure IoT Hub段落中Step 7所取得的Device Connection String
IOT_HUB_DEVICE_CONNECTION_STRING= - 請將
執行與驗證
Step 1. 執行 send.js
- ① 開啟終端機再切換工作路徑到剛才所建立
send.js程式的地方 - ② 執行下方指令
node send.js

Step 2. 透過 Azure Digital Twins Explorer 進行驗證
- 點選
Azure Digital Twins Explorer右上方的Run Query

- 查詢結果
Temperature的數值已從168變為Step 1所上傳的數值13
