Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пользовательские политики выделения обеспечивают больше контроля над назначением устройств центрам Интернета вещей. С помощью пользовательских политик выделения можно определить собственные политики выделения, если политики, предоставляемые службой подготовки устройств Центр Интернета вещей Azure (DPS), не соответствуют требованиям вашего сценария. Настраиваемая политика выделения реализуется в веб-перехватчике, размещенном в Функции Azure, и настроена для одной или нескольких отдельных регистраций и (или) групп регистрации. Когда устройство регистрируется в DPS с помощью настроенной записи регистрации, DPS вызывает веб-перехватчик, чтобы узнать, в каком центре Интернета вещей должно быть зарегистрировано устройство и, при необходимости, его начальное состояние. Чтобы узнать больше, см. статью "Понимание пользовательских политик распределения с помощью службы подготовки устройств центра Интернета вещей Azure".
В этом руководстве демонстрируется настраиваемая политика выделения с помощью функции Azure, написанной на C#. Устройства назначаются одному из двух центров Интернета вещей, представляющих отдел тостеров Contoso и подразделение тепловых насосов Contoso. Устройства, запрашивающие подготовку, должны иметь идентификатор регистрации с одним из следующих суффиксов, чтобы они были приняты для подготовки:
- -contoso-tstrsd-007 для отдела тостеров Contoso
- -contoso-hpsd-088 для подразделения тепловых насосов Contoso
Устройства имитируются с помощью примера подготовки, включенного в пакет SDK для Azure IoT C.
В этом руководстве описаны следующие действия.
- Используйте Azure CLI для создания экземпляра DPS и создания и связывания двух центров Интернета вещей подразделения Contoso (Отдел тостеров Contoso и отдела тепловых насосов Contoso) к нему.
- Создайте функцию Azure, реализующую настраиваемую политику выделения.
- Создайте новую группу регистрации, используя функцию Azure для настраиваемой политики выделения.
- Создайте симметричные ключи устройства для двух имитированных устройств.
- Настройте среду разработки для пакета SDK для Azure IoT C.
- Имитируйте устройства и убедитесь, что они подготовлены в соответствии с примером кода в пользовательской политике выделения.
Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
Необходимые компоненты
Приведенные ниже предварительные требования касаются среды разработки Windows. При использовании Linux или macOS ознакомьтесь с соответствующим разделом в статье Подготовка среды разработки из документации к пакету SDK.
Visual Studio 2022 с включенной рабочей нагрузкой "Разработка компьютеров с помощью C++". Visual Studio 2015 или Visual Studio 2017 также поддерживаются.
GIT установлен. Дополнительные сведения см. в разделе загрузки Git.
Установленный Azure CLI. Дополнительные сведения см. в статье "Установка Azure CLI". Вы также можете выполнить команды в этом руководстве в среде Bash в Azure Cloud Shell.
Создание службы подготовки и двух центров Интернета вещей
В этом разделе вы узнаете, как использовать Azure Cloud Shell для создания службы подготовки и двух центров Интернета вещей, представляющих отдел тостеров Contoso и отдел тепловых насосов Contoso.
Сначала задайте переменные среды в рабочей области, чтобы упростить команды в этом руководстве.
Имена DPS и Центр Интернета вещей должны быть глобально уникальными. Замените значение заполнителя
SUFFIXна собственное.Кроме того, код функции Azure, создаваемый далее в этом руководстве, ищет центры Интернета вещей, имеющие
-toasters-имена или-heatpumps-имена. При изменении предлагаемых значений обязательно используйте имена, содержащие необходимые подстроки.#!/bin/bash export RESOURCE_GROUP="contoso-us-resource-group" export LOCATION="westus" export DPS="contoso-provisioning-service-SUFFIX" export TOASTER_HUB="contoso-toasters-hub-SUFFIX" export HEATPUMP_HUB="contoso-heatpumps-hub-SUFFIX"# PowerShell $env:RESOURCE_GROUP = "contoso-us-resource-group" $env:LOCATION = "westus" $env:DPS = "contoso-provisioning-service-SUFFIX" $env:TOASTER_HUB = "contoso-toasters-hub-SUFFIX" $env:HEATPUMP_HUB = "contoso-heatpumps-hub-SUFFIX"Совет
Команды, используемые в этом руководстве, по умолчанию создают ресурсы в расположении западной части США. Рекомендуем создавать ресурсы в ближайшем для вас регионе, поддерживающем Службу подготовки устройств. Список доступных размещений можно просмотреть, перейдя на страницу состояния Azure и выполнив поиск по запросу "Device Provisioning Service". В командах расположение можно указать как в одном слове, так и в формате с несколькими словами; например: westus, West US, WEST US и т. д. Значение не зависит от регистра.
Используйте команду az group create для создания группы ресурсов Azure. Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими.
В следующем примере создается группа ресурсов. Рекомендуется использовать одну группу для всех ресурсов, созданных в этом руководстве. Это поможет упростить очистку после завершения работы.
az group create --name $RESOURCE_GROUP --location $LOCATIONИспользуйте команду az iot dps create для создания экземпляра службы подготовки устройств (DPS). Служба подготовки добавляется в contoso-us-resource-group.
az iot dps create --name $DPS --resource-group $RESOURCE_GROUP --location $LOCATIONЭта команда может занять несколько минут.
Используйте команду az iot hub create, чтобы создать Центр Интернета вещей отдела Тостеров Contoso. Центр Интернета вещей добавляется в группу ресурсов contoso-us..
az iot hub create --name $TOASTER_HUB --resource-group $RESOURCE_GROUP --location $LOCATION --sku S1Эта команда может занять несколько минут.
Используйте команду az iot hub create, чтобы создать Центр Интернета вещей подразделения тепловых насосов Contoso. Этот центр Интернета вещей также добавляется в contoso-us-resource-group.
az iot hub create --name $HEATPUMP_HUB --resource-group $RESOURCE_GROUP --location $LOCATION --sku S1Эта команда может занять несколько минут.
Выполните следующие две команды, чтобы получить строка подключения для созданных центров.
az iot hub connection-string show --hub-name $TOASTER_HUB --key primary --query connectionString -o tsv az iot hub connection-string show --hub-name $HEATPUMP_HUB --key primary --query connectionString -o tsvВыполните следующие команды, чтобы связать центры с ресурсом DPS. Замените заполнители строка подключения концентратора на предыдущем шаге.
az iot dps linked-hub create --dps-name $DPS --resource-group $RESOURCE_GROUP --location $LOCATION --connection-string <toaster_hub_connection_string> az iot dps linked-hub create --dps-name $DPS --resource-group $RESOURCE_GROUP --location $LOCATION --connection-string <heatpump_hub_connection_string>
Создание пользовательской функции выделения
В этом разделе вы создадите функцию Azure, которая реализует пользовательскую политику выделения. Эта функция определяет, в каком подразделении центра Интернета вещей должно быть зарегистрировано устройство, исходя из того, какую строку содержит идентификатор регистрации этого устройства: -contoso-tstrsd-007 или -contoso-hpsd-088. Она также задает начальное состояние двойника устройства в зависимости от того, является устройство тостером или тепловым насосом.
Войдите на портал Azure.
В поле поиска найдите и выберите приложение-функцию.
Выберите "Создать или создать приложение-функцию".
На странице "Создание приложения-функции " на вкладке "Основные сведения" введите следующие параметры для нового приложения-функции и нажмите кнопку "Просмотр и создание".
Параметр Значение Подписка Убедитесь, что выбрана подписка, в которой вы создали ресурсы для этого руководства. Группа ресурсов Выберите группу ресурсов, созданную при работе с предыдущим разделом. Значение по умолчанию, предоставленное в предыдущем разделе, — contoso-us-resource-group. Имя приложения-функции Укажите имя приложения-функции. Стек среды выполнения .СЕТЬ Версия Выберите любую версию модели в процессе. Регион Выберите ближайший регион. Примечание.
По умолчанию служба Application Insights активирована. Application Insights не требуется для этого руководства, но он может помочь вам понять и изучить проблемы, возникающие при пользовательских настройках выделения ресурсов. При желании Application Insights можно отключить. Для этого на вкладке Мониторинг выберите Нет для параметра Включить Application Insights.
На вкладке "Просмотр и создание" нажмите кнопку "Создать ", чтобы создать приложение-функцию.
Развертывание может занять несколько минут. По завершении выберите Перейдите к ресурсу.
На левой панели страницы обзора приложения-функции выберите "Создать функцию".
На странице "Создать функцию" выберите шаблон триггераHTTP и нажмите кнопку "Далее".
На вкладке "Сведения о шаблоне" выберите "Анонимный" в качестве уровня авторизации и нажмите кнопку "Создать".
Совет
При сохранении уровня авторизации в качестве Функции необходимо настроить регистрации DPS с помощью ключа функции API. Дополнительные сведения см. в разделе Функции Azure триггера HTTP.
Когда откроется функция HttpTrigger1, выберите "Код и тест" на левой панели. Этот выбор позволяет изменять код для функции. Файл кода run.csx должен быть открыт для редактирования.
Укажите необходимые пакеты NuGet. Чтобы создать первоначальный двойник устройства, функция пользовательского выделения использует классы, определенные в двух пакетах NuGet, которые нужно загрузить в среду внешнего размещения. Вы можете указать пакеты NuGet с помощью Функций Azure, используя файл function.proj. На этом шаге вы сохраняете и отправляете файл function.proj для необходимых сборок. Дополнительные сведения см. в разделе "Использование пакетов NuGet".
Скопируйте следующие строки в нужный текстовый редактор и сохраните файл на своем компьютере как function.proj.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Azure.Devices.Provisioning.Service" Version="1.18.1" /> <PackageReference Include="Microsoft.Azure.Devices.Shared" Version="1.30.1" /> </ItemGroup> </Project>Нажмите кнопку "Отправить", расположенную над редактором кода, чтобы отправить файл function.proj. После отправки выберите файл в редакторе кода с помощью раскрывающегося списка, чтобы проверить содержимое.
Выберите файл function.proj в редакторе кода и проверьте его содержимое. Если файл function.proj пуст, скопируйте предыдущие строки в файл и сохраните его. (Иногда отправка создает файл без отправки содержимого.)
Убедитесь, что в редакторе кода для HttpTrigger1 выбран файл run.csx. Замените код функции HttpTrigger1 приведенным ниже кодом и нажмите Сохранить:
#r "Newtonsoft.Json" using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json; using Microsoft.Azure.Devices.Shared; // For TwinCollection using Microsoft.Azure.Devices.Provisioning.Service; // For TwinState public static async Task<IActionResult> Run(HttpRequest req, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); // Get request body string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); dynamic data = JsonConvert.DeserializeObject(requestBody); log.LogInformation("Request.Body:..."); log.LogInformation(requestBody); // Get registration ID of the device string regId = data?.deviceRuntimeContext?.registrationId; string message = "Uncaught error"; bool fail = false; ResponseObj obj = new ResponseObj(); if (regId == null) { message = "Registration ID not provided for the device."; log.LogInformation("Registration ID : NULL"); fail = true; } else { string[] hubs = data?.linkedHubs?.ToObject<string[]>(); // Must have hubs selected on the enrollment if (hubs == null) { message = "No hub group defined for the enrollment."; log.LogInformation("linkedHubs : NULL"); fail = true; } else { // This is a Contoso Toaster Model 007 if (regId.Contains("-contoso-tstrsd-007")) { //Find the "-toasters-" IoT hub configured on the enrollment foreach(string hubString in hubs) { if (hubString.Contains("-toasters-")) obj.iotHubHostName = hubString; } if (obj.iotHubHostName == null) { message = "No toasters hub found for the enrollment."; log.LogInformation(message); fail = true; } else { // Specify the initial tags for the device. TwinCollection tags = new TwinCollection(); tags["deviceType"] = "toaster"; // Specify the initial desired properties for the device. TwinCollection properties = new TwinCollection(); properties["state"] = "ready"; properties["darknessSetting"] = "medium"; // Add the initial twin state to the response. TwinState twinState = new TwinState(tags, properties); obj.initialTwin = twinState; } } // This is a Contoso Heat pump Model 008 else if (regId.Contains("-contoso-hpsd-088")) { //Find the "-heatpumps-" IoT hub configured on the enrollment foreach(string hubString in hubs) { if (hubString.Contains("-heatpumps-")) obj.iotHubHostName = hubString; } if (obj.iotHubHostName == null) { message = "No heat pumps hub found for the enrollment."; log.LogInformation(message); fail = true; } else { // Specify the initial tags for the device. TwinCollection tags = new TwinCollection(); tags["deviceType"] = "heatpump"; // Specify the initial desired properties for the device. TwinCollection properties = new TwinCollection(); properties["state"] = "on"; properties["temperatureSetting"] = "65"; // Add the initial twin state to the response. TwinState twinState = new TwinState(tags, properties); obj.initialTwin = twinState; } } // Unrecognized device. else { fail = true; message = "Unrecognized device registration."; log.LogInformation("Unknown device registration"); } } } log.LogInformation("\nResponse"); log.LogInformation((obj.iotHubHostName != null) ? JsonConvert.SerializeObject(obj) : message); return (fail) ? new BadRequestObjectResult(message) : (ActionResult)new OkObjectResult(obj); } public class ResponseObj { public string iotHubHostName {get; set;} public TwinState initialTwin {get; set;} }
Создание регистрации
В этом разделе вы создадите новую группу регистрации, которая использует настраиваемую политику выделения. Для простоты в этом руководстве используется аттестация симметричного ключа при регистрации. В качестве более безопасного решения рекомендуется использовать аттестацию сертификатов X.509 с цепочкой доверия.
Войдите на портал Azure и перейдите к своему экземпляру службы подготовки устройств.
Выберите " Управление регистрациями" в разделе "Параметры " в меню навигации.
Выберите " Добавить группу регистрации".
На вкладке "Регистрация и подготовка" на странице "Добавление группы регистрации" укажите следующие сведения, чтобы настроить сведения о группе регистрации:
Поле Описание Свидетельство Выберите симметричный ключ в качестве механизма аттестации. Параметры симметричного ключа Установите флажок "Создать симметричные ключи" автоматически. Имя группы Введите contoso-custom-allocated-devices в качестве имени группы. Состояние подготовки Установите флажок "Включить эту регистрацию". Нажмите кнопку Далее: Центры Интернета вещей.
На вкладке Центров Интернета вещей на странице "Добавление группы регистрации" укажите следующие сведения, чтобы определить, для каких центров Интернета вещей группа регистрации может подготавливать устройства:
Поле Описание Целевые центры Интернета вещей Выберите один или несколько связанных центров Интернета вещей или добавьте новую ссылку на Центр Интернета вещей. Политика выделения Выберите custom (use Azure Function). Выберите функцию Azure, а затем следуйте инструкциям, чтобы выбрать функцию, созданную для этого руководства. Выберите Review + create (Просмотреть и создать).
На вкладке "Просмотр и создание " проверьте все значения и нажмите кнопку "Создать".
После сохранения регистрации снова откройте его и запишите первичный ключ. Для формирования ключей необходимо сначала сохранить регистрацию. Этот ключ используется для создания уникальных ключей устройств для имитированных устройств в следующем разделе.
Совет
При создании группы регистрации в портал Azure и выборе настраиваемой политики выделения портал Azure автоматически извлекает и внедряет ключ функции от вашего имени. Если вы создаете регистрацию программным способом, необходимо указать ключ в рамках шага создания.
Получение производных уникальных ключей
Устройства не используют первичный симметричный ключ группы регистрации напрямую. Вместо этого вы используете первичный ключ для получения ключа устройства для каждого устройства. В этом разделе описано создание двух уникальных ключей устройств. Один ключ используется для имитированного устройства тостера. Другой ключ используется для имитированного устройства теплового насоса.
Чтобы получить ключ устройства, используйте первичный ключ группы регистрации, который вы указали ранее для вычисления хэша HMAC-SHA256 идентификатора регистрации устройства для каждого устройства и преобразования результата в формат Base 64. Дополнительные сведения о создании производных ключей устройств с группами регистрации см. в разделе "Регистрация групп с симметричными ключами"аттестации симметричного ключа.
В этом руководстве используйте следующие два идентификатора регистрации устройств и вычислить ключ устройства для обоих устройств. Оба идентификатора регистрации содержат допустимый суффикс для работы с примером кода для пользовательской политики выделения:
- breakroom499-contoso-tstrsd-007
- mainbuilding167-contoso-hpsd-088
Расширение Интернета вещей для Azure CLI предоставляет команду iot dps enrollment-group compute-device-key для создания производных ключей устройств. Эту команду можно использовать в системах с ОС Windows или Linux с помощью PowerShell или оболочки Bash.
Замените значение аргумента --key значением первичного ключа из группы регистрации.
az iot dps enrollment-group compute-device-key --key <ENROLLMENT_GROUP_KEY> --registration-id breakroom499-contoso-tstrsd-007
az iot dps enrollment-group compute-device-key --key <ENROLLMENT_GROUP_KEY> --registration-id mainbuilding167-contoso-hpsd-088
Примечание.
Вы также можете указать идентификатор группы регистрации, а не симметричный ключ для iot dps enrollment-group compute-device-key команды. Например:
az iot dps enrollment-group compute-device-key -g contoso-us-resource-group --dps-name contoso-provisioning-service-1098 --enrollment-id contoso-custom-allocated-devices --registration-id breakroom499-contoso-tstrsd-007
Имитированные устройства используют производные ключи устройств с каждым идентификатором регистрации для выполнения аттестации симметричного ключа.
Подготовка среды разработки для пакета SDK Azure IoT для C
В этом разделе описано, как подготовить среду разработки, которая используется для сборки пакета SDK Azure IoT для C. В пакет SDK входит пример кода для имитированного устройства. Это симулированное устройство пытается произвести преднастройку в процессе начальной загрузки устройства.
В этом разделе описывается использование рабочей станции Windows. Для примера конфигурации Linux см. раздел "Создание региональных виртуальных машин Linux" учебного пособия: Подготовка к геолокационной задержке.
Скачайте систему сборки CMake.
Перед установкой
CMakeважно установить на компьютер необходимые компоненты Visual Studio (Visual Studio и рабочую нагрузку "Разработка классических приложений на C++"). После установки компонентов и проверки загрузки установите систему сборки CMake.Найдите имя тега для последнего выпуска пакета SDK.
Откройте командную строку или оболочку Git Bash. Выполните следующие команды, чтобы клонировать последний выпуск пакета SDK для устройств Интернета вещей Azure для репозитория GitHub. Используйте тег, найденный на предыдущем шаге, в качестве значения параметра
-b, например:lts_03_2025git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --initВыполнение этой операции может занять несколько минут.
Создайте подкаталог
cmakeв корневом каталоге репозитория Git и перейдите в эту папку. В каталогеazure-iot-sdk-cвыполните следующие команды:mkdir cmake cd cmakeВыполните приведенную ниже команду, чтобы создать версию пакета SDK для используемой клиентской платформы разработки. Эта команда также создает решение Visual Studio для имитированного устройства в каталоге
cmake.cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..Если
cmakeкомпилятор C++ не обнаружен, при выполнении команды могут возникнуть ошибки сборки. В этом случае попробуйте, выполнить эту команду в командной строке Visual Studio.После успешного создания последние несколько строк выходных данных выглядят следующим образом:
$ cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON .. -- Building for: Visual Studio 15 2017 -- Selecting Windows SDK version 10.0.16299.0 to target Windows 10.0.17134. -- The C compiler identification is MSVC 19.12.25835.0 -- The CXX compiler identification is MSVC 19.12.25835.0 ... -- Configuring done -- Generating done -- Build files have been written to: E:/IoT Testing/azure-iot-sdk-c/cmake
Имитация устройств
В этом разделе описано, как обновить пример подготовки с именем prov_dev_client_sample , расположенный в пакете SDK Для Интернета вещей Azure, который вы настроили ранее.
Пример кода имитирует последовательность загрузки устройства, которое отправляет запрос на подготовку в экземпляр службы подготовки устройств. Последовательность загрузки приводит к распознаванию и назначению устройства тостера в Центре Интернета вещей с помощью настраиваемой политики выделения.
На портале Azure выберите вкладку Обзор службы подготовки устройств и запишите значение области идентификатора.
В Visual Studio откройте файл решения azure_iot_sdks.sln, который был создан ранее в результате запуска CMake. Файл решения должен находиться в следующем расположении:
azure-iot-sdk-c\cmake\azure_iot_sdks.slnВ окне Обозреватель решений Visual Studio перейдите в папку Provision_Samples. Разверните пример проекта с именем prov_dev_client_sample. Разверните исходные файлы и откройте prov_dev_client_sample.c.
Найдите константу
id_scopeи замените ее значение ранее скопированным значением области идентификатора.static const char* id_scope = "0ne00002193";Найдите определение функции
main()в том же файле. Убедитесь,hsm_typeчто переменная имеетSECURE_DEVICE_TYPE_SYMMETRIC_KEYзначение, как показано в следующем примере:SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;В функции
main()найдите вызовProv_Device_Register_Device(). Непосредственно перед этим вызовом добавьте следующие строки кода, которые используются вProv_Device_Set_Provisioning_Payload()для передачи пользовательских полезных данных JSON во время подготовки. Эту пользовательскую полезную нагрузку можно использовать для предоставления дополнительных сведений вашим пользовательским функциям выделения памяти. Эти полезные данные также могут использоваться для передачи типа устройства без проверки идентификатора регистрации. Дополнительные сведения по отправке и получению пользовательских объемов данных с помощью DPS см. в разделе "Использование объемов данных устройств в пользовательском распределении".// An example custom payload const char* custom_json_payload = "{\"MyDeviceFirmwareVersion\":\"12.0.2.5\",\"MyDeviceProvisioningVersion\":\"1.0.0.0\"}"; prov_device_result = Prov_Device_Set_Provisioning_Payload(prov_device_handle, custom_json_payload); if (prov_device_result != PROV_DEVICE_RESULT_OK) { (void)printf("\r\nFailure setting provisioning payload: %s\r\n", MU_ENUM_TO_STRING(PROV_DEVICE_RESULT, prov_device_result)); }Щелкните правой кнопкой мыши проект prov_dev_client_sample и выберите "Задать в качестве запускаемого проекта".
Имитация устройства toaster Contoso
Чтобы имитировать устройство тостера, найдите вызов
prov_dev_set_symmetric_key_info()в prov_dev_client_sample.c , который закомментирован.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");Раскомментируйте вызов функции и замените значения заполнителей (включая угловые скобки) идентификатором регистрации тостера и производным ключом устройства, который был создан ранее. Ключевое значение JC8F96eayuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs=, приведенное в данном коде, дано только в качестве примера.
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("breakroom499-contoso-tstrsd-007", "JC8F96eayuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs=");Сохраните файл.
В меню Visual Studio выберите Отладка>Запуск без отладки, чтобы запустить решение. При появлении запроса перестроить проект щелкните Да, чтобы перестроить его перед запуском.
Следующий результат является примером успешной загрузки имитированного устройства toaster и его подключения к экземпляру службы подготовки для назначения центру Интернета вещей отдела тостеров с помощью пользовательской политики выделения.
Provisioning API Version: 1.8.0 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-toasters-hub-1098.azure-devices.net, deviceId: breakroom499-contoso-tstrsd-007 Press enter key to exit:Ниже приведен пример выходных данных ведения журнала из кода пользовательской функции выделения, работающего для устройства тостера. Обратите внимание, что для тостера успешно выбран центр. Также обратите внимание на
payloadсвойство, содержащее пользовательское содержимое JSON, которое вы добавили в код. Это содержимое доступно для использования вашим кодом в пределахdeviceRuntimeContext.Эти данные журнала можно просмотреть, щелкнув Журналы в коде функции на портале.
2022-08-03T20:34:41.178 [Information] Executing 'Functions.HttpTrigger1' (Reason='This function was programmatically called via the host APIs.', Id=12950752-6d75-4f41-844b-c253a6653d4f) 2022-08-03T20:34:41.340 [Information] C# HTTP trigger function processed a request. 2022-08-03T20:34:41.341 [Information] Request.Body:... 2022-08-03T20:34:41.341 [Information] {"enrollmentGroup":{"enrollmentGroupId":"contoso-custom-allocated-devices","attestation":{"type":"symmetricKey"},"capabilities":{"iotEdge":false},"etag":"\"0000f176-0000-0700-0000-62eaad1e0000\"","provisioningStatus":"enabled","reprovisionPolicy":{"updateHubAssignment":true,"migrateDeviceData":true},"createdDateTimeUtc":"2022-08-03T17:15:10.8464255Z","lastUpdatedDateTimeUtc":"2022-08-03T17:15:10.8464255Z","allocationPolicy":"custom","iotHubs":["contoso-toasters-hub-1098.azure-devices.net","contoso-heatpumps-hub-1098.azure-devices.net"],"customAllocationDefinition":{"webhookUrl":"https://contoso-function-app-1098.azurewebsites.net/api/HttpTrigger1?****","apiVersion":"2021-10-01"}},"deviceRuntimeContext":{"registrationId":"breakroom499-contoso-tstrsd-007","currentIotHubHostName":"contoso-toasters-hub-1098.azure-devices.net","currentDeviceId":"breakroom499-contoso-tstrsd-007","symmetricKey":{},"payload":{"MyDeviceFirmwareVersion":"12.0.2.5","MyDeviceProvisioningVersion":"1.0.0.0"}},"linkedHubs":["contoso-toasters-hub-1098.azure-devices.net","contoso-heatpumps-hub-1098.azure-devices.net"]} 2022-08-03T20:34:41.382 [Information] Response 2022-08-03T20:34:41.398 [Information] {"iotHubHostName":"contoso-toasters-hub-1098.azure-devices.net","initialTwin":{"properties":{"desired":{"state":"ready","darknessSetting":"medium"}},"tags":{"deviceType":"toaster"}}} 2022-08-03T20:34:41.399 [Information] Executed 'Functions.HttpTrigger1' (Succeeded, Id=12950752-6d75-4f41-844b-c253a6653d4f, Duration=227ms)
Имитация устройства heat pump Contoso
Чтобы имитировать устройство теплового насоса, обновите вызов
prov_dev_set_symmetric_key_info()в prov_dev_client_sample.c с помощью идентификатора регистрации теплового насоса и производного ключа устройства, созданного ранее. Ключевое значение 6uejA9PfkQgmYylj8Zerp3kbeVrGZ172YLa7VSnJzg= , показанное в следующем коде, также указано только в качестве примера.// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("mainbuilding167-contoso-hpsd-088", "6uejA9PfkQgmYylj8Zerp3kcbeVrGZ172YLa7VSnJzg=");Сохраните файл.
В меню Visual Studio выберите Отладка>Запуск без отладки, чтобы запустить решение. При появлении запроса перестроить проект щелкните Да, чтобы перестроить его перед запуском.
Следующий результат является примером успешной загрузки имитированного устройства heat pump и его подключения к экземпляру службы подготовки для назначения центру Интернета вещей отдела тепловых насосов с помощью пользовательской политики выделения.
Provisioning API Version: 1.8.0 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-heatpumps-hub-1098.azure-devices.net, deviceId: mainbuilding167-contoso-hpsd-088 Press enter key to exit:
Устранение неполадок пользовательских политик выделения
Ниже приведены ожидаемые сценарии и коды ошибок, которые могут возникнуть. Используйте эту таблицу при устранении неполадок в работе пользовательских политик выделения с функциями Azure.
| Сценарий | Результат регистрации из службы подготовки | Результаты пакета SDK для подготовки |
|---|---|---|
| Вебхук возвращает 200 OK, и параметр iotHubHostName установлен на действительное имя узла Центра Интернета вещей. | Состояние результата: "Назначено" | Пакет SDK возвращает PROV_DEVICE_RESULT_OK, а также сведения о центре |
| Веб-перехватчик возвращает 200 ОК с iotHubHostName, представленным в ответе, но установленным как пустая строка или null. | Состояние результата: "Сбой" Код ошибки: CustomAllocationIotHubNotSpecified (400208) |
Пакет SDK возвращает PROV_DEVICE_RESULT_HUB_NOT_SPECIFIED |
| Веб-перехватчик возвращает ответ "401 — недостаточно прав" | Состояние результата: "Сбой" Код ошибки: CustomAllocationUnauthorizedAccess (400209) |
Пакет SDK возвращает PROV_DEVICE_RESULT_UNAUTHORIZED |
| Была создана индивидуальная регистрация для отключения устройства | Состояние результата: "Отключено" | Пакет SDK возвращает PROV_DEVICE_RESULT_DISABLED |
| Веб-перехватчик возвращает код >ошибки = 429 | Оркестрация DPS повторяется несколько раз. Текущее состояние политики повтора: счетчик попыток: 10; - Начальный интервал: 1 с - Приращение: 9 с |
Пакет SDK игнорирует ошибку и отправляет повторный запрос статуса в указанное время. |
| Веб-перехватчик возвращает любой другой код состояния | Состояние результата: "Сбой" Код ошибки: CustomAllocationFailed (400207) |
Пакет SDK возвращает PROV_DEVICE_RESULT_DEV_AUTH_ERROR |
Очистка ресурсов
Если вы планируете продолжить работу с ресурсами, созданными в этом руководстве, их можно оставить. Если вы не планируете продолжать использовать ресурсы, выполните следующие действия, чтобы удалить все ресурсы, созданные в этом руководстве, чтобы избежать ненужных расходов.
В этом руководстве предполагается, что вы создали все ресурсы в этом руководстве, как описано в той же группе ресурсов с именем contoso-us-resource-group.
Внимание
Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали Центр Интернета вещей в существующей группе ресурсов, содержащей ресурсы, которые нужно сохранить, удалите только сам ресурс Центра Интернета вещей вместо удаления группы ресурсов.
Удаление группы ресурсов по имени.
Войдите в портал Azure и выберитеГруппы ресурсов.
Введите в текстовое поле Фильтровать по имени... имя вашей группы ресурсов: contoso-us-resource-group.
Справа от своей группы ресурсов в списке результатов щелкните ..., а затем выберите Удалить группу ресурсов.
Вам предлагается подтвердить удаление группы ресурсов. Снова введите имя группы ресурсов, которую необходимо удалить, и щелкните Удалить. Через некоторое время группа ресурсов и все ее ресурсы будут удалены.
Следующие шаги
Дополнительные сведения о пользовательских политиках выделения см. в статье