Réagir aux événements IoT Hub en utilisant Event Grid pour déclencher des actions

Azure IoT Hub s’intègre à Azure Event Grid pour vous permettre d’envoyer des notifications d’événements à d’autres services et de déclencher des processus en aval. Configurez vos applications d’entreprise pour écouter les événements d’IoT Hub afin de réagir aux événements critiques de manière fiable, évolutive et sécurisée. Vous pouvez par exemple créer une application qui met à jour une base de données, crée un ticket et remet une notification par e-mail chaque fois qu’un nouvel appareil IoT est inscrit auprès de votre hub IoT.

Azure Event Grid est un service de routage d’événement entièrement géré qui utilise le modèle publication-abonnement. Event Grid offre une prise en charge intégrée des services Azure comme Azure Functions et Azure Logic Apps, et peut fournir des alertes d’événements à des services non-Azure à l’aide de webhooks. Pour obtenir une liste complète des gestionnaires d’événements qui prennent en charge Event Grid, consultez Présentation d’Azure Event Grid.

Pour regarder une vidéo sur cette intégration, consultez Intégration d’Azure IoT Hub à Azure Event Grid.

Diagram that shows Azure Event Grid architecture.

Disponibilité régionale

L’intégration Event Grid est disponible pour les hubs IoT situés dans les régions où Event Grid est pris en charge. Pour obtenir la liste la plus récente des régions, consultez Disponibilité des produits par région.

Types d’événements

IoT Hub publie les types d’événements suivants :

Type d’événement Description
Microsoft.Devices.DeviceCreated Publié quand un appareil est inscrit auprès d’un hub IoT.
Microsoft.Devices.DeviceDeleted Publié quand un appareil est supprimé d’un hub IoT.
Microsoft.Devices.DeviceConnected Publié quand un appareil est connecté à un hub IoT.
Microsoft.Devices.DeviceDisconnected Publié quand un appareil est déconnecté d’un hub IoT.
Microsoft.Devices.DeviceTelemetry Publié quand un message de télémétrie d’appareil est envoyé à un hub IoT

Utilisez le portail Azure ou Azure CLI pour configurer les événements à publier à partir de chaque hub IoT. Pour obtenir un exemple, suivez le didacticiel Envoyer des notifications par e-mail sur des événements Azure IoT Hub à l’aide de Logic Apps.

Schéma d’événement

Les événements IoT Hub contiennent toutes les informations dont vous avez besoin pour répondre aux modifications du cycle de vie de vos appareils. Vous pouvez identifier un événement IoT Hub en vérifiant que la propriété eventType commence par Microsoft.Devices. Pour plus d’informations sur la façon d’utiliser des propriétés d’événements Event Grid, consultez le Schéma d’événement Azure Event Grid.

Schéma d’appareil connecté

L’exemple suivant montre le schéma d’un événement de connexion d’appareil :

[{  
  "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 de télémétrie des appareils

Les messages de télémétrie d’appareil doivent être dans un format JSON valide avec contentType défini sur application/json et contentEncoding défini sur UTF-8 dans les propriétés système du message. Ces deux propriétés sont insensibles à la casse. Si l’encodage du contenu n’est pas défini, IoT Hub écrit les messages dans un format encodé en base 64.

Vous pouvez enrichir les événements de télémétrie d’appareil avant de les publier sur Event Grid en sélectionnant le point de terminaison en tant que Event Grid. Pour plus d’informations, consultez Enrichissements de messages.

L’exemple suivant montre le schéma d’un événement de télémétrie d’appareil :

[{  
  "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 de création d’appareil

L’exemple suivant montre le schéma d’un événement de création d’appareil :

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

Avertissement

Les données de jumeaux associées à un événement de création d’appareil sont une configuration par défaut et ne doivent pas être utilisées pour la propriété authenticationType réelle et autres propriétés d’appareil dans un appareil nouvellement créé. Pour authenticationType et les autres propriétés d’un appareil nouvellement créé, utilisez l’API de gestionnaire d’inscription fournie dans les SDK Azure IoT.

Pour obtenir une description détaillée de chaque propriété, consultez Schéma d’événement Azure Event Grid pour IoT Hub.

Filtrer les événements

Event Grid permet le filtrage en fonction des types d’événements, des sujets et du contenu des données. Lors de la création de l’abonnement Event Grid, vous pouvez choisir de vous abonner à des événements IoT sélectionnés.

  • Type d’événement : pour obtenir la liste des types d’événements IoT Hub, consultez Types d’événements.
  • Objet : pour les événements IoT Hub, l’objet est le nom de l’appareil. L’objet prend le format devices/{deviceId}. Vous pouvez filtrer les objets en fonction des correspondances Begins With (préfixe) et Ends With (suffixe). Le filtre utilise un opérateur AND. Ainsi, les événements avec un objet qui correspond à la fois au préfixe et au suffixe sont remis à l’abonné.
  • Contenu des données : le contenu des données est rempli par IoT Hub à l’aide du format de message. Vous pouvez choisir quels événements sont fournis sur la base du contenu du message de télémétrie. Pour obtenir des exemples, consultez Filtrage avancé. Pour le filtrage du corps du message de télémétrie, vous devez définir contentType sur application/json et contentEncoding sur UTF-8 dans les propriétés système de message. Ces deux propriétés sont insensibles à la casse.

Pour les événements de télémétrie d’appareil, IoT Hub crée l’itinéraire de message par défaut appelé RouteToEventGrid en fonction de l’abonnement. Pour filtrer les messages avant l’envoi de données de télémétrie, mettre à jour la requête de routage.

Limitations pour les événements d’état de connexion de l’appareil

Les événements d’état de connexion et de déconnexion de l’appareil sont disponibles pour les appareils qui se connectent à l’aide du protocole MQTT ou AMQP, ou à l’aide de l’un de ces protocoles sur WebSockets. Les requêtes effectuées uniquement avec HTTPS ne déclenchent pas de notifications d’état de connexion de l’appareil.

Pour plus d’informations sur la surveillance de l’état de l’appareil avec Event Grid, consultez Surveiller l’état de la connexion de l’appareil.

Intervalles d'état de la connexion de l'appareil

IoT Hub tente de signaler chaque événement de changement d’état de connexion d’appareil, mais certains peuvent être manqués. Au minimum, IoT Hub signale les événements de changement d’état de connexion qui se produisent à 60 secondes d’intervalle les uns des autres. Ce comportement peut entraîner des résultats tels que plusieurs événements de connexion d’appareil signalés sans événements de déconnexion d’appareil entre eux.

Conseils relatifs à la consommation d’événements

Les applications qui gèrent des événements IoT Hub doivent suivre ces pratiques suggérées :

  • Plusieurs abonnements peuvent être configurés pour acheminer les événements vers le même gestionnaire d’événements. Il ne faut donc pas supposer que les événements proviennent d’une source particulière. Vérifiez toujours la rubrique du message pour être sûr qu’il provient du hub IoT prévu.
  • Ne supposez pas que tous les événements reçus sont des types attendus. Vérifiez toujours eventType avant de traiter le message.
  • Les messages peuvent arriver dans le désordre ou après un certain délai. Utilisez le champ ETag pour vérifier si vos informations sur les objets sont à jour concernant le périphérique créé ou les événements supprimés de l’appareil.

Étapes suivantes