Reagera på IoT Hub-händelser med hjälp av Event Grid för att utlösa åtgärder

Du kan integrera Azure IoT Hub med Azure Event Grid så att du kan skicka händelseaviseringar till andra tjänster och aktivera underordnade processer. Konfigurera dina företagsprogram så att de lyssnar efter IoT Hub-händelser. Då kan du reagera på kritiska händelser på ett tillförlitligt, skalbart och säkert sätt. Du kan till exempel skapa ett program som uppdaterar en databas, skapar ett arbetsärende och levererar en e-postavisering varje gång en ny IoT-enhet registreras i din IoT-hubb.

Azure Event Grid är en fullständigt hanterad händelseroutningstjänst som använder en publiceringsprenumereringsmodell. Event Grid har inbyggt stöd för Azure-tjänster som Azure Functions och Azure Logic Apps, och du kan skicka händelseaviseringar till tjänster utanför Azure med hjälp av webhooks. En fullständig lista över de händelsehanterare som Event Grid stöder finns i En introduktion till Azure Event Grid.

Om du vill titta på en video som diskuterar den här integreringen kan du läsa Azure IoT Hub-integrering med Azure Event Grid.

Diagram that shows Azure Event Grid architecture.

Regional tillgänglighet

Event Grid-integreringen är tillgänglig för IoT-hubbar som finns i de regioner där Event Grid stöds. Den senaste listan över regioner finns i Produkter tillgängliga per region.

Händelsetyper

IoT Hub publicerar följande händelsetyper:

Händelsetyp beskrivning
Microsoft.Devices.DeviceCreated Publiceras när en enhet registreras i en IoT-hubb.
Microsoft.Devices.DeviceDeleted Publiceras när en enhet tas bort från en IoT-hubb.
Microsoft.Devices.DeviceConnected Publiceras när en enhet är ansluten till en IoT-hubb.
Microsoft.Devices.DeviceDisconnected Publiceras när en enhet kopplas från en IoT-hubb.
Microsoft.Devices.DeviceTelemetry Publiceras när ett meddelande för enhetstelemetri skickas till en IoT-hubb

Använd antingen Azure-portalen eller Azure CLI för att konfigurera vilka händelser som ska publiceras från varje IoT-hubb. Prova till exempel självstudien Skicka e-postaviseringar om Azure IoT Hub-händelser med hjälp av Logic Apps.

Händelseschema

IoT Hub-händelser innehåller all information du behöver för att svara på ändringar i enhetens livscykel. Du kan identifiera en IoT Hub-händelse genom att kontrollera att egenskapen eventType börjar med Microsoft.Devices. Mer information om hur du använder Event Grid-händelseegenskaper finns i Event Grid-händelseschemat.

Enhetsanslutet schema

I följande exempel visas schemat för en enhetsansluten händelse:

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

Schema för enhetstelemetri

Enhetens telemetrimeddelanden måste vara i ett giltigt JSON-format med contentType inställt på application/json och contentEncoding inställt på UTF-8 i egenskaperna för meddelandesystemet. Båda dessa egenskaper är skiftlägesokänsliga. Om innehållskodningen inte har angetts skriver IoT Hub meddelandena i bas 64-kodat format.

Du kan utöka enhetstelemetrihändelser innan de publiceras till Event Grid genom att välja slutpunkten som Event Grid. Mer information finns i meddelandeberikningar.

I följande exempel visas schemat för en enhetstelemetrihändelse:

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

Schema som skapats av enheten

I följande exempel visas schemat för en händelse som skapats av en enhet:

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

Varning

Tvillingdata som är associerade med en händelse för enhetsskapande är en standardkonfiguration och bör inte användas för faktiska authenticationType och andra enhetsegenskaper i en nyskapade enhet. För authenticationType och andra enhetsegenskaper i en nyskapad enhet använder du registerhanterarens API som anges i Azure IoT SDK:er.

En detaljerad beskrivning av varje egenskap finns i Händelseschema för Azure Event Grid för IoT Hub.

Filtrera händelser

Event Grid möjliggör filtrering av händelsetyper, ämnen och datainnehåll. När du skapar Event Grid-prenumerationen kan du välja att prenumerera på valda IoT-händelser.

  • Händelsetyp: En lista över IoT Hub-händelsetyper finns i händelsetyper.
  • Ämne: För IoT Hub-händelser är ämnet enhetsnamnet. Ämnet har formatet devices/{deviceId}. Du kan filtrera ämnen baserat på matchningar för Begins With (prefix) och Ends With (suffix). Filtret använder en AND operator, så händelser med ett ämne som matchar både prefixet och suffixet levereras till prenumeranten.
  • Datainnehåll: Datainnehållet fylls i av IoT Hub med hjälp av meddelandeformatet. Du kan välja vilka händelser som levereras baserat på innehållet i telemetrimeddelandet. Exempel finns i avancerad filtrering. För filtrering på telemetrimeddelandetexten måste du ange contentType till application/json och contentEncoding till UTF-8 i egenskaperna för meddelandesystemet. Båda dessa egenskaper är skiftlägesokänsliga.

För enhetstelemetrihändelser skapar IoT Hub standardmeddelandevägen RouteToEventGrid baserat på prenumerationen. Om du vill filtrera meddelanden innan telemetridata skickas uppdaterar du routningsfrågan.

Begränsningar för enhetsanslutningstillståndshändelser

Enhetsanslutna och enhetskopplade händelser är tillgängliga för enheter som ansluter med antingen MQTT- eller AMQP-protokollet eller med något av dessa protokoll via WebSockets. Begäranden som görs endast med HTTPS utlöser inte meddelanden om enhetsanslutningstillstånd.

Information om övervakning av enhetsstatus med Event Grid finns i Övervaka enhetens anslutningsstatus.

Intervall för enhetsanslutningstillstånd

IoT Hub försöker rapportera varje ändringshändelse för enhetsanslutningstillstånd, men vissa kan missas. IoT Hub rapporterar åtminstone ändringshändelser för anslutningstillstånd som inträffar 60 sekunder från varandra. Det här beteendet kan leda till resultat, till exempel flera enhetsanslutningshändelser som rapporteras utan enhets frånkopplingshändelser mellan dem.

Tips för att konsumera händelser

Program som hanterar IoT Hub-händelser bör följa de här rekommendationerna:

  • Flera prenumerationer kan konfigureras för att dirigera händelser till samma händelsehanterare, så anta inte att händelser kommer från en viss källa. Kontrollera alltid meddelandets ämne för att se till att det kommer från den IoT-hubb som du förväntar dig.
  • Anta inte att alla händelser som du tar emot är av de typer som du förväntar dig. Kontrollera alltid händelsetypen innan du bearbetar meddelandet.
  • Meddelanden kan tas emot i annan ordning eller efter en fördröjning. Använd fältet etag för att förstå om din information om objekt är uppdaterad för händelser som skapats eller tagits bort av enheten.

Nästa steg