Reakce na události ioT Hubu pomocí Event Gridu k aktivaci akcí

Azure IoT Hub se může integrovat s Azure Event Gridem, abyste mohli posílat oznámení o událostech jiným službám a aktivovat podřízené procesy. Nakonfigurujte obchodní aplikace na naslouchání událostem IoT Hubu, abyste mohli reagovat na kritické události a současně zajistili spolehlivost, škálovatelnost a zabezpečení. Například sestavíte aplikaci, která aktualizuje databázi, vytvoří pracovní lístek a doručí e-mailové oznámení pokaždé, když se do vašeho centra IoT (neboli IoT Hubu) zaregistruje nové zařízení IoT.

Azure Event Grid je plně spravovaná služba směrování událostí, která používá model publikování a odběru. Event Grid nabízí integrovanou podporu služeb Azure, jako jsou Azure Functions nebo Azure Logic Apps, a dokáže posílat upozornění na události do služeb mimo Azure s využitím webhooků. Úplný seznam obslužných rutin událostí, které Event Grid podporuje, najdete v úvodu do služby Azure Event Grid.

Pokud se chcete podívat na video popisující tuto integraci, podívejte se na integraci služby Azure IoT Hub se službou Azure Event Grid.

Diagram that shows Azure Event Grid architecture.

Regionální dostupnost

Integrace Event Grid je dostupná pro centra IoT umístěná v oblastech, kde je služba Event Grid podporovaná. Nejnovější seznam oblastí najdete v tématu Produkty dostupné v jednotlivých oblastech.

Typy událostí

IoT Hub publikuje následující typy událostí:

Typ události Popis
Microsoft.Devices.DeviceCreated Publikuje se při zaregistrování zařízení do centra IoT (IoT Hub).
Microsoft.Devices.DeviceDeleted Publikuje se při odstranění zařízení ze centra IoT (IoT Hub).
Microsoft.Devices.DeviceConnected Publikuje se při připojení zařízení k centru IoT (IoT Hub).
Microsoft.Devices.DeviceDisconnected Publikuje se při odpojení zařízení od centra IoT (IoT Hub).
Microsoft.Devices.DeviceTelemetry Publikuje se při odeslání zprávy s telemetrií zařízení do centra IoT (IoT Hub).

Ke konfiguraci událostí, které se mají publikovat z každého centra IoT, použijte Azure Portal nebo Azure CLI. Vyzkoušejte například kurz Odesílání e-mailových oznámení o událostech Azure IoT Hubu pomocí Logic Apps.

Schéma událostí

Události IoT Hubu obsahují všechny informace, které potřebujete k reakci na změny v životním cyklu zařízení. Událost IoT Hubu můžete identifikovat tak, že zkontrolujete, jestli vlastnost eventType začíná microsoft.Devices. Další informace o použití vlastností událostí Event Gridu najdete ve schématu událostí Event Gridu.

Schéma připojené k zařízení

Následující příklad ukazuje schéma události připojené k zařízení:

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

Schéma telemetrie zařízení

Zprávy telemetrie zařízení musí být v platném formátu JSON s typem contentType nastaveným na application/json a contentEncoding nastaveným na UTF-8 ve vlastnostech systému zpráv. Obě tyto vlastnosti nerozlišují malá a velká písmena. Pokud kódování obsahu není nastavené, IoT Hub zapíše zprávy ve formátu kódování base 64.

Před publikováním do Event Gridu můžete rozšířit události telemetrie zařízení tak, že jako Event Grid vyberete koncový bod. Další informace najdete v tématu rozšiřování zpráv.

Následující příklad ukazuje schéma události telemetrie zařízení:

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

Schéma vytvořené zařízením

Následující příklad ukazuje schéma události vytvořené zařízením:

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

Upozorňující

Data dvojčat přidružená k události vytvoření zařízení jsou výchozí konfigurací a neměli byste se spoléhat na skutečné authenticationType a další vlastnosti zařízení v nově vytvořeném zařízení. U authenticationType nově vytvořených zařízení a dalších vlastností zařízení použijte rozhraní API správce registru poskytnuté v sadách SDK Azure IoT.

Podrobný popis jednotlivých vlastností najdete ve schématu událostí služby Azure Event Grid pro IoT Hub.

Události filtru

Event Grid umožňuje filtrovat typy událostí, předměty a datový obsah. Při vytváření odběru služby Event Grid se můžete rozhodnout přihlásit k odběru vybraných událostí IoT.

  • Typ události: Seznam typů událostí ioT Hubu najdete v tématu Typy událostí.
  • Předmět: Pro události ioT Hubu je předmětem název zařízení. Předmět má formát devices/{deviceId}. Předměty můžete filtrovat na základě shody Začíná na (předpona) a Končí ( přípona). Filtr používá AND operátor, takže události s předmětem, který odpovídá předponě i příponě, se doručí odběrateli.
  • Datový obsah: Obsah dat je naplněn službou IoT Hub pomocí formátu zprávy. Na základě obsahu zprávy telemetrie můžete zvolit, které události se doručí. Příklady najdete v rozšířených filtrech. Pro filtrování textu zprávy telemetrie je nutné nastavit contentType na application/json a contentEncoding na UTF-8 ve vlastnostech systému zpráv. Obě tyto vlastnosti nerozlišují malá a velká písmena.

V případě událostí telemetrie zařízení vytvoří Služba IoT Hub výchozí trasu zpráv s názvem RouteToEventGrid na základě předplatného. Pokud chcete filtrovat zprávy před odesláním telemetrických dat, aktualizujte směrovací dotaz.

Omezení událostí stavu připojení zařízení

Události připojené k zařízení a odpojené zařízení jsou k dispozici pro zařízení, která se připojují pomocí protokolu MQTT nebo AMQP, nebo pomocí některého z těchto protokolů přes WebSockets. Požadavky provedené pouze pomocí PROTOKOLU HTTPS neaktivují oznámení o stavu připojení zařízení.

Informace o monitorování stavu zařízení pomocí Event Gridu najdete v tématu Monitorování stavu připojení zařízení.

Interval stavu připojení zařízení

IoT Hub se pokouší hlásit každou událost změny stavu připojení zařízení, ale některé se můžou zmeškat. IoT Hub minimálně hlásí události změny stavu připojení, ke kterým dochází 60 sekund od sebe. Toto chování může vést k výsledkům, jako je několik událostí připojení zařízení hlášených bez událostí odpojení zařízení.

Tipy pro využívání událostí

Aplikace, které zpracovávají události IoT Hubu, by měly fungovat v souladu s následujícími doporučenými postupy:

  • Je možné nakonfigurovat více odběrů na směrování událostí na stejnou obslužnou rutinu událostí, takže nepředpokládejte, že události pocházejí z konkrétního zdroje. Vždy zkontrolujte téma zprávy, abyste zajistili, že pochází z očekávaného centra IoT (IoT Hub).
  • Nepředpokládejte, že všechny přijímané události představují typ, který očekáváte. Před zpracováním zprávy vždy zkontrolujte vlastnost eventType.
  • Zprávy se můžou doručovat v odlišném pořadí nebo se zpožděním. Pole etag vám umožní zjistit, jestli jsou vaše informace o objektech aktuální pro události vytvořené zařízením nebo odstraněné zařízení.

Další kroky