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

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

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

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

Необходимые компоненты

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Совет

Весь проект rentalCarSimulation C# можно скачать из GitHub в виде одного ZIP-файла, перейдя в корневой каталог примера и нажав зеленую <> кнопку "Код", а затем скачайте ZIP-файл.

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

Внимание

В примерах URL-адресов замените {Your-Azure-Maps-Subscription-key} ключ подписки azure Карты.

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

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

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

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

Схема обзора системы.

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

Рисунок, на котором показан маршрут геозоны.

Создание учетной записи службы хранилища Azure

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

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

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

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

    Снимок экрана с изображением контейнеров хранилища больших двоичных объектов.

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

    Снимок экрана с диалоговым окном создания контейнера BLOB-объектов.

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

    Снимок экрана страницы, используемой для копирования имени и ключа учетной записи хранения.

Отправка геозоны в учетную запись хранения Azure

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

Выполните действия, описанные в статье "Создание реестра данных" для отправки файла данных JSON геозоны в учетную запись хранения Azure, а затем зарегистрируйте его в учетной записи azure Карты. Обязательно запишите уникальное значение идентификатора (udid) вам потребуется. Вот udid как вы ссылаетесь на геозону, отправленную в учетную запись хранения Azure из исходного кода. Дополнительные сведения о файлах данных геозоны см. в разделе "Геофенсинг GeoJSON".

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

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

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

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

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

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

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

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

Ниже приведен код скрипта C#, который содержит ваша функция.

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

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

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

    Снимок экрана страницы создания приложения-функции.

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

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

  5. После создания приложения необходимо добавить в него функцию. Перейдите к приложению-функции. Нажмите кнопку "Создать" на портале Azure.

    Внимание

    Триггер Концентратора событий Azure и шаблоны триггеров сетки событий Azure имеют аналогичные имена. Убедитесь, что выбран шаблон триггера сетки событий Azure.

    Снимок экрана: создание функции на портале Azure.

  6. Откроется панель Создать функцию. Прокрутите вниз панель "Выбор шаблона" и выберите триггер Сетка событий Azure, а затем нажмите кнопку "Создать".

    Снимок экрана страницы создания функции.

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

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

    Снимок экрана страницы, на которой выполняется копирование и вставка кода в окно функции.

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

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

    Снимок экрана страницы добавления подписки на события.

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

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

    Снимок экрана страницы создания подписки на события.

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

    Снимок экрана страницы подтверждения создания подписки на событие.

  13. Теперь вы снова находитесь на панели Изменить триггер. Выберите Сохранить.

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

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

Снимок экрана страницы настройки маршрутизации сообщений в центре Интернета вещей.

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

Снимок экрана, на котором демонстрируется фильтрация маршрутизации сообщений.

Совет

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

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

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

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

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

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

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

    dotnet run
    

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

Снимок экрана вывода терминала.

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

Снимок экрана страницы, с которой можно просмотреть большие двоичные объекты в контейнере.

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

Снимок экрана с картой нарушений.

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

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

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

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

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

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

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

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