Реагирование на события в Центре Интернета вещей с использованием службы "Сетка событий" для запуска действий
Центр Интернета вещей Azure интегрируется с Сеткой событий Azure. Вы можете отправлять уведомления о событиях в другие службы и активировать подчиненные процессы. Настройте бизнес-приложения для прослушивания событий Центра Интернета вещей, чтобы реагировать на критические события в надежном, масштабируемом и безопасном режиме. Например, создайте приложение, которое обновляет базу данных, создает рабочий билет и отправляет уведомление по электронной почте при каждой регистрации нового устройства в Центре Интернета вещей.
Сетка событий Azure — это полностью управляемая служба маршрутизации событий, использующая принцип "публикации — подписки". Эта служба поддерживает такие службы Azure, как Функции Azure и Azure Logic Apps, и может доставлять оповещения о событиях в службы за пределами Azure с помощью веб-перехватчиков. Полный список обработчиков событий, которые поддерживает служба "Сетка событий", см. в статье An introduction to Azure Event Grid (Общие сведения о службе "Сетка событий Azure").
Чтобы просмотреть видео об этой интеграции, см. статью Интеграция Центра Интернета с Сеткой событий Azure.
Доступность по регионам
Интеграция со службой "Сетка событий" доступна для центров IoT, расположенных в регионах, где поддерживается эта служба. Актуальный список регионов см. на странице Доступность продуктов по регионам.
Типы событий
Центр Интернета вещей публикует следующие типы событий:
Тип события | Описание |
---|---|
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 в разделе 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. В обоих этих свойствах регистр не учитывается.
Ограничения для событий состояния подключения устройства
События , подключенные к устройству и отключенные устройства, доступны для устройств, подключающихся по протоколу MQTT или AMQP, или с помощью любого из этих протоколов через WebSocket. Запросы, созданные только с помощью протокола HTTPS, не будут активировать уведомления о состоянии подключения устройств.
- Для устройств, подключающихся с помощью Java, Node или Python пакетов SDK для Интернета вещей Azure с протоколом MQTT, состояние подключения будет отправляться автоматически.
- Для устройств, подключающихся с помощью пакетов SDK для Интернета вещей Azure Java, Node или Python, используя протокол AMQP, необходимо создать связь между облаком и устройством, чтобы уменьшить задержку в точных состояниях подключения.
- Для устройств, подключающихся с помощью пакета SDK для Интернета вещей Azure .NET с протоколом MQTT или AMQP, не будет отправляться событие, связанное с устройством, пока не будет отправлено или получено исходное сообщение об устройстве с устройства в облака или из облака на устройство.
- За пределами пакетов SDK для Интернета вещей Azure при использовании MQTT эти операции эквивалентны операциям SUBSCRIBE или PUBLISH в соответствующих разделах сообщений. При использовании AMQP эти операции эквивалентны операциям подключения или передачи сообщения по соответствующим путям ссылок.
Интервал состояния подключения устройства
Центр Интернета вещей пытается сообщить о каждом событии изменения состояния подключения устройства, но некоторые из них могут быть пропущены. По крайней мере, Центр Интернета вещей сообщает о событиях изменения состояния подключения, которые происходят в 60 секундах друг от друга. Такое поведение может привести к таким результатам, как несколько событий подключения устройства без событий отключения устройства между ними.
Советы по использованию событий
Приложения, обрабатывающие события Центра Интернета вещей, должны следовать приведенным ниже рекомендациям.
- Несколько подписок можно настроить для маршрутизации событий в один обработчик событий, поэтому не следует думать, что события происходят из определенного источника. Всегда проверяйте тему сообщения, чтобы убедиться, что оно поступило из предполагаемого Центра Интернета вещей.
- Не следует думать, что все полученные события являются предполагаемыми вами типами. Всегда проверяйте eventType перед обработкой сообщения.
- Сообщения могут поступать не по порядку или с некоторой задержкой. Используйте поле etag, чтобы узнать, актуальны ли сведения о событиях создания или удаления устройства.