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

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

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

Azure Event Grid architecture

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

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

Типы событий

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

Тип события Описание
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).

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

События Центра Интернета вещей содержат все сведения, необходимые для реагирования на изменения в жизненном цикле устройства. События Центра Интернета вещей можно узнать по тому, что свойство у них начинается с 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. В обоих этих свойствах регистр не учитывается. Если кодировка содержимого не задана, Центр Интернета вещей будет записывать сообщения в формате Base 64.

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

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

[{  
  "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 Register Manager, предоставленный в пакетах SDK для Интернета вещей Azure.

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

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

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

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

Тема событий Интернета вещей использует следующий формат:

devices/{deviceId}

Кроме того, Сетка событий позволяет фильтровать атрибуты каждого события, включая содержимое данных. Это позволяет выбрать, какие события доставляются на основе содержимого телеметрического сообщения. Дополнительные сведения см. в разделе Расширенная фильтрация. Для фильтрации текста сообщения телеметрии необходимо задать значение application/json, а в сообщении свойства системы для параметра contentEncoding требуется задать значение UTF-8. В обоих этих свойствах регистр не учитывается.

Для событий, не относящихся к телеметрии, таких как DeviceConnected, DeviceDisconnected, DeviceCreated и DeviceDeleted, при создании подписки можно использовать фильтрацию Сетки событий Azure. Для событий телеметрии, в дополнение к фильтрации в службе "Сетка событий", пользователи также могут выполнять фильтрацию по двойникам устройств, свойствам и тексту сообщений с помощью запроса маршрутизации сообщений.

Когда вы подписываетесь на события телеметрии через службу "Сетка событий", Центр Интернета вещей создает маршрут сообщения по умолчанию для отправки сообщений устройства типа источника данных в службу "Сетка событий". Дополнительные сведения о маршрутизации сообщений см. в статье об маршрутизации сообщений Центра Интернета вещей Azure. Настроенный маршрут будет отображаться на портале в разделе "Центр Интернета вещей > Маршрутизация сообщений". Создается только один маршрут к службе "Сетка событий", независимо от количества подписок Сетки событий, созданных для событий телеметрии. Поэтому, если требуется несколько подписок с разными фильтрами, вы можете использовать оператор OR в этих запросах на одном и том же маршруте. Создание и удаление маршрута контролируется с помощью подписки событий телеметрии через службу "Сетка событий". Вы не можете создать или удалить маршрут к Сетке событий с помощью Маршрутизации сообщений Центра Интернета вещей.

Чтобы фильтровать сообщения перед отправкой данных телеметрии, можно обновить запрос маршрутизации. Обратите внимание, что запрос маршрутизации может применяться к тексту сообщения только в том случае, если это текст в формате JSON. Также для параметра contentType необходимо задать значение application/json, а в сообщении свойства системы для параметра contentEncoding требуется задать значение UTF-8.

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

События состояния подключения устройства доступны для устройств, подключающихся с помощью протокола MQTT или AMQP или с помощью любого из этих протоколов через WebSockets. Запросы, созданные только с помощью протокола HTTPS, не будут активировать уведомления о состоянии подключения устройств. Чтобы Центр Интернета вещей начал отправку событий состояния подключения устройств, после открытия подключения устройство должно вызвать операцию приема сообщений из облака на устройство или операцию отправки данных телеметрии с устройства в облако. За пределами пакетов SDK для Интернета вещей Azure при использовании MQTT эти операции эквивалентны операциям SUBSCRIBE или PUBLISH в соответствующих разделах сообщений. При использовании AMQP эти операции эквивалентны операциям подключения или передачи сообщения по соответствующим путям ссылок.

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

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

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

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

  • Не следует думать, что все полученные события являются предполагаемыми вами типами. Всегда проверяйте eventType перед обработкой сообщения.

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

Дальнейшие действия