Реагирование на события в Центре Интернета вещей с использованием службы "Сетка событий" для запуска действий

Центр Интернета вещей Azure интегрируется с Сеткой событий Azure. Вы можете отправлять уведомления о событиях в другие службы и активировать подчиненные процессы. Настройте бизнес-приложения для прослушивания событий Центра Интернета вещей, чтобы реагировать на критические события в надежном, масштабируемом и безопасном режиме. Например, создайте приложение, которое обновляет базу данных, создает рабочий билет и отправляет уведомление по электронной почте при каждой регистрации нового устройства в Центре Интернета вещей.

Сетка событий Azure — это полностью управляемая служба маршрутизации событий, использующая принцип "публикации — подписки". Эта служба поддерживает такие службы Azure, как Функции Azure и Azure Logic Apps, и может доставлять оповещения о событиях в службы за пределами Azure с помощью веб-перехватчиков. Полный список обработчиков событий, которые поддерживает служба "Сетка событий", см. в статье An introduction to Azure Event Grid (Общие сведения о службе "Сетка событий Azure").

Чтобы просмотреть видео об этой интеграции, см. статью Интеграция Центра Интернета с Сеткой событий Azure.

Diagram that shows Azure Event Grid architecture.

Доступность по регионам

Интеграция со службой "Сетка событий" доступна для центров IoT, расположенных в регионах, где поддерживается эта служба. Актуальный список регионов см. на странице Доступность продуктов по регионам.

Типы событий

Центр Интернета вещей публикует следующие типы событий:

Тип события Description
Microsoft.Devices.DeviceCreated Публикуется при регистрации устройства в Центре Интернета вещей.
Microsoft.Devices.DeviceDeleted Публикуется при удалении устройства из Центра Интернета вещей.
Microsoft.Devices.DeviceConnected Публикуется при подключении устройства к Центру Интернета вещей.
Microsoft.Devices.DeviceDisconnected Публикуется при отключении устройства от Центра Интернета вещей.
Microsoft.Devices.DeviceTelemetry Публикуется при отправке сообщения телеметрии устройства в Центр Интернета вещей

Чтобы настроить события, которые будут публиковаться в каждом Центре Интернета вещей, используйте портал Azure или Azure CLI. Например, ознакомьтесь со статьей Send email notifications about Azure IoT Hub events using Logic Apps (Отправка уведомлений электронной почты о событиях в Центре Интернета вещей Azure с помощью Logic Apps).

Схема событий

События Центра Интернета вещей содержат все сведения, необходимые для реагирования на изменения в жизненном цикле устройства. Вы можете идентифицировать событие Центра Интернета вещей, проверив, запускается ли свойство eventType с Microsoft.Devices. Дополнительные сведения об использовании свойств событий службы "Сетка событий" см. в статье Схема событий службы "Сетка событий Azure".

Схема подключения устройства

В следующем примере показана схема события подключения устройства:

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

Схема телеметрии устройств

Сообщения телеметрии устройства должны быть в допустимом формате JSON, для параметра contentType задано значение application/json, а для параметра contentEncoding установлено значение UTF-8 в разделе system properties сообщения. В обоих этих свойствах регистр не учитывается. Если кодировка содержимого не задана, Центр Интернета вещей записывает сообщения в кодировке base 64.

Вы можете обогатить события телеметрии устройства перед публикацией в Сетке событий, выбрав конечную точку в качестве сетки событий. Дополнительные сведения см. в статье Обогащение сообщений.

В следующем примере показана схема события телеметрии устройства:

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

Схема, созданная устройством

В следующем примере показана схема события создания устройства:

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

Предупреждение

Данные двойника, связанные с событием создания устройства, являются конфигурацией по умолчанию и не должны полагаться на фактические authenticationType и другие свойства устройства в созданном устройстве. Для authenticationType и других свойств устройства в созданном устройстве используйте API диспетчера регистрации, предоставленный в пакетах SDK Интернета вещей Azure.

Дополнительные описания каждого свойства см. в статье Схема событий службы "Сетка событий Azure" для Центра Интернета вещей.

События фильтра

Сетка событий поддерживает фильтрацию по типам событий, темам и содержимому данных. При создании подписки на службу "Сетка событий" можно выбрать подписку на выбранные события Интернета вещей.

  • Тип события: список типов событий Центра Интернета вещей см. в разделе Типы событий.
  • Тема: для событий Центра Интернета вещей темой является имя устройства. Тема принимает формат devices/{deviceId}. Вы можете отфильтровать темы на основе совпадений Начинается с (префикс) и Заканчивается на (суффикс). В фильтре используется оператор AND, чтобы события с темой, которая соответствует и префиксу, и суффиксу, доставлялись подписчику.
  • Содержимое данных: содержимое данных заполняется Центром Интернета вещей с использованием формата сообщения. Вы можете выбрать, какие события будут доставляться, на основе содержимого сообщения телеметрии. Примеры см. в статье Расширенная фильтрация. Для фильтрации текста сообщения телеметрии необходимо задать значение application/json, а в сообщении свойства системы для параметра contentEncoding требуется задать значение UTF-8. В обоих этих свойствах регистр не учитывается.

Для событий телеметрии устройства Центр Интернета вещей создаст маршрут сообщений по умолчанию с именем RouteToEventGrid на основе подписки. Чтобы отфильтровать сообщения перед отправкой данных телеметрии, обновите запрос маршрутизации.

Ограничения для событий состояния подключения устройства

Подключенные устройства и отключенные события устройства доступны для устройств, подключающихся с помощью протокола MQTT или AMQP, или с помощью любого из этих протоколов через WebSockets. Запросы, созданные только с использованием протокола HTTPS, не будут активировать уведомления о состоянии подключения устройств.

Сведения о мониторинге состояния устройства с помощью сетки событий см. в разделе "Мониторинг состояния подключения устройства".

Интервал состояния подключения устройства

Центр Интернета вещей пытается сообщить о каждом событии изменения состояния подключения устройства, но некоторые из них могут быть пропущены. Как минимум, Центр Интернета вещей сообщает о событиях изменения состояния подключения, которые происходят в 60 секунд от друг друга. Это может привести к результатам, таким как несколько событий подключения устройств, сообщаемые без событий отключения устройства между ними.

Советы по использованию событий

Приложения, обрабатывающие события Центра Интернета вещей, должны следовать приведенным ниже рекомендациям.

  • Несколько подписок можно настроить для маршрутизации событий в один обработчик событий, поэтому не следует думать, что события происходят из определенного источника. Всегда проверяйте тему сообщения, чтобы убедиться, что оно поступило из предполагаемого Центра Интернета вещей.
  • Не следует думать, что все полученные события являются предполагаемыми вами типами. Всегда проверяйте значение eventType перед обработкой сообщения.
  • Сообщения могут приступать не по порядку или после некоторой задержки. Используйте поле etag, чтобы узнать, актуальны ли сведения о событиях создания или удаления устройства.

Следующие шаги