使用事件方格觸發動作來回應 IoT 中樞 事件

Azure IoT 中樞與 Azure 事件格線整合,讓您可以將事件通知傳送到其他服務,並觸發下游處理程序。 將您的商務應用程式設定為接聽 IoT 中樞事件,讓您能夠以可靠、可擴充且安全的方式回應重大事件。 例如,建置一個應用程式,此應用程式可更新資料庫、建立工作票證,並在每次有新的 IoT 裝置向 IoT 中樞註冊時,傳遞電子郵件通知。

Azure 事件方格 是使用發行-訂閱模型的完整受控事件路由服務。 事件方格內建支援 Azure FunctionsAzure Logic Apps 等 Azure 服務,並可使用 Webhook 將事件警示傳遞給非 Azure 服務。 如需 Event Grid 支援之事件處理程式的完整清單,請參閱 Azure 事件方格 簡介。

若要觀看討論此整合的影片,請參閱 Azure IoT 中樞 與 Azure 事件方格 整合。

Diagram that shows Azure Event Grid architecture.

區域可用性

位於支援「事件格線」之區域中的 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 中樞 事件。 如需如何使用 Event Grid 事件屬性的詳細資訊,請參閱 Event Grid 事件架構

裝置連線結構描述

下列範例說明裝置連線事件的結構描述:

[{  
  "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 中樞 以基底 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 (prefix) 和 End With (後綴) 相符項目來篩選主旨。 篩選會使用 AND 運算子,讓主旨同時符合前置詞和尾碼的事件會傳遞給訂閱者。
  • 數據內容:使用訊息格式 IoT 中樞 填入數據內容。 您可以選擇根據遙測訊息的內容傳遞哪些事件。 如需範例,請參閱 進階篩選。 若要篩選遙測訊息本文,您必須將 contentType 設定為 application/json,並將訊息系統屬性中的 contentEncoding 設定為 UTF-8。 這兩個屬性都不區分大小寫。

針對裝置遙測事件,IoT 中樞 會根據訂用帳戶建立名為 RouteToEventGrid 的預設訊息路由。 若要在傳送遙測數據之前篩選訊息,請更新 路由查詢

裝置連線狀態事件的限制

使用 MQTT 或 AMQP 通訊協定或透過 WebSocket 使用其中一種通訊協定進行連線的裝置可以使用裝置連線和裝置中斷連線的事件。 只有使用 HTTPS 提出的要求不會觸發裝置連線狀態通知。

如需使用事件方格監視裝置狀態的資訊,請參閱 監視裝置連線狀態

裝置連線狀態間隔

IoT 中樞 嘗試報告每個裝置連線狀態變更事件,但有些可能遺漏。 至少,IoT 中樞 報告彼此相隔 60 秒的連接狀態變更事件。 此行為可能會導致結果,例如回報的多個裝置連線事件,且它們之間沒有裝置中斷連線事件。

取用事件的秘訣

處理 IoT 中樞事件的應用程式應遵循下列建議做法:

  • 您可以設定多個訂用帳戶,將事件路由傳送至相同的事件處理常式,因此請不要假設事件來自特定來源。 請務必檢查訊息主題,以確保其來自您預期的 IoT 中樞。
  • 請不要假設您收到的所有事件都是您預期的類型。 處理訊息之前,請務必檢查 eventType。
  • 訊息可能會不按順序抵達或在延遲之後抵達。 使用 etag 欄位瞭解有關物件的資訊是否為裝置建立或裝置刪除事件的最新資訊。

下一步