【 Cloud 】將 Azure IoT Plug and Play 裝置的量測數據透過 Azure IoT Hub 與 Azure Function ( Node.js ) 傳送到 Azure Digital Twins

【 Cloud 】將 Azure IoT Plug and Play 裝置的量測數據透過 Azure IoT Hub 與 Azure Function ( Node.js ) 傳送到 Azure Digital Twins
Photo by Loïc Mermilliod / Unsplash

內容

  • 學習目標
  • 前置準備作業
  • 流程
  • 上傳 DTDL 到 Azure Digital Twins 並建立 Twins
  • 建立 Azure IoT Hub
  • 建立 Azure Functions
  • 設定身分識別
  • 撰寫傳送 Node.js 程式
  • 執行與驗證

學習目標

  • 如何將 Azure IoT Plug and Play 裝置的量測數據透過 Azure IoT HubAzure Function ( Node.js ) 傳送到 Azure Digital Twins

前置準備作業

流程

---2021-12-01---3.54.37

  • 建立並上傳 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

---2021-12-01---6.25.44

Step 3. 上傳 DTDL

  • 點選 Upload a Model 按鈕

---2021-12-01---6.29.32

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

---2021-12-01---6.31.46

  • 上傳完成

---2021-12-01---6.34.02

Step 4. 建立 Twins

  • 點選 ... > 再點選 Create a Twin

---2021-12-01---6.36.25

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

---2021-12-01---6.38.24

  • 建立完成

---2021-12-01---6.40.10

Step 5. 初始化

  • 點選 device001

---2021-12-01---8.08.16

  • 新增初始化數字 168

---2021-12-01---8.09.37

---2021-12-01---8.10.58

  • 點選儲存按鈕

---2021-12-01---8.12.05

---2021-12-01---8.35.09

  • 初始化成功

---2021-12-01---8.13.55

建立 Azure IoT Hub

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

---2021-11-25---3.20.00

Step 2. 點選 + Create

---2021-11-25---3.21.56

Step 3. 輸入相關資訊

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

---2021-11-25---3.23.09

Step 4. 建立服務

  • 確認資訊正確則點選 Create

---2021-11-25---3.26.14

Step 5. 點選 Go to resource

---2021-11-25---3.31.36

Step 6. 取得 IoT Hub Connection String

  • 點選左側 Shared access policies > iothubowner

---2021-11-25---3.44.25

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

---2021-11-25---3.45.36

Step 7. 取得 IoT Hub 中的 Device Connection String

  • 點選 Devices > + Add Device

---2021-11-25---3.57.08

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

---2021-11-25---3.58.17

  • 點選 device001

---2021-11-25---4.00.49

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

---2021-11-25---4.02.16

建立 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 欄位輸入一個可識別的名稱。
  • Publish 欄位請選擇 Code
  • Runtime stack 欄位請選擇 Node.js
  • Version 欄位請選擇 14 LTS
  • Region 欄位請選擇服務所要位於的資料中心。
  • 當輸入完成後點選 Review + create

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

Step 4. 建立服務

  • 確認資訊正確則點選 Create

---2021-12-01---6.57.11

Step 5. 點選 Go to resource

---2021-12-01---6.59.18

Step 6. 建立 IoTHub_EventHub_To_Adt

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

---2021-12-01---7.00.58

  • 選擇 IoT Hub (Event Hub)

---2021-12-01---7.03.02

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

---2021-12-01---7.05.26

---2021-12-01---7.06.58

---2021-12-01---7.07.59

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

---2021-12-01---7.09.55

---2021-12-01---7.11.22

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

---2021-12-01---7.16.11

---2021-12-01---7.24.34

Step 7. 安裝套件

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

---2021-12-01---7.29.13

  • 點選上方的 Debug console > CMD

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

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

---2021-12-01---7.31.35

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

---2021-12-01---7.33.04

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

---2021-12-01---7.36.21

設定身分識別

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

---2021-12-01---7.40.32

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

---2021-12-01---7.43.10

Step 3. 再點選 Yes

---2021-12-01---7.44.36

Step 4. 點選 Azure role assignments

---2021-12-01---7.46.12

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

---2021-12-01---7.49.31

Step 6. 填寫相關資訊

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

---2021-12-01---7.51.14

---2021-12-01---7.51.56

Step 7. 設定完成

---2021-12-01---7.52.40

撰寫傳送 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
    

---2021-12-01---8.37.43

Step 2. 透過 Azure Digital Twins Explorer 進行驗證

  • 點選 Azure Digital Twins Explorer 右上方的 Run Query

---2021-12-01---8.39.39

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

---2021-12-01---8.38.34--

Reference

GitHub

List of blogs