Руководство по Реализация пространственной аналитики Интернета вещей с помощью Azure Maps

В сценарии IoT зачастую фиксируются и отслеживаются соответствующие события, происходящие в пространстве и времени. Примерами могут служить управление автопарком, отслеживание активов, приложения мобильности и "умного" города. В этом учебнике вы изучите решение, которое отслеживает передвижение арендованных автомобилей, используя API-интерфейсы Azure Maps.

Изучив данный учебник, вы научитесь:

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

Предварительные требования

  1. Войдите на портал Azure.

  2. Создайте учетную запись службы Azure Maps.

  3. Получите первичный ключ подписки, который иногда называется первичным ключом или ключом подписки. Дополнительные сведения см. в статье Управление аутентификацией в Azure Maps.

  4. Создайте группу ресурсов. В этом учебнике мы назовем нашу группу ресурсов ContosoRental, но можно выбрать любое имя.

  5. Скачайте проект C# rentalCarSimulation.

В этом учебнике используется приложение Postman, но вы можете выбрать другую среду разработки API.

Вариант использования: отслеживание арендованных автомобилей

Допустим, компания по аренде автомобилей хочет регистрировать информацию о местоположении, пройденном расстоянии и рабочем состоянии своих транспортных средств. Кроме того, она хочет сохранять эти сведения каждый раз, когда автомобиль покидает правильный авторизованный географический регион.

Арендованные автомобили оснащаются устройствами Интернета вещей, которые регулярно отправляют данные телеметрии в Центр Интернета вещей. Данные телеметрии содержат текущее расположение и сведения о том, работает ли двигатель автомобиля. Схема расположения устройств соответствует схеме IoT Plug and Play для геопространственных данных. Схема телеметрии устройства для арендованного автомобиля выглядит примерно так как следующий код JSON:

{
    "data": {
        "properties": {
            "Engine": "ON"
        },
        "systemProperties": {
            "iothub-content-type": "application/json",
            "iothub-content-encoding": "utf-8",
            "iothub-connection-device-id": "ContosoRentalDevice",
            "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "iothub-connection-auth-generation-id": "636959817064335548",
            "iothub-enqueuedtime": "2019-06-18T00:17:20.608Z",
            "iothub-message-source": "Telemetry"
        },
        "body": {
            "location": {
                "type": "Point",
                "coordinates": [ -77.025988698005662, 38.9015330523316 ]
            }
        }
    }
}

В этом учебнике рассматривается отслеживание только одного автомобиля. После настройки служб Azure необходимо скачать проект C# rentalCarSimulation, чтобы запустить симулятор автомобиля. Весь процесс, от события к исполнению функций, приведен в следующих шагах:

  1. Устройство, которое находится в автомобиле, отправляет данные телеметрии в Центр Интернета вещей.

  2. Если двигатель автомобиля работает, центр публикует данные телеметрии в Сетке событий.

  3. Функция Azure срабатывает из-за подписки на события телеметрии устройства.

  4. Функция регистрирует координаты расположения устройства автомобиля, время события и идентификатор устройства. Затем она использует API определения пространственной геозоны, чтобы определить, выехал ли автомобиль за пределы геозоны. Если он находится за пределами геозоны, функция сохраняет данные о местоположении, полученные от события, в наш контейнер больших двоичных объектов. Кроме того, эта функция запрашивает обратное преобразование найденных адресов, чтобы перевести координаты местоположения в адрес улицы и сохранить его с остальными данными о расположении устройства.

На следующей схеме представлено обобщенное описание всей системы.

Diagram of system overview.

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

Figure showing geofence route.

Создание учетной записи хранения Azure

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

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

После успешного создания учетной записи хранения необходимо создать контейнер для хранения данных журнала.

  1. Перейдите к только что созданной учетной записи хранения. В разделе Основные компоненты щелкните ссылку Контейнеры.

    Screenshot of containers for blob storage.

  2. В верхнем левом углу щелкните + Контейнер. В правой части браузера отобразится панель. Присвойте контейнеру имя contoso-rental-logs и выберите Создать.

    Screenshot of create a blob container.

  3. Перейдите в область Ключи доступа в учетной записи хранения и скопируйте значения полей Имя учетной записи хранения и Ключ в разделе Key1. Нам понадобятся оба эти значения в разделе "Создание функции в службе "Функции Azure" и добавление подписки на службу "Сетка событий".

    Screenshot of copy storage account name and key.

Отправка геозоны

Далее можно использовать приложение Postman, чтобы отправить геозону в Azure Maps. Геозоны определяют авторизованное географическое расположение для арендованного автомобиля. Геозоны будут использоваться в функции Azure, чтобы определить, переместился ли автомобиль за пределы области геозоны.

Выполните следующие действия, чтобы отправить геозоны с помощью API отправки данных Azure Maps.

  1. Откройте приложение Postman и снова выберите New (Создать). В окне Create New (Создание) выберите HTTP Request (HTTP-запрос) и введите имя запроса.

  2. Выберите HTTP-метод POST на вкладке построителя и введите следующий URL-адрес, чтобы отправить данные о геозоне в API отправки данных. Обязательно замените {Your-Azure-Maps-Primary-Subscription-key} ключом первичной подписки.

    https://us.atlas.microsoft.com/mapData?subscription-key={Your-Azure-Maps-Primary-Subscription-key}&api-version=2.0&dataFormat=geojson
    

    В URL-адрес значение geojson для параметра dataFormat в пути URL-адреса определяет формат отправляемых данных.

  3. Выберите Body>raw (Текст > необработанный) для формата входных данных и щелкните JSON в раскрывающемся списке. Откройте файл данных JSON и скопируйте JSON в раздел текста. Нажмите кнопку Отправить.

  4. Нажмите Send (Отправить) и дождитесь обработки запроса. После выполнения запроса перейдите на вкладку Заголовки ответа. Скопируйте значение ключа Operation-Location: status URL.

    https://us.atlas.microsoft.com/mapData/operations/{operationId}?api-version=2.0
    
  5. Чтобы проверить состояние вызова API, создайте HTTP-запрос GET по status URL. Вам потребуется добавить первичный ключ подписки к URL-адресу для проверки подлинности. Запрос GET должен быть похож на следующий URL-адрес.

    https://us.atlas.microsoft.com/mapData/{operationId}/status?api-version=2.0&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
    
  6. После успешного завершения запроса выберите вкладку Заголовки в окне ответа. Скопируйте значение ключа Resource-Location: resource location URL. resource location URL содержит уникальный идентификатор (udid) отправленных данных. Скопируйте udid для дальнейшего использования в этом учебнике.

    Copy the resource location URL.

Создание Центра Интернета вещей

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

Чтобы создать центр Интернета вещей в группе ресурсов ContosoRental, выполните действия, описанные в разделе Создание центра Интернета вещей.

Регистрация устройства в центре Интернета вещей

Устройства не могут подключиться к центру Интернета вещей, если они не зарегистрированы в реестре удостоверений центра. В данном случае вы создадите одно устройство с именем InVehicleDevice. Чтобы создать и зарегистрировать устройство в центре Интернета вещей, выполните действия, описанные в разделе Регистрация нового устройства в центре Интернета вещей. Не забудьте скопировать основную строку подключения устройства. Он понадобится вам позднее.

Создание функции и добавление подписки на службу "Сетка событий"

Функции Azure — это бессерверная служба вычислений, которая позволяет запускать небольшие фрагменты кода (функции) без необходимости явно подготавливать вычислительную инфраструктуру или управлять ею. Дополнительные сведения см. в статье о службе Функции Azure.

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

Код скрипта на C#, который будет содержать наша функция, размещен здесь.

Теперь настройте функцию Azure.

  1. На панели мониторинга портала Azure щелкните Создать ресурс. В поле поиска введите Приложение-функция. Выберите Приложение-функция>Создать.

  2. На странице создания приложения-функции присвойте имя приложению-функции. В разделе Группа ресурсов в раскрывающемся списке выберите ContosoRental. Выберите .NET в качестве значения для параметра Стек среды выполнения. Выберите 3.1 в качестве значения для параметра Версия. В нижней части страницы нажмите кнопку Далее: Размещение >.

    Screenshot of create a function app.

  3. Учетная запись хранилища — выберите учетную запись, которую вы создали на этапе создания учетной записи. Выберите Review + create (Просмотреть и создать).

  4. Просмотрите данные о приложении-функции и щелкните Создать.

  5. После создания приложения необходимо добавить в него функцию. Перейдите к приложению-функции. Перейдите на панель Функции. В верхней части страницы выберите + Добавить. Отобразится панель шаблона функции. Прокрутите панель вниз и выберите триггер Сетки событий Azure.

    Важно!

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

    Screenshot of create a function.

  6. Присвойте функции имя. В этом учебнике мы будем использовать имя GetGeoFunction, но в общем можно использовать любое имя. Выберите Создать функцию.

  7. В меню слева выберите область Code + Test (Код и тестирование). Скопируйте и вставьте скрипт C# в окно кода.

    Copy/Screenshot of paste code into function window.

  8. В коде C# замените следующие параметры:

    • Замените значение SUBSCRIPTION_KEY первичным ключом подписки для учетной записи Azure Maps.
    • Замените значение UDID идентификатором udid отправленной ранее геозоны в разделе Отправка геозоны.
    • Функция CreateBlobAsync в скрипте создает большой двоичный объект для каждого события в учетной записи хранения данных. Замените заполнители ACCESS_KEY, ACCOUNT_NAME и STORAGE_CONTAINER_NAME значениями ключа доступа к учетной записи хранения, имени учетной записи и контейнера хранилища данных. Эти значения были созданы при создании учетной записи хранения в соответствующем разделе.
  9. В меню слева выберите область Интеграция. Выберите на схеме Триггер сетки событий. Введите имя триггера, например eventGridEvent, и щелкните Создание подписки для Сетки событий.

    Screenshot of add event subscription.

  10. Заполните сведения о подписке. Назовите подписку на событие. Для пункта Схема событий выберите Схема сетки событий. Для пункта Topic Types (Типы разделов) выберите Azure IoT Hub Accounts (Учетные записи Центра Интернета вещей Azure). Выберите Группы ресурсов, а затем созданную для этого учебника группу ресурсов. В поле Ресурс выберите центр Интернета вещей, созданный в шаге "Создание центра Интернета вещей Azure". Чтобы применить Фильтр по типам событий, выберите Телеметрия устройства.

    Завершив выбор параметров, вы увидите, что значение для параметра Тип раздела изменится на Центр Интернета вещей. Для пункта System Topic Name (Имя системного раздела) можно использовать то же имя, что и для ресурса. Наконец, в разделе Сведения о конечной точке нажмите Выбрать конечную точку. Примите все параметры и нажмите Подтвердить выбор.

    Screenshot of create event subscription.

  11. Проверьте настройки. Убедитесь, что конечная точка указывает функцию, созданную в начале этого раздела. Нажмите кнопку создания.

    Screenshot of create event subscription confirmation.

  12. Теперь вы снова находитесь на панели Изменить триггер. Щелкните Сохранить.

Фильтрация событий с помощью маршрутизации сообщений, предоставляемой Центром Интернета вещей

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

Screenshot of message routing in IoT hub.

В этом примере сценария необходимо получать сообщения только при перемещении автомобиля. Создайте запрос маршрутизации для фильтрации событий, в которых значение свойства Engine равно ON. Чтобы создать запрос маршрутизации, выберите маршрут RouteToEventGrid и замените значение Запрос маршрутизации на строку "Engine='ON'" . Затем нажмите кнопку Save (Сохранить). Теперь центр Интернета вещей будет публиковать только те события телеметрии устройств, в которых параметр Engine имеет значение ON.

Screenshot of filter routing messages.

Совет

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

Отправка данных телеметрии в Центр Интернета вещей

Когда функция Azure работает, можно отправить данные телеметрии в центр Интернета вещей, который передаст их в Сетку событий. Используйте приложение C# для имитации данных о местоположении, получаемых с устройства в арендованном автомобиле. Чтобы запустить это приложение, на компьютере разработки необходимо установить пакет SDK для .NET Core версии 3.1. Выполните эти действия, чтобы отправить имитированные данные телеметрии в центр Интернета вещей.

  1. Если вы еще не сделали этого, скачайте проект rentalCarSimulation на C#.

  2. Откройте файл simulatedCar.cs в любом текстовом редакторе и замените в нем значение connectionString тем, которое вы сохранили при регистрации устройства. Сохраните изменения в файле.

  3. Убедитесь, что на компьютере установлена платформа .NET Core. В локальном окне терминала перейдите к корневой папке проекта C# и выполните следующие команды, чтобы установить необходимые пакеты для приложения имитированного устройства.

    dotnet restore
    
  4. В том же окне терминала выполните команды, которые компилируют и запускают приложение имитации устройства в арендованном автомобиле:

    dotnet run
    

Теперь окно терминала должно содержать примерно такие данные:

Screenshot of terminal output.

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

Screenshot of view blobs inside container.

На следующей карте показаны четыре точки обнаружения автомобилей за пределами геозоны. Каждое расположение записывается в журнал через регулярные интервалы времени.

Screenshot of violation map.

Знакомство с Azure Maps и Интернетом вещей

Для изучения API-интерфейсов Azure Maps, используемых в этом учебнике, прочтите следующие статьи.

Полный список API-интерфейсов Azure Maps вы найдете здесь:

Список устройств, сертифицированных для работы с Интернетом вещей в Azure, размещен на этой странице:

Очистка ресурсов

Нет ресурсов, требующих очистки.

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

Дополнительные сведения о том, как отправлять данные телеметрии с устройства в облако или обратно, см. здесь: