【 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
-
示意圖
前置準備作業
程式與軟體
- Node.js
- Visual Studio Code
建立 Cosmos DB
Step 1. 登入到 Azure
- 網址
https://portal.azure.com
Step 2. 設定 Cosmos DB
- 點選左側的
Azure Cosmos DB
- 點選下方
Create Azure Cosmos DB account
-
建立
Azure Cosmos DB
帳號資訊-
Resource Group
欄位可選擇使用已存在的群組資源或新增群組資源-
新增群組資源畫面
-
-
Account Name
欄位輸入唯一識別值 -
API
欄位選擇Core(SQL)
-
點選下方
Review + create
-
點選下方
Create
-
建立過程畫面
-
執行完成畫面
-
建立 IoT Hub
Step 1. 選取 IoT Hub
服務
-
在上方搜尋框輸入
IoT Hub
並選取Services
中的IoT Hub
Step 2. 建立 IoT Hub
-
點選下方
Create IoT Hub
-
設定
IoT Hub
資訊Resource Group
欄位可選擇使用已存在的群組資源或新增群組資源Region
欄位選擇所要使用那一區域的IoT Hub
服務IoT Hub Name
欄位輸入唯一識別名稱,本範例使用cloud-gateway
-
點選
Next: Size and scale >>
-
點選
Pricing and scale tier
下拉選單來選擇需要的服務規格- 本範例使用
F1:Free tier
- 本範例使用
-
點選
Review + create
-
點選
Create
-
建立過程畫面
-
執行完成畫面
建立 IoT Devices
Step 1. 點選 Go to resource
Step 2. 點選 IoT devices
Step 3. 點選 + New
Step 4. 設定裝置名稱
-
Device ID
欄位輸入唯一識別名稱,本範例使用ds01
-
點選
Save
-
建立完成畫面
Step 5. 取得裝置的 Primary Connection String
-
點選裝置 ID
-
裝置連結的
Primary Connection String
建立 Azure Function
Step 1. 選取 Azure Function
服務
-
在上方搜尋框輸入
function app
並選取Services
中的Function App
Step 2. 建立 Function App
-
點選下方
Create Function App
-
建立相關資訊
App name
欄位輸入唯一識別名稱,本範例使用iot-hub-to-cosmos-db1
Resource Group
欄位可選擇使用已存在的群組資源或新增群組資源OS
欄位選擇Windows
Location
欄位選擇所要使用那一區域的Function App
服務Runtime Stack
欄位選擇Node.js
-
點選
Create
-
建立完成畫面
Step 3. 設定 Function App
-
點選剛才所建立的 Function App
-
點選
+ New function
-
點選
In-portal
-
點選
Continue
-
點選
More templates...
-
點選
Finish and view templates
-
在上方搜尋框搜尋
IoT Hub
-
點選
IoT Hub (Event Hub)
-
點選
Install
-
點選
Continue
-
輸入
Event Hub connection
-
點選右方的
New
-
點選
IoT Hub
再點選Select
-
點選
Create
-
-
設定完成畫面
Step 4. 設定 Trigger 與 Output
-
點選
Integrate
-
設定
Trigger
-
點選右上角
Advanced editor
-
在
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.cardinality 中方的 many 改成 one
-
點選
Save
請再三確認此步驟是否正確存檔完成
-
點選右上角的
Standard editor
-
-
設定
Output
-
點選右上角的
+ New Output
-
選擇
Azure Cosmos DB
再點選Select
-
點選
Install
-
修改設定資訊
-
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
-
點選
Save
-
設定完成畫面
-
-
Step 5. 撰寫 Function 程式
-
點選
IoTHub_EventHub1
-
將
index.js
程式碼 ( 紅色區域 ) 替換成下方的程式碼,再點選Save and run
-
執行中的畫面
透過機台端模擬程式傳送數據到 Azure IoT Hub
Step 1. 透過 Visual Studio Code 新增名為 device-to-azure-iot-hub
的專案並開啟此專案
Step 2. 開啟 Terminal
- 點選
Terminal
➙New Terminal
-
Terminal
出現於下方
Step 3. 初始化專案
-
在
Terminal
輸入下方指令npm init -y
Step 4. 安裝套件
-
在
Terminal
輸入下方指令npm i azure-iot-device azure-iot-device-mqtt dotenv
Step 5.
-
在專案根目錄建立
app.js
檔案,其程式碼如下
Step 6. 設定 .env
檔
-
在專案根目錄建立
.env
檔案,其內容如下connectionString=
等號後方請輸入
建立 IoT Devices
中Step 5
的Primary Connection String
Step 7. 執行與驗證
-
在 Visual Studio Code 的
Terminal
輸入下方指令node app.js
-
在
Cosmos DB
查看上傳紀錄- 點選
Azure Cosmos DB
➙SQL API
右邊的重新整理按鈕 ➙Items
➙ 點第一筆紀錄即可在右側看到所上傳的deviceId
、temperature
、humidity
- 點選