使用事件方格來觸發動作以回應 IoT 中樞事件
Azure IoT 中樞與 Azure 事件格線整合,讓您可以將事件通知傳送到其他服務,並觸發下游處理程序。 將您的商務應用程式設定為接聽 IoT 中樞事件,讓您能夠以可靠、可擴充且安全的方式回應重大事件。 例如,建置一個應用程式,此應用程式可更新資料庫、建立工作票證,並在每次有新的 IoT 裝置向 IoT 中樞註冊時,傳遞電子郵件通知。
Azure 事件方格是一個完全受控的事件路由服務,其使用發佈-訂閱模型。 事件方格內建支援 Azure Functions 和 Azure Logic Apps 等 Azure 服務,並可使用 Webhook 將事件警示傳遞給非 Azure 服務。 如需事件方格所支援的事件處理常式完整清單,請參閱 Azure 事件方格簡介。
若要觀看討論此整合的影片,請參閱 Azure IoT 中樞與 Azure 事件方格的整合。
位於支援「事件格線」之區域中的 IoT 中樞都可使用「事件格線」整合。 如需最新的區域清單,請參閱依區域提供的產品。
「IoT 中樞」會發佈下列事件類型:
事件類型 | 描述 |
---|---|
Microsoft.Devices.DeviceCreated | 裝置向 IoT 中樞註冊時發佈。 |
Microsoft.Devices.DeviceDeleted | 從 IoT 中樞刪除裝置時發佈。 |
Microsoft.Devices.DeviceConnected | 裝置連線到 IoT 中樞時發行。 |
Microsoft.Devices.DeviceDisconnected | 裝置從 IoT 中樞中斷連線時發佈。 |
Microsoft.Devices.DeviceTelemetry | 裝置遙測訊息傳送至 IoT 中樞時發佈 |
請使用 Azure 入口網站或 Azure CLI 來設定要從每個 IoT 中樞發佈哪些事件。 例如,請試試使用 Logic Apps 來傳送 Azure IoT 中樞事件的相關電子郵件通知教學課程。
「IoT 中樞」事件包含了回應裝置生命週期變更時所需的所有資訊。 您可以透過檢查 eventType 屬性的開頭是否為 Microsoft.Devices 來識別「IoT 中樞」事件。 如需有關如何使用「事件格線」事件屬性的詳細資訊,請參閱事件格線事件結構描述。
下列範例說明裝置連線事件的結構描述:
[{
"id": "f6bbf8f4-d365-520d-a878-17bf7238abd8",
"topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
"subject": "devices/LogicAppTestDevice",
"eventType": "Microsoft.Devices.DeviceConnected",
"eventTime": "2018-06-02T19:17:44.4383997Z",
"data": {
"deviceConnectionStateEventInfo": {
"sequenceNumber":
"000000000000000001D4132452F67CE200000002000000000000000000000001"
},
"hubName": "egtesthub1",
"deviceId": "LogicAppTestDevice",
"moduleId" : "DeviceModuleID",
},
"dataVersion": "1",
"metadataVersion": "1"
}]
裝置遙測訊息必須是有效的 JSON 格式,且 contentType 設定為 application/json,而 contentEncoding 在訊息系統屬性中設定為 UTF-8。 這兩個屬性都不區分大小寫。 如果未設定內容編碼,則 IoT 中樞將會以 Base 64 編碼格式寫入訊息。
您可以選取端點作為事件方格,在將裝置遙測事件發佈至事件方格之前先行擴充。 如需詳細資訊,請參閱訊息擴充。
下列範例顯示裝置遙測事件的結構描述:
[{
"id": "9af86784-8d40-fe2g-8b2a-bab65e106785",
"topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
"subject": "devices/LogicAppTestDevice",
"eventType": "Microsoft.Devices.DeviceTelemetry",
"eventTime": "2019-01-07T20:58:30.48Z",
"data": {
"body": {
"Weather": {
"Temperature": 900
},
"Location": "USA"
},
"properties": {
"Status": "Active"
},
"systemProperties": {
"iothub-content-type": "application/json",
"iothub-content-encoding": "utf-8",
"iothub-connection-device-id": "d1",
"iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
"iothub-connection-auth-generation-id": "123455432199234570",
"iothub-enqueuedtime": "2019-01-07T20:58:30.48Z",
"iothub-message-source": "Telemetry"
}
},
"dataVersion": "",
"metadataVersion": "1"
}]
以下範例說明已建立裝置事件的結構描述:
[{
"id": "56afc886-767b-d359-d59e-0da7877166b2",
"topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
"subject": "devices/LogicAppTestDevice",
"eventType": "Microsoft.Devices.DeviceCreated",
"eventTime": "2018-01-02T19:17:44.4383997Z",
"data": {
"twin": {
"deviceId": "LogicAppTestDevice",
"etag": "AAAAAAAAAAE=",
"deviceEtag":"null",
"status": "enabled",
"statusUpdateTime": "0001-01-01T00:00:00",
"connectionState": "Disconnected",
"lastActivityTime": "0001-01-01T00:00:00",
"cloudToDeviceMessageCount": 0,
"authenticationType": "sas",
"x509Thumbprint": {
"primaryThumbprint": null,
"secondaryThumbprint": null
},
"version": 2,
"properties": {
"desired": {
"$metadata": {
"$lastUpdated": "2018-01-02T19:17:44.4383997Z"
},
"$version": 1
},
"reported": {
"$metadata": {
"$lastUpdated": "2018-01-02T19:17:44.4383997Z"
},
"$version": 1
}
}
},
"hubName": "egtesthub1",
"deviceId": "LogicAppTestDevice"
},
"dataVersion": "1",
"metadataVersion": "1"
}]
警告
與裝置建立事件相關聯的「對應項資料」是預設設定,「不應」依賴新建立裝置中的實際 authenticationType
和其他裝置屬性。 針對新建立裝置中的 authenticationType
和其他裝置屬性,請使用 Azure IoT SDK 中提供的註冊管理員 API。
如需每個屬性的詳細描述,請參閱適用於 IoT 中樞的 Azure 事件格線事件結構描述。
事件方格可讓您篩選事件種類、主體和資料內容。 建立事件方格訂用帳戶時,您可以選擇訂閱所選取的 IoT 事件。
- 事件類型:如需 IoT 中樞事件類型的清單,請參閱事件類型。
- 主體:針對 IoT 中樞事件,主體為裝置名稱。 主體採用
devices/{deviceId}
格式。 您可以根據 Begins With (前置詞) 和 Ends With (後置詞) 相符項目來篩選主體。 篩選會使用AND
運算子,讓主旨同時符合前置詞和尾碼的事件會傳遞給訂閱者。 - 資料內容:IoT 中樞會使用訊息格式來填入資料內容。 您可以選擇根據遙測訊息的內容傳遞哪些事件。 如需範例,請參閱進階篩選。 若要篩選遙測訊息本文,您必須在訊息系統屬性中將 contentType 設定為 application/json,並將 contentEncoding 設定為 UTF-8。 這兩個屬性都不區分大小寫。
針對裝置遙測事件,IoT 中樞將根據訂用帳戶,建立稱為 RouteToEventGrid 的預設訊息路由。 若要在傳送遙測資料之前篩選訊息,請更新路由查詢。
裝置連線和裝置中斷連線的事件適用於使用 MQTT 或 AMQP 通訊協定連線的裝置,或透過 WebSocket 使用這其中一種通訊協定連線的裝置。 僅使用 HTTPS 提出的要求不會觸發裝置線上狀態通知。
如需使用事件方格監視裝置狀態的相關資訊,請參閱監視裝置連線狀態。
IoT 中樞嘗試報告每個裝置連線狀態變更事件,但有些可能遺漏。 IoT 中樞至少會報告彼此相隔 60 秒的連線狀態變更事件。 此行為可能導致如下的結果:報告多個裝置連線事件,但它們之間沒有裝置中斷連線事件。
處理 IoT 中樞事件的應用程式應遵循下列建議做法:
- 您可以設定多個訂用帳戶,將事件路由傳送至相同的事件處理常式,因此請不要假設事件來自特定來源。 請務必檢查訊息主題,以確保其來自您預期的 IoT 中樞。
- 請不要假設您收到的所有事件都是您預期的類型。 處理訊息之前,請務必檢查 eventType。
- 訊息可能會不按順序抵達或在延遲之後抵達。 使用 eTag,針對裝置建立或裝置刪除事件來了解您物件的相關資訊是否為最新狀態。