Så här använder du anpassade allokeringsprinciper

En anpassad allokeringsprincip ger dig mer kontroll över hur enheter tilldelas till en IoT-hubb. Detta görs med hjälp av anpassad kod i en Azure-funktion för att tilldela enheter till en IoT-hubb. Enhetsetableringstjänsten anropar din Azure-funktionskod som tillhandahåller all relevant information om enheten och registreringen. Funktionskoden körs och returnerar den IoT-hubbinformation som används för att etablera enheten.

Genom att använda anpassade allokeringsprinciper definierar du dina egna allokeringsprinciper när principerna som tillhandahålls av enhetsetableringstjänsten inte uppfyller kraven i ditt scenario.

Du kanske till exempel vill undersöka certifikatet som en enhet använder under etableringen och tilldela enheten till en IoT-hubb baserat på en certifikategenskap. Eller så kanske du har information lagrad i en databas för dina enheter och behöver fråga databasen för att avgöra vilken IoT-hubb en enhet ska tilldelas.

Den här artikeln visar en anpassad allokeringsprincip med hjälp av en Azure-funktion som skrivits i C#. Två nya IoT-hubbar skapas som representerar en Contoso Toasters Division och en Contoso Heat Pumps Division. Enheter som begär etablering måste ha ett registrerings-ID med något av följande suffix som ska godkännas för etablering:

  • -contoso-tstrsd-007: Contoso Toasters Division
  • -contoso-hpsd-088: Contoso Heat Pumps Division

Enheterna etableras baserat på något av dessa nödvändiga suffix i registrerings-ID:t. Dessa enheter simuleras med hjälp av ett etableringsexempel som ingår i Azure IoT C SDK.

Du utför följande steg i den här artikeln:

  • Använd Azure CLI för att skapa två Contoso-divisionens IoT-hubbar (Contoso Toasters Division och Contoso Heat Pumps Division)
  • Skapa en ny gruppregistrering med hjälp av en Azure-funktion för den anpassade allokeringsprincipen
  • Skapa enhetsnycklar för två enhetssimuleringar.
  • Konfigurera utvecklingsmiljön för Azure IoT C SDK
  • Simulera enheterna och kontrollera att de har etablerats enligt exempelkoden i den anpassade allokeringsprincipen

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

Förutsättningar

Följande krav gäller för en Windows-utvecklingsmiljö. För Linux eller macOS, se lämpligt avsnitt i Förbereda din utvecklingsmiljö i SDK-dokumentationen.

Du kan använda antingen Azure Cloud Shell eller ett lokalt Azure CLI.

Skapa etableringstjänsten och två divisionella IoT-hubbar

I det här avsnittet använder du Azure Cloud Shell för att skapa en etableringstjänst och två IoT-hubbar som representerar Contoso Toasters Division och Contoso Heat Pumps-divisionen.

Tips

Kommandona som används i den här artikeln skapar etableringstjänsten och andra resurser på platsen USA, västra. Vi rekommenderar att du skapar dina resurser i den region som ligger närmast dig och som har stöd för Enhetsetableringstjänsten. Du kan se en lista med tillgängliga platser genom att köra kommandot az provider show --namespace Microsoft.Devices --query "resourceTypes[?resourceType=='ProvisioningServices'].locations | [0]" --out table, eller genom att gå till sidan Azure-status och söka efter ”enhetsetableringstjänst”. I kommandon kan platser anges antingen i ett ord- eller flerordsformat. till exempel: westus, USA, västra, USA, VÄSTRA osv. Värdet är inte skiftlägeskänsligt. Om du använder flera ord för att ange platsen skriver du värdet inom citattecken; till exempel -- location "West US".

  1. Använd Azure Cloud Shell för att skapa en resursgrupp med kommandot az group create. En Azure-resursgrupp är en logisk container där Azure-resurser distribueras och hanteras.

    I följande exempel skapas en resursgrupp med namnet contoso-us-resource-group i regionen westus . Vi rekommenderar att du använder den här gruppen för alla resurser som skapats i den här artikeln. Den här metoden gör det enklare att rensa när du är klar.

    az group create --name contoso-us-resource-group --location westus
    
  2. Använd Azure Cloud Shell för att skapa en enhetsetableringstjänst (DPS) med kommandot az iot dps create. Etableringstjänsten läggs till i contoso-us-resource-group.

    I följande exempel skapas en etableringstjänst med namnet contoso-provisioning-service-1098 på platsen westus . Du måste använda ett unikt tjänstnamn. Skapa ett eget suffix i tjänstnamnet i stället för 1098.

    az iot dps create --name contoso-provisioning-service-1098 --resource-group contoso-us-resource-group --location westus
    

    Det kan ta några minuter att slutföra det här kommandot.

  3. Använd Azure Cloud Shell för att skapa Contoso Toasters Division IoT Hub med kommandot az iot hub create. IoT-hubben läggs till i contoso-us-resource-group.

    I följande exempel skapas en IoT-hubb med namnet contoso-toasters-hub-1098 på platsen westus . Du måste använda ett unikt hubbnamn. Skapa ett eget suffix i hubbens namn i stället för 1098.

    Varning

    Exempelkoden för Azure-funktionen för den anpassade allokeringsprincipen kräver delsträngen -toasters- i hubbens namn. Se till att använda ett namn som innehåller de nödvändiga brödrostarna.

    az iot hub create --name contoso-toasters-hub-1098 --resource-group contoso-us-resource-group --location westus --sku S1
    

    Det kan ta några minuter att slutföra det här kommandot.

  4. Använd Azure Cloud Shell för att skapa Contoso Heat Pumps Division IoT Hub med kommandot az iot hub create. Den här IoT-hubben läggs också till i contoso-us-resource-group.

    I följande exempel skapas en IoT-hubb med namnet contoso-heatpumps-hub-1098 på platsen westus . Du måste använda ett unikt hubbnamn. Skapa ett eget suffix i hubbens namn i stället för 1098.

    Varning

    Exempelkoden för Azure-funktionen för den anpassade allokeringsprincipen kräver delsträngen -heatpumps- i hubbens namn. Se till att använda ett namn som innehåller de nödvändiga heatpumps-understrängarna.

    az iot hub create --name contoso-heatpumps-hub-1098 --resource-group contoso-us-resource-group --location westus --sku S1
    

    Det kan ta några minuter att slutföra det här kommandot.

  5. IoT-hubbarna måste vara länkade till DPS-resursen.

    Kör följande två kommandon för att hämta anslutningssträngarna för de hubbar som du nyss skapade. Ersätt hubbens resursnamn med de namn som du valde i varje kommando:

    hubToastersConnectionString=$(az iot hub connection-string show --hub-name contoso-toasters-hub-1098 --key primary --query connectionString -o tsv)
    hubHeatpumpsConnectionString=$(az iot hub connection-string show --hub-name contoso-heatpumps-hub-1098 --key primary --query connectionString -o tsv)
    

    Kör följande kommandon för att länka hubbarna till DPS-resursen. Ersätt DPS-resursnamnet med det namn som du valde i varje kommando:

    az iot dps linked-hub create --dps-name contoso-provisioning-service-1098 --resource-group contoso-us-resource-group --connection-string $hubToastersConnectionString --location westus
    az iot dps linked-hub create --dps-name contoso-provisioning-service-1098 --resource-group contoso-us-resource-group --connection-string $hubHeatpumpsConnectionString --location westus
    

Skapa den anpassade allokeringsfunktionen

I det här avsnittet skapar du en Azure-funktion som implementerar din anpassade allokeringsprincip. Den här funktionen avgör vilken divisionell IoT-hubb som en enhet ska registreras till baserat på om dess registrerings-ID innehåller strängen -contoso-tstrsd-007 eller -contoso-hpsd-088. Den anger också enhetstvillingens ursprungliga tillstånd baserat på om enheten är en brödrost eller en värmepump.

  1. Logga in på Azure-portalen. På startsidan väljer du + Skapa en resurs.

  2. I sökrutan Sök på Marketplace skriver du "Funktionsapp". I listrutan väljer du Funktionsapp och sedan Skapa.

  3. På sidan Skapa funktionsapp går du till fliken Grunder och anger följande inställningar för den nya funktionsappen och väljer Granska + skapa:

    Resursgrupp: Välj gruppen contoso-us-resource-för att hålla ihop alla resurser som skapats i den här artikeln.

    Funktionsappens namn: Ange ett unikt funktionsappnamn. I det här exemplet används contoso-function-app-1098.

    Publicera: Kontrollera att Koden är markerad.

    Körningsstack: Välj .NET Core i listrutan.

    Version: Välj 3.1 i listrutan.

    Region: Välj samma region som din resursgrupp. I det här exemplet används USA, västra.

    Anteckning

    Application Insights är aktiverat som standard. Application Insights är inte nödvändigt för den här artikeln, men det kan hjälpa dig att förstå och undersöka eventuella problem som uppstår med den anpassade allokeringen. Om du vill kan du inaktivera Application Insights genom att välja fliken Övervakning och sedan välja Nej för Aktivera Application Insights.

    Skapa en Azure-funktionsapp som värd för den anpassade allokeringsfunktionen

  4. På sidan Sammanfattning väljer du Skapa för att skapa funktionsappen. Distributionen kan ta flera minuter. När den är klar väljer du Gå till resurs.

  5. I den vänstra rutan på funktionsappens översiktssida klickar du på Funktioner och sedan på + Lägg till för att lägga till en ny funktion.

  6. På sidan Lägg till funktion klickar du på HTTP-utlösare och sedan på knappen Lägg till .

  7. På nästa sida klickar du på Koda + testa. På så sätt kan du redigera koden för funktionen med namnet HttpTrigger1. Kodfilen run.csx bör öppnas för redigering.

  8. Referera till nödvändiga NuGet-paket. För att skapa den första enhetstvillingen använder den anpassade allokeringsfunktionen klasser som definieras i två NuGet-paket som måste läsas in i värdmiljön. Med Azure Functions refereras NuGet-paket med hjälp av en function.proj-fil. I det här steget sparar och laddar du upp en function.proj-fil för de nödvändiga sammansättningarna. Mer information finns i Använda NuGet-paket med Azure Functions.

    1. Kopiera följande rader till valfri redigerare och spara filen på datorn som function.proj.

      <Project Sdk="Microsoft.NET.Sdk">  
          <PropertyGroup>  
              <TargetFramework>netstandard2.0</TargetFramework>  
          </PropertyGroup>  
          <ItemGroup>  
              <PackageReference Include="Microsoft.Azure.Devices.Provisioning.Service" Version="1.16.3" />
              <PackageReference Include="Microsoft.Azure.Devices.Shared" Version="1.27.0" />
          </ItemGroup>  
      </Project>
      
    2. Klicka på knappen Ladda upp ovanför kodredigeraren för att ladda upp filen function.proj . När du har laddat upp väljer du filen i kodredigeraren med hjälp av listrutan för att verifiera innehållet.

  9. Kontrollera att run.csx för HttpTrigger1 har valts i kodredigeraren. Ersätt koden för funktionen HttpTrigger1 med följande kod och välj Spara:

    #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;}
    }
    

Skapa registreringen

I det här avsnittet skapar du en ny registreringsgrupp som använder den anpassade allokeringsprincipen. För enkelhetens skull använder den här artikeln symmetrisk nyckelattestering med registreringen. För en säkrare lösning bör du överväga att använda X.509-certifikatattestering med en förtroendekedja.

  1. Öppna etableringstjänsten på Azure Portal.

  2. Välj Hantera registreringar i det vänstra fönstret och välj sedan knappen Lägg till registreringsgrupp överst på sidan.

  3. I Lägg till registreringsgrupp anger du följande information och väljer knappen Spara .

    Gruppnamn: Ange contoso-custom-allocated-devices.

    Attesteringstyp: Välj Symmetrisk nyckel.

    Generera nycklar automatiskt: Den här kryssrutan bör redan vara markerad.

    Välj hur du vill tilldela enheter till hubbar: Välj Anpassad (Använd Azure Function).

    Prenumeration: Välj den prenumeration där du skapade din Azure-funktion.

    Funktionsapp: Välj din funktionsapp efter namn. contoso-function-app-1098 användes i det här exemplet.

    Funktion: Välj funktionen HttpTrigger1 .

    Lägga till en anpassad allokeringsregistreringsgrupp för symmetrisk nyckelattestering

  4. När du har sparat registreringen öppnar du den igen och antecknar primärnyckeln. Du måste spara registreringen först för att nycklarna ska genereras. Den här nyckeln används för att generera unika enhetsnycklar för simulerade enheter senare.

Härled unika enhetsnycklar

I det här avsnittet skapar du två unika enhetsnycklar. En nyckel används för en simulerad popup-enhet. Den andra nyckeln används för en simulerad värmepumpenhet.

Om du vill generera enhetsnyckeln använder du den primärnyckel som du antecknade tidigare för att beräkna HMAC-SHA256 för enhetsregistrerings-ID:t för varje enhet och konvertera resultatet till Base64-format. Mer information om hur du skapar härledda enhetsnycklar med registreringsgrupper finns i avsnittet gruppregistreringar i Symmetrisk nyckelattestering.

I exemplet i den här artikeln använder du följande två enhetsregistrerings-ID:n och beräknar en enhetsnyckel för båda enheterna. Båda registrerings-ID:na har ett giltigt suffix som fungerar med exempelkoden för den anpassade allokeringsprincipen:

  • breakroom499-contoso-tstrsd-007
  • mainbuilding167-contoso-hpsd-088

Om du använder en Windows-baserad arbetsstation kan du använda PowerShell för att generera din härledda enhetsnyckel enligt följande exempel.

Ersätt värdet för KEY med den primärnyckel som du antecknade tidigare.

$KEY='oiK77Oy7rBw8YB6IS6ukRChAw+Yq6GC61RMrPLSTiOOtdI+XDu0LmLuNm11p+qv2I+adqGUdZHm46zXAQdZoOA=='

$REG_ID1='breakroom499-contoso-tstrsd-007'
$REG_ID2='mainbuilding167-contoso-hpsd-088'

$hmacsha256 = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha256.key = [Convert]::FromBase64String($KEY)
$sig1 = $hmacsha256.ComputeHash([Text.Encoding]::ASCII.GetBytes($REG_ID1))
$sig2 = $hmacsha256.ComputeHash([Text.Encoding]::ASCII.GetBytes($REG_ID2))
$derivedkey1 = [Convert]::ToBase64String($sig1)
$derivedkey2 = [Convert]::ToBase64String($sig2)

echo "`n`n$REG_ID1 : $derivedkey1`n$REG_ID2 : $derivedkey2`n`n"
breakroom499-contoso-tstrsd-007 : JC8F96eayuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs=
mainbuilding167-contoso-hpsd-088 : 6uejA9PfkQgmYylj8Zerp3kcbeVrGZ172YLa7VSnJzg=

De simulerade enheterna använder de härledda enhetsnycklarna med varje registrerings-ID för att utföra symmetrisk nyckelattestering.

Förbereda en utvecklingsmiljö för Azure IoT C SDK

I det här avsnittet förbereder du utvecklingsmiljön som används för att skapa Azure IoT C SDK. SDK innehåller exempelkoden för den simulerade enheten. Den här simulerade enheten försöker etablera under enhetens startsekvens.

Det här avsnittet är inriktat på en Windows-baserad arbetsstation. Ett Linux-exempel finns i konfigurationen av de virtuella datorerna i Självstudie: Etablera för geolatency.

  1. Ladda ned CMake-byggsystemet.

    Det är viktigt att förutsättningarna för Visual Studio (Visual Studio och arbetsbelastningen ”Desktop development with C++” (Skrivbordsutveckling med C++)) är installerade på datorn innan installationen av CMake påbörjas. När förutsättningarna är uppfyllda och nedladdningen har verifierats installerar du CMake-byggesystemet.

  2. Leta reda på taggnamnet för den senaste versionen av SDK:t.

  3. Öppna en kommandotolk eller Git Bash-gränssnittet. Kör följande kommandon för att klona den senaste versionen av Azure IoT C SDK GitHub-lagringsplatsen. Använd taggen som du hittade i föregående steg som värde för parametern -b :

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    Den här åtgärden kan förväntas ta flera minuter att slutföra.

  4. Skapa en cmake-underkatalog i rotkatalogen på git-lagringsplatsen och navigera till den mappen. Kör följande kommandon från azure-iot-sdk-c katalogen:

    mkdir cmake
    cd cmake
    
  5. Kör följande kommando som skapar en version av SDK:t som är specifik för plattformen i din utvecklingsklient. En Visual Studio-lösning för den simulerade enheten genereras i cmake-katalogen.

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    

    Om cmake du inte hittar C++-kompilatorn kan du få byggfel när du kör kommandot . Om det händer kan du prova att köra kommandot i Visual Studio-kommandotolken.

    När bygget är klart ser de sista utdataraderna ut ungefär som följande utdata:

    $ 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
    

Simulera enheterna

I det här avsnittet uppdaterar du ett etableringsexempel med namnet prov_dev_client_sample finns i Azure IoT C SDK som du konfigurerade tidigare.

Den här exempelkoden simulerar en enhetsstartsekvens som skickar etableringsbegäran till instansen av enhetsetableringstjänsten. Startsekvensen gör att popup-enheten identifieras och tilldelas till IoT-hubben med hjälp av den anpassade allokeringsprincipen.

  1. I Azure Portal väljer du fliken Översikt för enhetsetableringstjänsten och noterar värdet för ID-omfång.

    Extrahera information om enhetsetableringstjänstens slutpunkt från bladet på portalen

  2. I Visual Studio öppnar du lösningsfilen azure_iot_sdks.sln som genererades genom att köra CMake tidigare. Lösningsfilen bör vara på följande plats:

    azure-iot-sdk-c\cmake\azure_iot_sdks.sln
    
  3. Gå till mappen Provision_Samples i visual studiofönstret Solution Explorer. Expandera exempelprojektet med namnet prov_dev_client_sample. Expandera Källfiler och öppna prov_dev_client_sample.c.

  4. Hitta konstanten id_scope och ersätt värdet med ditt värde för ID-omfång som du kopierade tidigare.

    static const char* id_scope = "0ne00002193";
    
  5. Hitta definitionen för funktionen main() i samma fil. Kontrollera att variabeln hsm_type är inställd på SECURE_DEVICE_TYPE_SYMMETRIC_KEY enligt nedan:

    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. Högerklicka på prov_dev_client_sample-projektet och välj Ange som startprojekt.

Simulera Contoso-brödrosten

  1. Om du vill simulera brödrosten letar du reda på anropet till prov_dev_set_symmetric_key_info() i prov_dev_client_sample.c som har kommenterats ut.

    // Set the symmetric key if using they auth type
    //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
    

    Avkommentera funktionsanropet och ersätt platshållarvärdena (inklusive vinkelparenteserna) med registrerings-ID:t för brödrosten och den härledda enhetsnyckeln som du genererade tidigare. Nyckelvärdet JC8F96eayuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs= som visas nedan ges endast som exempel.

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("breakroom499-contoso-tstrsd-007", "JC8F96eayuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs=");
    

    Spara filen.

  2. På Visual Studio-menyn väljer du Felsöka>Starta utan felsökning för att köra lösningen. I prompten för att återskapa projektet väljer du Ja, för att återskapa projektet innan du kör.

    Följande utdata är ett exempel på att den simulerade popup-enheten startar och ansluter till etableringstjänstinstansen som ska tilldelas till popup-hubben i IoT-hubben av den anpassade allokeringsprincipen:

    Provisioning API Version: 1.3.6
    
    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:
    

Simulera Contosos värmepumpenhet

  1. Om du vill simulera värmepumpenheten uppdaterar du anropet till prov_dev_set_symmetric_key_info() i prov_dev_client_sample.c igen med registrerings-ID:t för värmepumpen och den härledda enhetsnyckeln som du genererade tidigare. Nyckelvärdet 6uejA9PfkQgmYylj8Zerp3kcbeVrGZ172YLa7VSnJzg= som visas nedan ges också bara som exempel.

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("mainbuilding167-contoso-hpsd-088", "6uejA9PfkQgmYylj8Zerp3kcbeVrGZ172YLa7VSnJzg=");
    

    Spara filen.

  2. På Visual Studio-menyn väljer du Felsöka>Starta utan felsökning för att köra lösningen. I prompten för att återskapa projektet väljer du Ja för att återskapa projektet innan du kör.

    Följande utdata är ett exempel på att den simulerade värmepumpenheten startar och ansluter till etableringstjänstinstansen som ska tilldelas contosos värmepumpar IoT Hub av den anpassade allokeringsprincipen:

    Provisioning API Version: 1.3.6
    
    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:
    

Felsöka anpassade allokeringsprinciper

I följande tabell visas förväntade scenarier och de resultatfelkoder som du kan få. Använd den här tabellen för att felsöka fel med anpassade allokeringsprinciper med dina Azure Functions.

Scenario Registreringsresultat från etableringstjänsten Etablerings-SDK-resultat
Webhooken returnerar 200 OK med "iotHubHostName" inställt på ett giltigt IoT Hub-värdnamn Resultatstatus: Tilldelad SDK returnerar PROV_DEVICE_RESULT_OK tillsammans med hubbinformation
Webhooken returnerar 200 OK med "iotHubHostName" i svaret, men inställd på en tom sträng eller null Resultatstatus: Misslyckades

Felkod: CustomAllocationIotHubNotSpecified (400208)
SDK returnerar PROV_DEVICE_RESULT_HUB_NOT_SPECIFIED
Webhooken returnerar 401 Obehörig Resultatstatus: Misslyckades

Felkod: CustomAllocationUnauthorizedAccess (400209)
SDK returnerar PROV_DEVICE_RESULT_UNAUTHORIZED
En enskild registrering skapades för att inaktivera enheten Resultatstatus: Inaktiverad SDK returnerar PROV_DEVICE_RESULT_DISABLED
Webhooken returnerar felkoden >= 429 DPS orkestrering försöker igen ett antal gånger. Återförsöksprincipen är för närvarande:

  – Antal återförsök: 10
  - Inledande intervall: 1:a
  - Inkrement: 9s
SDK ignorerar fel och skickar ett nytt get-statusmeddelande under den angivna tiden
Webhooken returnerar all annan statuskod Resultatstatus: Misslyckades

Felkod: CustomAllocationFailed (400207)
SDK returnerar PROV_DEVICE_RESULT_DEV_AUTH_ERROR

Rensa resurser

Om du planerar att fortsätta arbeta med de resurser som skapats i den här artikeln kan du lämna dem. Om du inte planerar att fortsätta använda resurserna kan du använda följande steg för att ta bort alla resurser som skapats i den här artikeln för att undvika onödiga avgifter.

Stegen här förutsätter att du har skapat alla resurser i den här artikeln enligt anvisningarna i samma resursgrupp med namnet contoso-us-resource-group.

Viktigt

Att ta bort en resursgrupp kan inte ångras. Resursgruppen och alla resurser som ingår i den tas bort permanent. Var noga så att du inte tar bort fel resursgrupp eller resurser av misstag. Om du har skapat IoT Hub:en inuti en befintlig resursgrupp som innehåller resurser som du vill behålla, ta bara bort själva IoT Hub-resursen i stället för att ta bort resursgruppen.

Så här tar du bort resursgruppen efter namn:

  1. Logga in på Azure Portal och välj Resursgrupper.

  2. I textrutan Filtrera efter namn... skriver du namnet på resursgruppen som innehåller dina resurser, contoso-us-resource-group.

  3. Till höger om resursgruppen i resultatlistan väljer du ... och sedan Ta bort resursgrupp.

  4. Du uppmanas att bekräfta borttagningen av resursgruppen. Skriv namnet på resursgruppen igen för att bekräfta och välj sedan Ta bort. Efter en liten stund tas resursgruppen och resurser som finns i den bort.

Nästa steg