Kurz: Použití vlastních zásad přidělování se službou Device Provisioning Service (DPS)
Vlastní zásady přidělování poskytují větší kontrolu nad tím, jak se zařízení přiřazují k vašim ioT Hubům. Pomocí vlastních zásad přidělování můžete definovat vlastní zásady přidělování, když zásady poskytované službou Azure IoT Hub Device Provisioning Service (DPS) nesplňují požadavky vašeho scénáře. Vlastní zásady přidělování se implementují ve webhooku hostovaném ve službě Azure Functions a konfigurují se na jedné nebo více jednotlivých registracích nebo skupinách registrací. Když se zařízení zaregistruje ve službě DPS pomocí nakonfigurované položky registrace, služba DPS zavolá webhook a zjistí, do kterého centra IoT se má zařízení zaregistrovat, a volitelně do jeho počátečního stavu. Další informace najdete v tématu Vysvětlení vlastních zásad přidělování.
Tento kurz ukazuje vlastní zásady přidělování pomocí funkce Azure Functions napsané v jazyce C#. Zařízení se přiřazují k jednomu ze dvou center IoT, které představují divize Contoso Toustovačs a divize heat čerpadel Společnosti Contoso. Zařízení, která požadují zřizování, musí mít ID registrace s jednou z následujících přípon, které se mají přijmout pro zřizování:
- -contoso-tstrsd-007 for the Contoso Toasters Division
- -contoso-hpsd-088 for the Contoso Heat Pump Division
Zařízení se simulují pomocí ukázky zřizování, která je součástí sady Azure IoT C SDK.
V tomto kurzu provedete následující kroky:
- Pomocí Azure CLI vytvořte instanci DPS a vytvořte a propojte dvě centra IoT divize Contoso (divize Contoso Toustovačs a Divize heat čerpadel Společnosti Contoso).
- Vytvořte funkci Azure, která implementuje vlastní zásady přidělování.
- Vytvoření nové skupiny registrací používá funkci Azure Functions pro vlastní zásady přidělování.
- Vytvořte symetrické klíče zařízení pro dvě simulovaná zařízení.
- Nastavte vývojové prostředí pro sadu Azure IoT C SDK.
- Simulujte zařízení a ověřte, že jsou zřízená podle ukázkového kódu ve vlastních zásadách přidělování.
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.
Požadavky
Následující předpoklady jsou pro vývojové prostředí Windows. Informace o Linuxu nebo macOS najdete v příslušné části Přípravy vývojového prostředí v dokumentaci k sadě SDK.
Sada Visual Studio 2022 s povolenou úlohou Vývoj desktopových aplikací pomocí jazyka C++ . Podporují se také sady Visual Studio 2015 a Visual Studio 2017.
Nainstalovaný Git. Další informace najdete ve staženém Gitu.
Nainstalované rozhraní Azure CLI Další informace najdete v tématu Postup instalace Azure CLI. Nebo můžete příkazy spustit v tomto kurzu v prostředí Bash v Azure Cloud Shellu.
Vytvoření služby zřizování a dvou center IoT
V této části použijete Azure Cloud Shell k vytvoření služby zřizování a dvou center IoT představujících divize Contoso Toasters a divize Contoso Heat Pump.
Nejprve nastavte proměnné prostředí v pracovním prostoru, aby se zjednodušily příkazy v tomto kurzu.
Názvy DPS a IoT Hubu musí být globálně jedinečné.
SUFFIX
Zástupný symbol nahraďte vlastní hodnotou.Kód funkce Azure, který vytvoříte později v tomto kurzu, také hledá centra IoT, která mají názvy
-toasters-
nebo-heatpumps-
jejich názvy. Pokud změníte navrhované hodnoty, nezapomeňte použít názvy obsahující požadované podřetětědce.#!/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"
Tip
Příkazy použité v tomto kurzu ve výchozím nastavení vytvářejí prostředky v umístění USA – západ. Doporučujeme vytvořit prostředky v nejbližší oblasti, která podporuje službu Device Provisioning. Seznam dostupných umístění můžete zobrazit tak, že přejdete na stránku stavu Azure a vyhledáte "Device Provisioning Service". V příkazech lze umístění zadat buď v jednom slově, nebo ve víceslovné podobě; Například: westus, USA – západ, USA – západ atd. Hodnota nerozlišuje malá a velká písmena.
Pomocí příkazu az group create vytvořte skupinu prostředků Azure. Skupina prostředků Azure je logický kontejner, ve kterém se nasazují a spravují prostředky Azure.
Následující příklad vytvoří skupinu prostředků. Doporučujeme použít jednu skupinu pro všechny prostředky vytvořené v tomto kurzu. Tento přístup usnadní vyčištění po dokončení.
az group create --name $RESOURCE_GROUP --location $LOCATION
Pomocí příkazu az iot dps create vytvořte instanci služby Device Provisioning Service (DPS). Služba zřizování se přidá do skupiny contoso-us-resource-group.
az iot dps create --name $DPS --resource-group $RESOURCE_GROUP --location $LOCATION
Dokončení tohoto příkazu může trvat několik minut.
Pomocí příkazu az iot hub create vytvořte ioT hub Contoso Toasters Division IoT Hub. Centrum IoT se přidá do skupiny contoso-us-resource-group.
az iot hub create --name $TOASTER_HUB --resource-group $RESOURCE_GROUP --location $LOCATION --sku S1
Dokončení tohoto příkazu může trvat několik minut.
Pomocí příkazu az iot hub create vytvořte IoT hub divize Heat Pumpy společnosti Contoso. Toto centrum IoT se také přidá do skupiny contoso-us-resource-group.
az iot hub create --name $HEATPUMP_HUB --resource-group $RESOURCE_GROUP --location $LOCATION --sku S1
Dokončení tohoto příkazu může trvat několik minut.
Spuštěním následujících dvou příkazů získejte připojovací řetězec pro centra, která jste vytvořili.
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
Spuštěním následujících příkazů propojte rozbočovače s prostředkem DPS. Zástupné symboly nahraďte připojovací řetězec centra z předchozího kroku.
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>
Vytvoření vlastní funkce přidělování
V této části vytvoříte funkci Azure, která implementuje vlastní zásady přidělování. Tato funkce rozhoduje, pro které dělení ioT Hubu se má zařízení zaregistrovat, na základě toho, jestli jeho ID registrace obsahuje řetězec -contoso-tstrsd-007 nebo -contoso-hpsd-088. Nastaví také počáteční stav dvojčete zařízení na základě toho, jestli je zařízení toustovačem nebo tepelným čerpadlem.
Přihlaste se k portálu Azure.
Do vyhledávacího pole vyhledejte a vyberte Aplikaci funkcí.
Vyberte Vytvořit nebo vytvořit aplikaci funkcí.
Na stránce Vytvoření aplikace funkcí na kartě Základy zadejte následující nastavení nové aplikace funkcí a vyberte Zkontrolovat a vytvořit:
Parametr Hodnota Předplatné Ujistěte se, že je vybrané předplatné, ve kterém jste vytvořili prostředky pro tento kurz. Skupina prostředků Vyberte skupinu prostředků, kterou jste vytvořili v předchozí části. Výchozí hodnota uvedená v předchozí části je contoso-us-resource-group. Název aplikace funkcí Zadejte název aplikace funkcí. Chcete nasadit kód nebo image kontejneru? Kód Zásobník modulu runtime .NET Verze Vyberte libovolnou verzi modelu v procesu. Oblast Vyberte oblast blízko od vás. Poznámka:
Ve výchozím nastavení je služba Application Insights povolená. Application Insights není pro tento kurz nutný, ale může vám pomoct pochopit a prozkoumat všechny problémy, se kterými se setkáte s vlastním přidělením. Pokud chcete, můžete Application Insights zakázat tak , že vyberete kartu Monitorování a pak vyberete Ne pro Povolení Application Insights.
Na kartě Revize a vytvoření vyberte Vytvořit a vytvořte aplikaci funkcí.
Nasazení může trvat několik minut. Po dokončení vyberte Přejít k prostředku.
V levém podokně stránky Přehled aplikace funkcí vyberte Vytvořit funkci.
Na stránce Vytvořit funkci vyberte šablonu triggeru HTTP a pak vyberte Další.
Na kartě Podrobnosti šablony vyberte Anonymní jako úroveň autorizace a pak vyberte Vytvořit.
Tip
Pokud úroveň autorizace zachováte jako funkci, budete muset nakonfigurovat registrace DPS pomocí klíče rozhraní API funkce. Další informace najdete v tématu Trigger HTTP služby Azure Functions.
Když se otevře funkce HttpTrigger1, vyberte v levém podokně kód + test. To vám umožní upravit kód funkce. Soubor kódu run.csx by se měl otevřít pro úpravy.
Odkaz na požadované balíčky NuGet K vytvoření počátečního dvojčete zařízení používá funkce vlastního přidělení třídy definované ve dvou balíčcích NuGet, které musí být načteny do hostitelského prostředí. U azure Functions se na balíčky NuGet odkazuje pomocí souboru function.proj . V tomto kroku uložíte a nahrajete soubor function.proj pro požadovaná sestavení. Další informace najdete v tématu Použití balíčků NuGet se službou Azure Functions.
Zkopírujte následující řádky do oblíbeného editoru a uložte soubor do počítače jako 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>
Vyberte tlačítko Nahrát umístěné nad editorem kódu a nahrajte soubor function.proj. Po nahrání vyberte soubor v editoru kódu pomocí rozevíracího seznamu a ověřte obsah.
V editoru kódu vyberte soubor function.proj a ověřte jeho obsah. Pokud je soubor function.proj prázdný, zkopírujte řádky uvedené výše do souboru a uložte ho. (Někdy se soubor vytvoří bez nahrání obsahu.)
Ujistěte se, že je v editoru kódu vybrán soubor run.csx pro HttpTrigger1 . Nahraďte kód funkce HttpTrigger1 následujícím kódem a vyberte Uložit:
#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;} }
Vytvoření registrace
V této části vytvoříte novou skupinu registrací, která používá vlastní zásady přidělování. Pro zjednodušení tento kurz používá ověření symetrického klíče s registrací. Pokud chcete bezpečnější řešení, zvažte použití ověření certifikátu X.509 s řetězem důvěryhodnosti.
Přihlaste se k webu Azure Portal a přejděte k instanci služby Device Provisioning.
V části Nastavení navigační nabídky vyberte Spravovat registrace.
Vyberte Přidat skupinu registrací.
Na kartě Registrace a zřizování na stránce Přidat skupinu registrací zadejte následující informace pro konfiguraci podrobností skupiny registrací:
Pole Popis Atestace Jako mechanismus ověření identity vyberte symetrický klíč. Nastavení symetrického klíče Zaškrtněte políčko Automaticky generovat symetrické klíče. Název skupiny Jako název skupiny zadejte contoso-custom-přidělená zařízení . Stav zřizování Zaškrtněte políčko Povolit tuto registraci . Vyberte Další: IoT Hubs.
Na kartě Centra IoT na stránce Přidat skupinu registrací zadejte následující informace, abyste zjistili, pro které služby IoT Hubs může skupina registrací zřídit zařízení:
Pole Popis Cílení center IoT Vyberte jedno nebo více propojených center IoT nebo přidejte nový odkaz na centrum IoT. Zásady přidělování Vyberte Vlastní (použijte funkci Azure Functions). Vyberte Funkci Azure a pak podle pokynů vyberte funkci, kterou jste vytvořili pro účely tohoto kurzu. Vyberte Zkontrolovat a vytvořit.
Na kartě Zkontrolovat a vytvořit ověřte všechny hodnoty a pak vyberte Vytvořit.
Po uložení registrace ji znovu otevřete a poznamenejte si primární klíč. Aby se klíče vygenerovaly, musíte nejprve uložit registraci. Tento klíč slouží ke generování jedinečných klíčů zařízení pro simulovaná zařízení v další části.
Tip
Když vytvoříte skupinu registrací na webu Azure Portal a vyberete vlastní zásady přidělování, Azure Portal automaticky načte a vloží klíč funkce vaším jménem. Pokud vytváříte registraci prostřednictvím kódu programu, musíte klíč zadat jako součást kroku vytvoření.
Odvodit jedinečné klíče zařízení
Zařízení přímo nepoužívají primární symetrický klíč skupiny registrací. Místo toho použijete primární klíč k odvození klíče zařízení pro každé zařízení. V této části vytvoříte dva jedinečné klíče zařízení. Jeden klíč se používá pro simulované zařízení toustovače. Druhý klíč se používá pro simulované zařízení tepelného čerpadla.
K odvození klíče zařízení použijete primární klíč skupiny registrací, kterou jste si poznamenali dříve, k výpočtu HMAC-SHA256 ID registrace zařízení pro každé zařízení a převod výsledku na formát Base 64. Další informace o vytváření odvozených klíčů zařízení se skupinami registrací najdete v části Registrace skupin ověření symetrického klíče.
V příkladu v tomto kurzu použijte následující dvě ID registrace zařízení a vypočítáte klíč zařízení pro obě zařízení. Obě ID registrace mají platnou příponu pro práci s ukázkovým kódem pro vlastní zásady přidělování:
- breakroom499-contoso-tstrsd-007
- mainbuilding167-contoso-hpsd-088
Rozšíření IoT pro Azure CLI poskytuje příkaz iot dps enrollment-group compute-device-key pro generování odvozených klíčů zařízení. Tento příkaz lze použít v systémech Windows nebo Linux, z PowerShellu nebo prostředí Bash.
Nahraďte hodnotu argumentu --key
primárním klíčem ze skupiny registrací.
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
Poznámka:
Do příkazu můžete také zadat ID skupiny registrací, nikoli symetrický klíč iot dps enrollment-group compute-device-key
. Příklad:
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
Simulovaná zařízení používají odvozené klíče zařízení s každým ID registrace k ověření symetrického klíče.
Příprava vývojového prostředí Azure IoT C SDK
V této části připravíte vývojové prostředí použité k sestavení sady Azure IoT C SDK. Sada SDK obsahuje ukázkový kód pro simulované zařízení. Toto simulované zařízení se pokusí zřídit během spouštěcí sekvence zařízení.
Tato část je zaměřená na pracovní stanici se systémem Windows. Příklad Linuxu najdete v tématu Nastavení virtuálních počítačů v kurzu: Zřízení geografické latence.
Stáhněte si systém sestavení CMake.
Před zahájením instalace je důležité, aby se na vašem počítači nainstalovaly požadavky sady Visual Studio (Visual Studio a úloha Vývoj desktopových aplikací pomocí jazyka
CMake
C++). Jakmile jsou požadované součásti k dispozici a stažený soubor je ověřený, nainstalujte sestavovací systém CMake.Vyhledejte název značky pro nejnovější verzi sady SDK.
Otevřete prostředí příkazového řádku nebo Git Bash. Spuštěním následujících příkazů naklonujte nejnovější verzi sady Azure IoT Device SDK pro úložiště GitHub pro C . Jako hodnotu
-b
parametru použijte značku, kterou jste našli v předchozím kroku, například:lts_01_2023
.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Buďte připravení na to, že může trvat i několik minut, než se tato operace dokončí.
V kořenovém adresáři úložiště Git vytvořte podadresář
cmake
a přejděte do této složky. Z adresáře spusťte následující příkazyazure-iot-sdk-c
:mkdir cmake cd cmake
Spuštěním následujícího příkazu sestavte verzi sady SDK určenou pro platformu vašeho vývojového klienta. V adresáři
cmake
se vygeneruje řešení Visual Studia pro simulované zařízení.cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..
Pokud
cmake
kompilátor jazyka C++ nenajdete, může se při spuštění příkazu zobrazit chyby sestavení. Pokud k tomu dojde, zkuste příkaz spustit v příkazovém řádku sady Visual Studio.Po úspěšném sestavení vypadá posledních několik výstupních řádků podobně jako v následujícím výstupu:
$ 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
Simulace zařízení
V této části aktualizujete ukázku zřizování s názvem prov_dev_client_sample umístěnou v sadě Azure IoT C SDK, kterou jste nastavili dříve.
Tento ukázkový kód simuluje spouštěcí sekvenci zařízení, která odešle požadavek na zřizování do vaší instance služby Device Provisioning. Spouštěcí sekvence způsobí, že zařízení toustovače bude rozpoznáno a přiřazeno k centru IoT pomocí vlastních zásad přidělování.
Na webu Azure Portal vyberte kartu Přehled služby Device Provisioning a poznamenejte si hodnotu Rozsah ID.
V sadě Visual Studio otevřete soubor řešení azure_iot_sdks.sln , který byl vygenerován spuštěním CMake dříve. Soubor řešení by měl být v následujícím umístění:
azure-iot-sdk-c\cmake\azure_iot_sdks.sln
.V okně Průzkumník řešení sady Visual Studio přejděte do složky Provision_Samples. Rozbalte ukázkový projekt s názvem prov_dev_client_sample. Rozbalte zdrojové soubory a otevřete prov_dev_client_sample.c.
Najděte konstantu
id_scope
a nahraďte její hodnotu hodnotou Rozsah ID, kterou jste si zkopírovali.static const char* id_scope = "0ne00002193";
Ve stejném souboru vyhledejte definici funkce
main()
. Zkontrolujte, jestli je proměnnáhsm_type
nastavená na hodnotuSECURE_DEVICE_TYPE_SYMMETRIC_KEY
, jak je vidět dole: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()
Ve funkci vyhledejte voláníProv_Device_Register_Device()
. Těsně před tímto voláním přidejte následující řádky kódu, které se používajíProv_Device_Set_Provisioning_Payload()
k předání vlastní datové části JSON během zřizování. Můžete ho použít k poskytnutí dalších informací vašim vlastním funkcím přidělování. Můžete ho také použít k předání typu zařízení místo zkoumání ID registrace. Další informace o odesílání a přijímání vlastních datových částí pomocí DPS najdete v tématu Jak přenášet datové části mezi zařízeními a 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)); }
Klikněte pravým tlačítkem myši na prov_dev_client_sample projekt a vyberte Nastavit jako spouštěný projekt.
Simulace zařízení toustovače společnosti Contoso
Chcete-li simulovat toustovač zařízení, vyhledejte volání
prov_dev_set_symmetric_key_info()
v prov_dev_client_sample.c , který je okomentován.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
Odkomentujte volání funkce a nahraďte zástupné hodnoty (včetně hranatých závorek) ID registrace toustovače a odvozeným klíčem zařízení, který jste vygenerovali dříve. Hodnota klíče JC8F96eyuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs= zobrazená níže je uvedena pouze jako příklad.
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("breakroom499-contoso-tstrsd-007", "JC8F96eayuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs=");
Uložte soubor.
V nabídce sady Visual Studio vyberte Ladit>Spustit bez ladění a spusťte řešení. Po zobrazení výzvy k opětovnému sestavení projektu vyberte Ano, aby se projekt před spuštěním znovu sestavil.
Následující výstup je příkladem úspěšného spuštění simulovaného zařízení toustovače a připojení k instanci služby zřizování, která se má přiřadit k toustovačům IoT Hubu vlastními zásadami přidělování:
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:
Následující výstup je příklad protokolování výstupu z vlastního kódu funkce přidělení spuštěného pro zařízení toustovač. Všimněte si, že rozbočovač je pro zařízení toustovač úspěšně vybraný. Všimněte si
payload
také vlastnosti, která obsahuje vlastní obsah JSON, který jste přidali do kódu. To je k dispozici pro váš kód, který se má použít v rámcideviceRuntimeContext
souboru .Toto protokolování je k dispozici kliknutím na Protokoly pod kódem funkce na portálu:
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)
Simulace zařízení tepelného čerpadla Společnosti Contoso
Chcete-li simulovat zařízení tepelného čerpadla, aktualizujte volání
prov_dev_set_symmetric_key_info()
v prov_dev_client_sample.c znovu id registrace tepelného čerpadla a odvozený klíč zařízení, který jste vygenerovali dříve. Hodnota klíče 6uejA9PfkQgmYylj8Zerp3kcbeVrGZ172YLa7VSnJzg= zobrazená níže je uvedena pouze jako příklad.// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("mainbuilding167-contoso-hpsd-088", "6uejA9PfkQgmYylj8Zerp3kcbeVrGZ172YLa7VSnJzg=");
Uložte soubor.
V nabídce sady Visual Studio vyberte Ladit>Spustit bez ladění a spusťte řešení. Po zobrazení výzvy k opětovnému sestavení projektu vyberte Možnost Ano , aby se projekt před spuštěním znovu sestavil.
Následující výstup je příkladem úspěšného spuštění simulovaného zařízení tepelného čerpadla a připojení k instanci služby zřizování, která se má přiřadit k centru IoT Hubu heat čerpadel Společnosti Contoso vlastními zásadami přidělování:
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:
Řešení potíží se zásadami vlastního přidělení
Následující tabulka uvádí očekávané scénáře a kódy chyb výsledků, které se můžou zobrazit. Tato tabulka vám pomůže při řešení potíží se selháními vlastních zásad přidělování ve službě Azure Functions.
Scénář | Výsledek registrace ze služby zřizování | Výsledky zřizování sady SDK |
---|---|---|
Webhook vrátí hodnotu 200 OK s chybou iotHubHostName nastavenou na platný název hostitele centra IoT. | Stav výsledku: Přiřazeno | Sada SDK vrací PROV_DEVICE_RESULT_OK spolu s informacemi o centru. |
Webhook vrátí v odpovědi hodnotu 200 OK s hodnotou iotHubHostName, ale nastavenou na prázdný řetězec nebo hodnotu null. | Stav výsledku: Selhání Kód chyby: CustomAllocationIotHubNotSpecified (400208) |
Sada SDK vrací PROV_DEVICE_RESULT_HUB_NOT_SPECIFIED |
Webhook vrátí chybu 401 Neautorizováno. | Stav výsledku: Selhání Kód chyby: CustomAllocationUnauthorizedAccess (400209) |
Sada SDK vrací PROV_DEVICE_RESULT_UNAUTHORIZED |
Byla vytvořena individuální registrace pro zakázání zařízení. | Stav výsledku: Zakázáno | Sada SDK vrací PROV_DEVICE_RESULT_DISABLED |
Webhook vrátí kód >chyby = 429 | Orchestrace DPS se bude opakovat několikrát. Zásady opakování jsou aktuálně: - Počet opakování: 10 - Počáteční interval: 1 s - Přírůstek: 9 s |
Sada SDK bude ignorovat chybu a v zadaném čase odešle další chybovou zprávu o stavu. |
Webhook vrátí jakýkoli jiný stavový kód. | Stav výsledku: Selhání Kód chyby: CustomAllocationFailed (400207) |
Sada SDK vrací PROV_DEVICE_RESULT_DEV_AUTH_ERROR |
Vyčištění prostředků
Pokud chcete pokračovat v práci s prostředky vytvořenými v tomto kurzu, můžete je nechat. Pokud nechcete prostředky dál používat, pomocí následujících kroků odstraňte všechny prostředky vytvořené v tomto kurzu, abyste se vyhnuli zbytečným poplatkům.
Tento postup předpokládá, že jste vytvořili všechny prostředky v tomto kurzu podle pokynů ve stejné skupině prostředků s názvem contoso-us-resource-group.
Důležité
Odstranění skupiny prostředků je nevratné. Skupina prostředků i všechny prostředky v ní obsažené se trvale odstraní. Ujistěte se, že nechtěně neodstraníte nesprávnou skupinu prostředků nebo prostředky. Pokud jste službu IoT Hub vytvořili uvnitř existující skupiny prostředků obsahující prostředky, které chcete zachovat, odstraňte místo skupiny prostředků pouze samotný prostředek služby IoT.
Odstranění skupiny prostředků podle názvu:
Přihlaste se k webu Azure Portal a potom vyberte Skupiny prostředků.
Do textového pole Filtrovat podle názvu... zadejte název skupiny prostředků obsahující vaše prostředky contoso-us-resource-group.
Napravo od vaší skupiny prostředků v seznamu výsledků vyberte ... a pak odstraňte skupinu prostředků.
Zobrazí se výzva k potvrzení odstranění skupiny prostředků. Znovu zadejte název skupiny prostředků, abyste ji potvrdili, a pak vyberte Odstranit. Po chvíli bude skupina prostředků včetně všech obsažených prostředků odstraněná.
Další kroky
Další informace o vlastních zásadách přidělování najdete v tématu