【 Node.js 】透過 Azure IoT Hub 接收 Client 端傳送的數據再經由 Azure Function 存入 Azure Cosmos DB

【 Node.js 】透過 Azure IoT Hub 接收 Client 端傳送的數據再經由 Azure Function 存入 Azure Cosmos DB

內容

  • 學習目標
  • 前置準備作業
  • 程式與軟體
  • 建立 Cosmos DB
  • 建立 IoT Hub
  • 建立 IoT Devices
  • 建立 Azure Function
  • 透過機台端模擬程式傳送數據到 Azure IoT Hub

學習目標

  • 如何將機台端的數據傳送到 Azure IoT Hub,再透過 Azure Function 將資料存放到 Azure Cosmos DB

  • 示意圖

    -----2019-09-03---4.00.08


前置準備作業


程式與軟體


建立 Cosmos DB

Step 1. 登入到 Azure

  • 網址 https://portal.azure.com

-----2019-09-03---10.04.35


Step 2. 設定 Cosmos DB

  • 點選左側的 Azure Cosmos DB

-----2019-09-03---10.04.35---

  • 點選下方 Create Azure Cosmos DB account

-----2019-09-03---10.09.19

  • 建立 Azure Cosmos DB 帳號資訊

    • Resource Group 欄位可選擇使用已存在的群組資源或新增群組資源

      • 新增群組資源畫面

        -----2019-09-03---10.15.01

    • Account Name 欄位輸入唯一識別值

    • API 欄位選擇 Core(SQL)

    -----2019-09-03---10.11.14

    -----2019-09-03---10.16.47

    • 點選下方 Review + create

      -----2019-09-03---10.16.47---

    • 點選下方 Create

      -----2019-09-03---10.19.46

    • 建立過程畫面

      -----2019-09-03---10.20.43

    • 執行完成畫面

      -----2019-09-03---10.27.59


建立 IoT Hub

Step 1. 選取 IoT Hub 服務

  • 在上方搜尋框輸入 IoT Hub 並選取 Services 中的 IoT Hub

    -----2019-09-03---10.04.35----2

    -----2019-09-03---10.31.42


Step 2. 建立 IoT Hub

  • 點選下方 Create IoT Hub

    -----2019-09-03---10.34.31

  • 設定 IoT Hub 資訊

    • Resource Group 欄位可選擇使用已存在的群組資源或新增群組資源
    • Region 欄位選擇所要使用那一區域的 IoT Hub 服務
    • IoT Hub Name 欄位輸入唯一識別名稱,本範例使用 cloud-gateway

    -----2019-09-03---10.35.29

    -----2019-09-03---10.39.16

  • 點選 Next: Size and scale >>

    -----2019-09-03---10.39.16---

  • 點選 Pricing and scale tier 下拉選單來選擇需要的服務規格

    • 本範例使用 F1:Free tier

    -----2019-09-03---10.44.23---

    -----2019-09-03---10.48.33

    -----2019-09-03---10.50.10

  • 點選 Review + create

    -----2019-09-03---10.50.10---

  • 點選 Create

    -----2019-09-03---10.52.20

  • 建立過程畫面

    -----2019-09-03---10.53.45

  • 執行完成畫面

    -----2019-09-03---10.55.13


建立 IoT Devices

Step 1. 點選 Go to resource

-----2019-09-03---10.55.13---


Step 2. 點選 IoT devices

-----2019-09-03---10.57.39---


Step 3. 點選 + New

-----2019-09-03---11.00.33


Step 4. 設定裝置名稱

  • Device ID 欄位輸入唯一識別名稱,本範例使用 ds01

    -----2019-09-03---11.01.48

    -----2019-09-03---11.03.48

  • 點選 Save

    -----2019-09-03---11.03.48---

  • 建立完成畫面

    -----2019-09-03---11.05.29

Step 5. 取得裝置的 Primary Connection String

  • 點選裝置 ID

    -----2019-09-03---11.05.29---

  • 裝置連結的 Primary Connection String

    -----2019-09-03---11.07.56


建立 Azure Function

Step 1. 選取 Azure Function 服務

  • 在上方搜尋框輸入 function app 並選取 Services 中的 Function App

    -----2019-09-03---11.10.06

    -----2019-09-03---11.12.03


Step 2. 建立 Function App

  • 點選下方 Create Function App

    -----2019-09-03---11.14.40

  • 建立相關資訊

    • App name 欄位輸入唯一識別名稱,本範例使用 iot-hub-to-cosmos-db1
    • Resource Group 欄位可選擇使用已存在的群組資源或新增群組資源
    • OS 欄位選擇 Windows
    • Location 欄位選擇所要使用那一區域的 Function App 服務
    • Runtime Stack 欄位選擇 Node.js

    -----2019-09-03---11.15.37

    -----2019-09-03---11.20.01

  • 點選 Create

    -----2019-09-03---11.20.01---

  • 建立完成畫面

    -----2019-09-03---11.23.47


Step 3. 設定 Function App

  • 點選剛才所建立的 Function App

    -----2019-09-03---11.23.47---

  • 點選 + New function

    -----2019-09-03---11.26.52

  • 點選 In-portal

    -----2019-09-03---11.29.00

  • 點選 Continue

    -----2019-09-03---11.30.54

  • 點選 More templates...

    -----2019-09-03---11.32.14

  • 點選 Finish and view templates

    -----2019-09-03---11.33.36

  • 在上方搜尋框搜尋 IoT Hub

    -----2019-09-03---11.35.03

    -----2019-09-03---11.36.11

  • 點選 IoT Hub (Event Hub)

    -----2019-09-03---11.36.11---

  • 點選 Install

    -----2019-09-03---11.37.58

  • 點選 Continue

    -----2019-09-03---1.02.24

  • 輸入 Event Hub connection

    • 點選右方的 New

      -----2019-09-03---1.03.35

    • 點選 IoT Hub 再點選 Select

      -----2019-09-03---1.06.14

    • 點選 Create

      -----2019-09-03---1.09.00

  • 設定完成畫面

    -----2019-09-03---1.10.19


Step 4. 設定 Trigger 與 Output

  • 點選 Integrate

    -----2019-09-03---1.10.19---

  • 設定 Trigger

    • 點選右上角 Advanced editor

      -----2019-09-03---1.14.24

    • consumerGroup 加入下方資訊

      , "dataType": "string" 

      以避免下方錯誤發生
      [Error] Executed 'Functions.IoTHub_EventHub1' (Failed, Id=8600190e-2cf5-4b35-a534-8427329af1b9)
      Binding parameters to complex objects (such as 'Object') uses Json.NET serialization. 1. Bind the parameter type as 'string' instead of 'Object' to get the raw values and avoid JSON deserialization, or 2. Change the queue payload to be valid json. The JSON parser failed: Unexpected character encountered while parsing value: T. Path '', line 0, position 0.

      -----2019-09-03---1.15.40

      -----2019-09-03---1.17.56---

      cardinality 中方的 many 改成 one 

      -----2019-09-03---1.20.09

      -----2019-09-03---1.21.12

    • 點選 Save

      -----2019-09-03---1.21.58

      請再三確認此步驟是否正確存檔完成

    • 點選右上角的 Standard editor

      -----2019-09-03---1.24.24

  • 設定 Output

    • 點選右上角的 + New Output

      -----2019-09-03---1.27.15

    • 選擇 Azure Cosmos DB 再點選 Select

      -----2019-09-03---1.31.42

    • 點選 Install

      -----2019-09-03---1.32.55

    • 修改設定資訊

      • Database name 欄位取一個唯一識別的名稱,本範使用 iot

      • Collection Name 欄位取一個唯一識別的名稱,本範使用 messages

      • If true, creates the Azure Cosmos DB database and collection 欄位請勾選,亦即是如果 Cosmos DB 中未有名為 iot 的 Database 與未有名為 messages 的 Collection 則自動建立

      • Azure Cosmos DB account connection 欄位請點選 new,再選擇所建立的 Database Account

        -----2019-09-03---1.47.34---

        -----2019-09-03---1.52.16

      • 點選 Save

        -----2019-09-03---1.52.16---

      • 設定完成畫面

        -----2019-09-03---1.54.35


Step 5. 撰寫 Function 程式

  • 點選 IoTHub_EventHub1

    -----2019-09-03---1.54.35-1

  • index.js 程式碼 ( 紅色區域 ) 替換成下方的程式碼,再點選 Save and run

    -----2019-09-03---2.03.06

    -----2019-09-03---3.44.40

  • 執行中的畫面

    -----2019-09-03---3.46.03


透過機台端模擬程式傳送數據到 Azure IoT Hub

Step 1. 透過 Visual Studio Code 新增名為 device-to-azure-iot-hub 的專案並開啟此專案

-----2019-09-03---2.12.09


Step 2. 開啟 Terminal

  • 點選 TerminalNew Terminal

-----2019-09-03---2.13.04

  • Terminal 出現於下方

    -----2019-09-03---2.13.10


Step 3. 初始化專案

  • Terminal 輸入下方指令

    npm init -y 

    -----2019-09-03---2.15.27


Step 4. 安裝套件

  • Terminal 輸入下方指令

    npm i azure-iot-device azure-iot-device-mqtt dotenv 

    -----2019-09-03---2.17.16


Step 5.

  • 在專案根目錄建立 app.js 檔案,其程式碼如下

    -----2019-09-03---2.20.34


Step 6. 設定 .env

  • 在專案根目錄建立 .env 檔案,其內容如下

    connectionString= 

    等號後方請輸入 建立 IoT DevicesStep 5Primary Connection String


Step 7. 執行與驗證

  • 在 Visual Studio Code 的 Terminal 輸入下方指令

    node app.js 

    -----2019-09-03---2.27.06

  • Cosmos DB 查看上傳紀錄

    • 點選 Azure Cosmos DBSQL API 右邊的重新整理按鈕 ➙ Items ➙ 點第一筆紀錄即可在右側看到所上傳的 deviceIdtemperaturehumidity

    -----2019-09-03---2.28.47


GitHub
List of blogs