Reagieren auf IoT Hub-Ereignisse mithilfe von Event Grid zum Auslösen von Aktionen

Azure IoT Hub ist in Azure Event Grid integriert, sodass Sie Ereignisbenachrichtigungen an andere Dienste senden und nachfolgende Prozesse auslösen können. Konfigurieren Sie Ihre Geschäftsanwendungen so, dass sie auf IoT Hub-Ereignisse lauschen, damit Sie auf zuverlässige, skalierbare und sichere Weise auf kritische Ereignisse reagieren können. Erstellen Sie beispielsweise eine Anwendung, die bei jeder Registrierung eines neuen IoT-Geräts bei Ihrem IoT-Hub eine Datenbank aktualisiert, einen Akkordzettel erstellt und eine E-Mail-Benachrichtigung generiert.

Azure Event Grid ist ein vollständig verwalteter Ereignisroutingdienst, der ein Veröffentlichen-Abonnieren-Modell verwendet. Event Grid verfügt über integrierte Unterstützung für Azure-Dienste wie Azure Functions und Azure Logic Apps und kann mithilfe von Webhooks Ereigniswarnungen an Nicht-Azure-Dienste übermitteln. Eine vollständige Liste der Ereignishandler, die Event Grid unterstützt, finden Sie unter Einführung in Azure Event Grid.

Ein Video, in dem diese Integration erläutert wird, finden Sie unter Azure IoT Hub-Integration mit Azure Event Grid.

Diagram that shows Azure Event Grid architecture.

Regionale Verfügbarkeit

Die Event Grid-Integration ist für IoT-Hubs verfügbar, die sich in den Regionen befinden, in denen Event Grid unterstützt wird. Die neueste Liste der Regionen finden Sie unter Verfügbare Produkte nach Region.

Ereignistypen

IoT Hub veröffentlicht die folgenden Ereignistypen:

Ereignistyp Beschreibung
Microsoft.Devices.DeviceCreated Wird ausgelöst, wenn ein Gerät bei einem IoT Hub registriert wird.
Microsoft.Devices.DeviceDeleted Wird ausgelöst, wenn ein Gerät aus einem IoT Hub gelöscht wird.
Microsoft.Devices.DeviceConnected Wird ausgelöst, wenn ein Gerät mit einem IoT Hub verbunden wird.
Microsoft.Devices.DeviceDisconnected Wird ausgelöst, wenn ein Gerät von einem IoT Hub getrennt wird.
Microsoft.Devices.DeviceTelemetry Wird ausgelöst, wenn eine Gerätetelemetrienachricht an eine IoT Hub-Instanz gesendet wird.

Konfigurieren Sie entweder mit dem Azure-Portal oder der Azure CLI, welche Ereignisse von jedem IoT Hub veröffentlicht werden sollen. Ein Beispiel finden Sie in dem Tutorial Senden von E-Mail-Benachrichtigungen zu Azure IoT Hub-Ereignissen mit Logik-Apps.

Ereignisschema

IoT Hub-Ereignisse enthalten alle Informationen, die Sie für die Reaktion auf Änderungen in Ihrem Gerätelebenszyklus benötigen. Um ein IoT Hub-Ereignis zu identifizieren, überprüfen Sie, ob die Eigenschaft eventType mit Microsoft.Devices beginnt. Weitere Informationen zur Verwendung von Event Grid-Ereigniseigenschaften finden Sie unter Azure Event Grid-Ereignisschema.

Schema für „Gerät verbunden“

Das folgende Beispiel zeigt das Schema eines Ereignisses „Gerät verbunden“:

[{  
  "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"
}]

Gerätetelemetrieschema

Gerätetelemetrienachrichten müssen in einem gültigen JSON-Format vorliegen, wobei contentType in den Systemeigenschaften der Nachrichten auf application/json und contentEncoding auf UTF-8 festgelegt sein müssen. Bei beiden Eigenschaften wird die Groß-/Kleinschreibung nicht beachtet. Wenn die Inhaltskodierung nicht festgelegt ist, schreibt IoT Hub die Nachrichten im Base64-kodierten Format.

Sie können Geräte-Telemetrie-Ereignisse anreichern, bevor sie im Event Grid veröffentlicht werden, indem Sie den Endpunkt als Event Grid auswählen. Weitere Informationen finden Sie unter Nachrichtenanreicherungen bei Gerät-zu-Cloud-IoT Hub-Nachrichten.

Das folgende Beispiel zeigt das Schema eines Gerätetelemetrieereignisses:

[{  
  "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"
}]

Vom Gerät erstelltes Schema

Das folgende Beispiel zeigt das Schema eines von einem Gerät erstellten Ereignisses:

[{
  "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"
}]

Warnung

Die einem Geräteerstellungsereignis zugeordneten Zwillingsdaten sind eine Standardkonfiguration und sollten nicht für den tatsächlichen authenticationType und andere Geräteeigenschaften in einem neu erstellten Gerät verwendet werden. Verwenden Sie für authenticationType und andere Geräteeigenschaften auf einem neu erstellten Gerät die in Azure IoT SDKs bereitgestellte Registrierungs-Manager-API.

Eine ausführliche Beschreibung der einzelnen Eigenschaften finden Sie unter Azure Event Grid-Ereignisschema für IoT Hub.

Filtern von Ereignissen

Event Grid ermöglicht das Filtern nach Ereignistypen, Betreff und Dateninhalt. Beim Erstellen des Event Grid-Abonnements können Sie wählen, dass Sie ausgewählte IoT-Ereignisse abonnieren möchten.

  • Ereignistyp: Eine Liste der IoT Hub-Ereignistypen finden Sie unter Ereignistypen.
  • Betreff: Für IoT Hub-Ereignisse ist der Betreff der Gerätename. Für den Betreff wird das Format devices/{deviceId} verwendet. Sie können Betreffe basierend auf Übereinstimmungen für Beginnt mit (Präfix) und Endet mit (Suffix) filtern. Der Filter verwendet einen AND-Operator, sodass Ereignisse mit einem Betreff, der sowohl mit dem Präfix als auch mit dem Suffix übereinstimmt, an den Abonnenten übermittelt werden.
  • Dateninhalt: Der Dateninhalt wird mithilfe des Nachrichtenformats durch IoT Hub aufgefüllt. Sie können auswählen, welche Ereignisse auf der Grundlage von Inhalten der Telemetrienachricht übermittelt werden sollen. Beispiele finden Sie unter Erweiterte Filterung. Zum Filtern des Telemetrienachrichtentexts müssen Sie contentType in den Nachrichten-Systemeigenschaften auf application/json und contentEncoding auf UTF-8 festlegen. Bei beiden Eigenschaften wird die Groß-/Kleinschreibung nicht beachtet.

Bei Telemetrieereignissen für Geräte erstellt IoT Hub die Standardnachrichtenroute namens RouteToEventGrid basierend auf dem Abonnement. Wenn Sie Nachrichten vor dem Senden von Telemetriedaten filtern möchten, können Sie Ihre Routingabfrage aktualisieren.

Einschränkungen für Ereignisse beim Geräteverbindungsstatus

Die Ereignisse „Gerät verbunden“ und „Gerät getrennt“ sind für Geräte verfügbar, die sich entweder über das MQTT- oder AMQP-Protokoll oder über eines dieser Protokolle über WebSockets verbinden. Anforderungen, die nur mit HTTPS gesendet werden, lösen keine Benachrichtigungen zum Geräteverbindungsstatus aus.

Informationen zum Überwachen des Gerätestatus mit Dem Ereignisraster finden Sie unter Überwachen des Geräteverbindungsstatus.

Intervall für den Verbindungsstatus des Geräts

IoT Hub versucht, jede Änderung des Verbindungsstatus eines Geräts zu melden, aber einige Ereignisse können dabei übersehen werden. IoT Hub meldet mindestens alle Veränderungen des Verbindungsstatus, die in einem Abstand von 60 Sekunden zueinander auftreten. Dieses Verhalten kann z. B. dazu führen, dass mehrere Verbindungsereignisse gemeldet werden, ohne dass dazwischen eine Verbindungstrennung des Geräts festgestellt wird.

Tipps zum Nutzen von Ereignissen

Anwendungen, die IoT Hub-Ereignisse behandeln, sollten diesen empfohlenen Methoden entsprechen:

  • Mehrere Abonnements können zum Weiterleiten von Ereignissen an denselben Ereignishandler konfiguriert werden; darum dürfen Sie nicht davon ausgehen, dass Ereignisse aus einer bestimmten Quelle stammen. Überprüfen Sie immer das Nachrichtenthema, um sicherzustellen, dass es von einem IoT Hub stammt, den Sie erwarten.
  • Gehen Sie nicht davon aus, dass alle Ereignisse, die Sie erhalten, den Typen entsprechen, die Sie erwarten. Überprüfen Sie vor der Verarbeitung der Nachricht immer den eventType.
  • Nachrichten können in falscher Reihenfolge oder nach einer Verzögerung eingehen. Über das Feld „ETag“ können Sie erfahren, ob Ihre Informationen zu Objekten für Ereignisse vom Typ „device-created“ (Gerät erstellt) oder „device-deleted“ (Gerät gelöscht) auf dem neuesten Stand sind.

Nächste Schritte