Reagowanie na zdarzenia usługi IoT Hub przy użyciu usługi Event Grid w celu wyzwalania akcji

Usługa Azure IoT Hub jest zintegrowana z usługą Azure Event Grid, co umożliwia wysyłanie powiadomień o zdarzeniach do innych usług i wyzwalanie dalszych procesów. Skonfiguruj aplikacje biznesowe do nasłuchiwania zdarzeń usługi IoT Hub, aby móc reagować na zdarzenia o krytycznym znaczeniu w niezawodny, skalowalny i bezpieczny sposób. Możesz na przykład opracować aplikację, która zaktualizuje bazę danych, utworzy bilet pracy i dostarczy wiadomość e-mail z powiadomieniem zawsze, gdy w centrum IoT zostanie zarejestrowane nowe urządzenie IoT.

Azure Event Grid to w pełni zarządzana usługa routingu zdarzeń, która korzysta z modelu publikowania-subskrybowania. Usługa Event Grid ma wbudowaną obsługę usług platformy Azure, takich jak Azure Functions i Azure Logic Apps, a także może dostarczać alerty dotyczące zdarzeń do usług spoza platformy Azure przy użyciu elementów webhook. Aby uzyskać pełną listę programów obsługi zdarzeń obsługiwanych przez usługę Event Grid, zobacz Wprowadzenie do usługi Azure Event Grid.

Aby obejrzeć film wideo omawiający tę integrację, zobacz Integracja usługi Azure IoT Hub z usługą Azure Event Grid.

Diagram that shows Azure Event Grid architecture.

Dostępność regionalna

Integracja z usługą Event Grid jest dostępna dla centrów IoT znajdujących się w regionach, w których usługa Event Grid jest obsługiwana. Aby uzyskać najnowszą listę regionów, zobacz Dostępność produktów według regionów.

Typy zdarzeń

Usługa IoT Hub publikuje następujące typy zdarzeń:

Typ zdarzenia opis
Microsoft.Devices.DeviceCreated Publikowane w przypadku zarejestrowania urządzenia w centrum IoT.
Microsoft.Devices.DeviceDeleted Publikowane w przypadku usunięcia urządzenia z centrum IoT.
Microsoft.Devices.DeviceConnected Publikowane w przypadku połączenia urządzenia z centrum IoT.
Microsoft.Devices.DeviceDisconnected Publikowane w przypadku rozłączenia urządzenia z centrum IoT.
Microsoft.Devices.DeviceTelemetry Publikowane w przypadku wysłania komunikatu telemetrii urządzenia do centrum IoT.

Użyj witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure, aby skonfigurować zdarzenia do opublikowania z każdego centrum IoT. Na przykład wypróbuj samouczek Wysyłanie powiadomień e-mail dotyczących zdarzeń usługi Azure IoT Hub przy użyciu usługi Logic Apps.

Schemat zdarzeń

Zdarzenia usługi IoT Hub zawierają wszystkie informacje potrzebne do reagowania na zmiany w cyklu życia urządzenia. Zdarzenie usługi IoT Hub można zidentyfikować, sprawdzając, czy właściwość eventType rozpoczyna się od microsoft.Devices. Aby uzyskać więcej informacji na temat używania właściwości zdarzeń usługi Event Grid, zobacz schemat zdarzeń usługi Event Grid.

Schemat połączony z urządzeniem

W poniższym przykładzie przedstawiono schemat zdarzenia połączonego urządzenia:

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

Schemat telemetrii urządzenia

Komunikaty telemetryczne urządzenia muszą być w prawidłowym formacie JSON z wartością contentType ustawioną na wartość application/json i contentEncoding ustawioną na wartość UTF-8 we właściwościach systemu komunikatów. Obie te właściwości są niewrażliwe na wielkość liter. Jeśli kodowanie zawartości nie jest ustawione, usługa IoT Hub zapisuje komunikaty w formacie zakodowanym w formacie base 64.

Zdarzenia telemetrii urządzenia można wzbogacić przed ich opublikowaniem w usłudze Event Grid, wybierając punkt końcowy jako usługę Event Grid. Aby uzyskać więcej informacji, zobacz Wzbogacanie komunikatów.

W poniższym przykładzie przedstawiono schemat zdarzenia telemetrii urządzenia:

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

Schemat utworzony przez urządzenie

W poniższym przykładzie pokazano schemat zdarzenia utworzonego przez urządzenie:

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

Ostrzeżenie

Dane bliźniaczej reprezentacji skojarzone ze zdarzeniem tworzenia urządzenia są konfiguracją domyślną i nie powinny być oparte na rzeczywistych authenticationType i innych właściwościach urządzenia w nowo utworzonym urządzeniu. W przypadku authenticationType i innych właściwości urządzenia w nowo utworzonym urządzeniu użyj interfejsu API menedżera rejestracji udostępnionego w zestawach SDK usługi Azure IoT.

Aby uzyskać szczegółowy opis każdej właściwości, zobacz Schemat zdarzeń usługi Azure Event Grid dla usługi IoT Hub.

Filtrowanie zdarzeń

Usługa Event Grid umożliwia filtrowanie typów zdarzeń, podmiotów i zawartości danych. Podczas tworzenia subskrypcji usługi Event Grid możesz wybrać subskrypcję wybranych zdarzeń IoT.

  • Typ zdarzenia: Aby uzyskać listę typów zdarzeń usługi IoT Hub, zobacz Typy zdarzeń.
  • Temat: W przypadku zdarzeń usługi IoT Hub temat jest nazwą urządzenia. Temat przyjmuje format devices/{deviceId}. Można filtrować tematy na podstawie dopasowań Zaczyna się od (prefiks) i Kończy się na (sufiks). Filtr używa AND operatora, więc zdarzenia z tematem zgodnym zarówno z prefiksem, jak i sufiksem są dostarczane do subskrybenta.
  • Zawartość danych: zawartość danych jest wypełniana przez usługę IoT Hub przy użyciu formatu komunikatu. Możesz wybrać zdarzenia dostarczane na podstawie zawartości komunikatu telemetrii. Aby zapoznać się z przykładami, zobacz zaawansowane filtrowanie. Aby filtrować treść komunikatu telemetrii, należy ustawić właściwość contentType na wartość application/json i contentEncoding na wartość UTF-8 we właściwościach systemu komunikatów. Obie te właściwości są niewrażliwe na wielkość liter.

W przypadku zdarzeń telemetrii urządzenia usługa IoT Hub utworzy domyślną trasę komunikatu o nazwie RouteToEventGrid na podstawie subskrypcji. Aby filtrować komunikaty przed wysłaniem danych telemetrycznych, zaktualizuj zapytanie routingu.

Ograniczenia dotyczące zdarzeń stanu połączenia urządzenia

Zdarzenia połączone z urządzeniem i rozłączone urządzenie są dostępne dla urządzeń łączących się przy użyciu protokołu MQTT lub AMQP albo przy użyciu jednego z tych protokołów za pośrednictwem protokołu WebSocket. Żądania wysyłane tylko za pomocą protokołu HTTPS nie będą wyzwalać powiadomień o stanie połączenia urządzenia.

Aby uzyskać informacje na temat monitorowania stanu urządzenia za pomocą usługi Event Grid, zobacz Monitorowanie stanu połączenia urządzenia.

Interwał stanu połączenia urządzenia

Usługa IoT Hub próbuje zgłosić zdarzenie zmiany stanu połączenia urządzenia, ale niektóre z nich mogą zostać pominięte. Co najmniej usługa IoT Hub zgłasza zdarzenia zmiany stanu połączenia, które występują 60 sekund od siebie. Takie zachowanie może prowadzić do wyników, takich jak wiele zdarzeń połączenia urządzenia zgłoszonych bez zdarzeń rozłączania urządzenia między nimi.

Porady dotyczące korzystania ze zdarzeń

Aplikacje obsługujące zdarzenia usługi IoT Hub powinny być zgodne z następującymi sugerowanymi rozwiązaniami:

  • Można skonfigurować wiele subskrypcji kierujących zdarzenia do tego samego procesu obsługi zdarzeń, a więc nie należy zakładać, że zdarzenia pochodzą z określonego źródła. Zawsze należy sprawdzić temat komunikatu, aby potwierdzić, że pochodzi on z oczekiwanego centrum IoT.
  • Nie zakładaj, że wszystkie otrzymywane zdarzenia należą do oczekiwanego typu. Zawsze należy sprawdzić właściwość eventType przed przetworzeniem komunikatu.
  • Komunikaty mogą przychodzić w niewłaściwej kolejności lub z opóźnieniem. Użyj pola etag, aby dowiedzieć się, czy informacje o obiektach są aktualne dla zdarzeń utworzonych lub usuniętych przez urządzenie.

Następne kroki