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.

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.

  1. 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.

  2. 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
    
  3. 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.

  4. 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.

  5. 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.

  6. 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
    
  7. 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.

  1. Přihlaste se k portálu Azure.

  2. Do vyhledávacího pole vyhledejte a vyberte Aplikaci funkcí.

  3. Vyberte Vytvořit nebo vytvořit aplikaci funkcí.

  4. 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 povolená Přehledy aplikace. Přehledy aplikace není pro účely tohoto kurzu 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 zakázat Přehledy aplikace tak, že vyberete kartu Monitorování a pak vyberete Možnost Ne pro povolení Přehledy aplikace.

    Snímek obrazovky znázorňující formulář Vytvořit aplikaci funkcí na webu Azure Portal

  5. Na kartě Revize a vytvoření vyberte Vytvořit a vytvořte aplikaci funkcí.

  6. Nasazení může trvat několik minut. Po dokončení vyberte Přejít k prostředku.

  7. V levém podokně stránky Přehled aplikace funkcí vyberte Vytvořit funkci.

    Snímek obrazovky znázorňující výběr možnosti vytvoření funkce na webu Azure Portal

  8. Na stránce Vytvořit funkci vyberte šablonu triggeru HTTP a pak vyberte Další.

  9. Na kartě Podrobnosti šablony vyberte Anonymní jako úroveň autorizace a pak vyberte Vytvořit.

    Snímek obrazovky znázorňující nastavení úrovně autorizace jako anonymní

    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.

  10. 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.

  11. 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.

    1. 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>
      
    2. 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.

    3. 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.)

  12. 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.

  1. Přihlaste se k webu Azure Portal a přejděte k instanci služby Device Provisioning.

  2. V části Nastavení navigační nabídky vyberte Spravovat registrace.

  3. Vyberte Přidat skupinu registrací.

  4. 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
    Osvědčení 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 .
  5. Vyberte Další: IoT Hubs.

  6. 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.
  7. Vyberte Zkontrolovat a vytvořit.

  8. 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.

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 iot dps enrollment-group compute-device-key příkaz 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 --keyprimá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 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.

  1. 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.

  2. Vyhledejte název značky pro nejnovější verzi sady SDK.

  3. 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čí.

  4. 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říkazy azure-iot-sdk-c :

    mkdir cmake
    cd cmake
    
  5. 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í.

  1. Na webu Azure Portal vyberte kartu Přehled služby Device Provisioning a poznamenejte si hodnotu Rozsah ID.

    Extrahování informací o koncovém bodu služby Device Provisioning z okna portálu

  2. 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.

  3. 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.

  4. Najděte konstantu id_scope a nahraďte její hodnotu hodnotou Rozsah ID, kterou jste si zkopírovali.

    static const char* id_scope = "0ne00002193";
    
  5. Ve stejném souboru vyhledejte definici funkce main(). Zkontrolujte, jestli je proměnná hsm_type nastavená na hodnotu SECURE_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;
    
  6. 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));
    }
    
  7. 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

  1. 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.

  2. 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ámci deviceRuntimeContextsouboru .

    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

  1. 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.

  2. 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:

  1. Přihlaste se k webu Azure Portal a potom vyberte Skupiny prostředků.

  2. Do textového pole Filtrovat podle názvu... zadejte název skupiny prostředků obsahující vaše prostředky contoso-us-resource-group.

  3. Napravo od vaší skupiny prostředků v seznamu výsledků vyberte ... a pak odstraňte skupinu prostředků.

  4. 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