Реагирование на события в Центре Интернета вещей с использованием службы "Сетка событий" для запуска действий
Центр Интернета вещей Azure интегрируется с Сеткой событий Azure. Вы можете отправлять уведомления о событиях в другие службы и активировать подчиненные процессы. Настройте бизнес-приложения для прослушивания событий Центра Интернета вещей, чтобы реагировать на критические события в надежном, масштабируемом и безопасном режиме. Например, создайте приложение, которое обновляет базу данных, создает рабочий билет и отправляет уведомление по электронной почте при каждой регистрации нового устройства в Центре Интернета вещей.
Сетка событий Azure — это полностью управляемая служба маршрутизации событий, использующая принцип "публикации — подписки". Эта служба поддерживает такие службы Azure, как Функции Azure и Azure Logic Apps, и может доставлять оповещения о событиях в службы за пределами Azure с помощью веб-перехватчиков. Полный список обработчиков событий, которые поддерживает служба "Сетка событий", см. в статье An introduction to Azure Event Grid (Общие сведения о службе "Сетка событий Azure").
Чтобы просмотреть видео об этой интеграции, см. статью Интеграция Центра Интернета с Сеткой событий Azure.
Доступность по регионам
Интеграция со службой "Сетка событий" доступна для центров 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, чтобы узнать, актуальны ли сведения о событиях создания или удаления устройства.