Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az egyéni foglalási szabályzatokkal jobban szabályozhatja, hogy az eszközök hogyan legyenek hozzárendelve az IoT Hubokhoz. Egyéni foglalási szabályzatokkal saját foglalási szabályzatokat határozhat meg, ha az Azure IoT Hub Device Provisioning Service (DPS) által biztosított szabályzatok nem felelnek meg a forgatókönyv követelményeinek. Az egyéni foglalási szabályzatokat az Azure Functionsben üzemeltetett webhookban implementáljuk, és egy vagy több egyéni regisztrációra és/vagy regisztrációs csoportra konfiguráljuk. Amikor egy eszköz egy konfigurált regisztrációs bejegyzéssel regisztrál a DPS-ben, a DPS meghívja a webhookot, hogy megtudja, melyik IoT Hubra kell regisztrálni az eszközt, és szükség esetén a kezdeti állapotára. További információ: Egyéni foglalási szabályzatok megismerése az Azure IoT Hub Device Provisioning Service szolgáltatással.
Ez az oktatóanyag egy egyéni foglalási szabályzatot mutat be egy C# nyelven írt Azure-függvény használatával. Az eszközök két IoT Hub egyikéhez vannak rendelve, amelyek a Contoso Toasters divíziót és a Contoso hőszivattyús részleget képviselik. A kiépítést kérő eszközöknek olyan regisztrációs azonosítóval kell rendelkezniük, amely a következő utótagok egyikével rendelkezik a kiépítéshez:
- -contoso-tstrsd-007 a Contoso Kenyérpirítók Divízióhoz
- -contoso-hpsd-088 a Contoso Hőszivattyú Részleg számára
Az eszközök az Azure IoT C SDK-ban található kiépítési mintával szimulálhatók.
Ebben az oktatóanyagban a következő műveleteket hajtja végre:
- Az Azure CLI használatával hozzon létre egy DPS-példányt, és hozzon létre és csatoljon hozzá két Contoso divízió IoT-központot (Contoso Toasters Division és Contoso Heat Pumps Division).
- Hozzon létre egy Azure-függvényt, amely implementálja az egyéni foglalási szabályzatot.
- Hozzon létre egy új regisztrációs csoportot, amely az Azure-függvényt használja az egyéni foglalási szabályzathoz.
- Eszköz szimmetrikus kulcsainak létrehozása két szimulált eszközhöz.
- Az Azure IoT C SDK fejlesztési környezetének beállítása.
- Szimulálja az eszközöket, és ellenőrizze, hogy ki vannak-e építve az egyéni foglalási szabályzat példakódjának megfelelően.
Ha még nem rendelkezik Azure-fiókkal, első lépésként hozzon létre egy ingyenes fiókot.
Előfeltételek
Az alábbi előfeltételek a Windows fejlesztői környezethez tartoznak. Linux vagy macOS esetén lásd a fejlesztési környezet előkészítése című szakaszt az SDK dokumentációjában.
A Visual Studio 2022-ben engedélyezve van a "C++-os asztali fejlesztés" számítási feladat. A Visual Studio 2015 és a Visual Studio 2017 is támogatott.
A Git telepítve van. További információ: Git-letöltések.
Telepített Azure CLI. További információ: Az Azure CLI telepítése. Vagy futtathatja a parancsokat ebben az oktatóanyagban az Azure Cloud Shell Bash-környezetében.
A kiépítési szolgáltatás és két IoT Hub létrehozása
Ebben a szakaszban az Azure Cloud Shell használatával hoz létre egy kiépítési szolgáltatást és két IoT Hubot, amelyek a Contoso Kenyérpirítók divíziót és a Contoso Hőszivattyúk divíziót képviselik.
Először állítson be környezeti változókat a munkaterületen, hogy egyszerűsítse az oktatóanyag parancsait.
A DPS- és IoT Hub-neveknek globálisan egyedinek kell lenniük. Cserélje le a
SUFFIXhelyőrzőt a saját értékére.Emellett az oktatóanyag későbbi részében létrehozott Azure-függvénykód olyan IoT-központokat is keres, amelyek vagy
-toasters--heatpumps-a nevükben szerepelnek. Ha módosítja a javasolt értékeket, mindenképpen használjon olyan neveket, amelyek tartalmazzák a szükséges részstringeket.#!/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"Tipp.
Az oktatóanyagban használt parancsok alapértelmezés szerint az USA nyugati régiójában hoznak létre erőforrásokat. Javasoljuk, hogy az erőforrásokat az Önhöz legközelebbi régióban hozza létre, amely támogatja a Device Provisioning Service szolgáltatást. Az elérhető helyek listáját az Azure állapotlapján tekintheti meg, és a "Device Provisioning Service" kifejezésre kereshet. A parancsokban a helyszínek megadhatók egy- vagy több szóból álló formátumban is; például: westus, West US, WEST US stb. Az érték nem érzékeny a kis- és nagybetűkre.
Az az group create paranccsal hozzon létre egy Azure-erőforráscsoportot. Az Azure-erőforráscsoport olyan logikai tároló, amelybe a rendszer üzembe helyezi és kezeli az Azure-erőforrásokat.
Az alábbi példa létrehoz egy erőforráscsoportot. Javasoljuk, hogy egyetlen csoportot használjon az oktatóanyagban létrehozott összes erőforráshoz. Ez a módszer megkönnyíti a tisztítást a befejezés után.
az group create --name $RESOURCE_GROUP --location $LOCATIONAz az iot dps create paranccsal hozza létre a Device Provisioning Service (DPS) egy példányát. A kiépítési szolgáltatás hozzá lesz adva a contoso-us-resource-grouphoz.
az iot dps create --name $DPS --resource-group $RESOURCE_GROUP --location $LOCATIONA parancs végrehajtása eltarthat néhány percig.
Az az iot hub create parancsával hozza létre a Contoso Toasters Division IoT Hubot. Az IoT Hub hozzá lesz adva a contoso-us-resource-grouphoz.
az iot hub create --name $TOASTER_HUB --resource-group $RESOURCE_GROUP --location $LOCATION --sku S1A parancs végrehajtása eltarthat néhány percig.
Az az iot hub create parancsával hozza létre a Contoso Hőszivattyúk Divízió IoT Hubot. Ez az IoT Hub a contoso-us-resource-grouphoz is hozzáadódik.
az iot hub create --name $HEATPUMP_HUB --resource-group $RESOURCE_GROUP --location $LOCATION --sku S1A parancs végrehajtása eltarthat néhány percig.
Futtassa az alábbi két parancsot a létrehozott központok kapcsolati sztring lekéréséhez.
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 tsvFuttassa az alábbi parancsokat a központok DPS-erőforráshoz való csatolásához. Cserélje le a helyőrzőket az előző lépésben szereplő központi kapcsolati sztring.
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>
Az egyéni foglalási függvény létrehozása
Ebben a szakaszban létrehoz egy Azure-függvényt, amely implementálja az egyéni foglalási szabályzatot. Ez a függvény dönti el, hogy az eszköz melyik osztási IoT Hubra legyen regisztrálva annak alapján, hogy a regisztrációs azonosítója tartalmazza-e a -contoso-tstrsd-007 vagy a -contoso-hpsd-088 sztringet. Az ikereszköz kezdeti állapotát is beállítja attól függően, hogy az eszköz kenyérpirító vagy hőszivattyú.
Jelentkezzen be az Azure Portalra.
A keresőmezőben keresse meg és válassza a Függvényalkalmazás lehetőséget.
Válassza a Függvényalkalmazás létrehozása vagy létrehozása lehetőséget.
A Függvényalkalmazás létrehozása lap Alapszintű beállítások lapján adja meg az új függvényalkalmazás alábbi beállításait, és válassza a Véleményezés + létrehozás lehetőséget:
Paraméter Érték Előfizetés Győződjön meg arról, hogy az oktatóanyag erőforrásait létrehozó előfizetés ki van választva. Erőforráscsoport Válassza ki az előző szakaszban létrehozott erőforráscsoportot. Az előző szakaszban megadott alapértelmezett érték a contoso-us-resource-group. Függvényalkalmazás neve Adjon nevet a függvényalkalmazásnak. Futtatókörnyezeti verem .HÁLÓ Verzió Válasszon ki egy folyamaton belüli modellverziót . Régió Válasszon ki egy Önhöz közeli régiót. Feljegyzés
Alapértelmezés szerint az Application Insights engedélyezve van. Az Application Insights nem szükséges ehhez az oktatóanyaghoz, de segíthet megérteni és kivizsgálni az egyéni foglalással kapcsolatos problémákat. Ha szeretné, letilthatja az Application Insights szolgáltatást a Figyelés fülre kattintva, majd válassza a Nem lehetőséget az Application Insights engedélyezéséhez.
A Véleményezés + létrehozás lapon válassza a Létrehozás lehetőséget a függvényalkalmazás létrehozásához.
Az üzembe helyezés több percet is igénybe vehet. Ha befejeződött, válassza az Ugrás az erőforrásra lehetőséget.
A függvényalkalmazás Áttekintés lapjának bal oldali ablaktábláján válassza a Függvény létrehozása lehetőséget.
A Függvény létrehozása lapon válassza a HTTP-eseményindító sablont, majd kattintson a Tovább gombra.
A Sablon részletei lapon válassza a Névtelen lehetőséget engedélyezési szintként, majd válassza a Létrehozás lehetőséget.
Tipp.
Ha az engedélyezési szintet függvényként tartja, akkor a DPS-regisztrációkat a függvény API-kulcsával kell konfigurálnia. További információ: Azure Functions HTTP-eseményindító.
Amikor megnyílik a HttpTrigger1 függvény, válassza a Kód + Teszt lehetőséget a bal oldali panelen. Ez a kijelölés lehetővé teszi a függvény kódjának szerkesztését. A run.csx kódfájlt meg kell nyitni szerkesztésre.
Referencia szükséges NuGet-csomagokra. A kezdeti ikereszköz létrehozásához az egyéni foglalási függvény két NuGet-csomagban definiált osztályokat használ, amelyeket be kell tölteni az üzemeltetési környezetbe. Az Azure Functionsben a NuGet-csomagokra egy function.proj fájl hivatkozik. Ebben a lépésben egy function.proj fájlt menthet és tölthet fel a szükséges szerelvényekhez. További információ: A NuGet-csomagok használata.
Másolja a következő sorokat a kedvenc szerkesztőbe, és mentse a fájlt a számítógépre function.proj fájlként.
<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>A függvény.proj fájl feltöltéséhez kattintson a kódszerkesztő fölött található Feltöltés gombra. A feltöltés után válassza ki a fájlt a kódszerkesztőben a legördülő listával a tartalom ellenőrzéséhez.
Válassza ki a function.proj fájlt a kódszerkesztőben, és ellenőrizze annak tartalmát. Ha a function.proj fájl üres, másolja az előző sorokat a fájlba, és mentse. (Néha a feltöltés a tartalom feltöltése nélkül hozza létre a fájlt.)
Győződjön meg arról, hogy a HttpTrigger1 run.csx fájlja ki van jelölve a kódszerkesztőben. Cserélje le a HttpTrigger1 függvény kódját a következő kódra, és válassza a Mentés lehetőséget:
#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;} }
A regisztráció létrehozása
Ebben a szakaszban egy új regisztrációs csoportot hoz létre, amely az egyéni foglalási szabályzatot használja. Az egyszerűség kedvéért ez az oktatóanyag szimmetrikus kulcsigazolást használ a regisztrációval. A biztonságosabb megoldás érdekében fontolja meg az X.509-tanúsítványigazolás használatát egy bizalmi lánccal.
Jelentkezzen be az Azure Portalra , és keresse meg a Device Provisioning Service-példányt.
A navigációs menü Beállítások szakaszában válassza a Regisztrációk kezelése lehetőséget.
Válassza a Regisztrációs csoport hozzáadása lehetőséget.
A Regisztrációs csoport hozzáadása lap Regisztráció + kiépítés lapján adja meg a következő információkat a regisztrációs csoport adatainak konfigurálásához:
Mező Leírás Igazolás Válassza ki a szimmetrikus kulcsot az igazolási mechanizmusként. Szimmetrikus kulcsbeállítások Jelölje be a Szimmetrikus kulcsok automatikus létrehozása jelölőnégyzetet. Csoport neve Csoportnévként adja meg a contoso-custom-allocated-devices nevet. Kiépítés állapota Jelölje be a Regisztráció engedélyezése jelölőnégyzetet. Válassza a Tovább: IoT Hubs lehetőséget.
A Regisztrációs csoport hozzáadása lap IoT Hubs lapján adja meg az alábbi információkat annak megállapításához, hogy a regisztrációs csoport mely IoT Hubok számára építhet ki eszközöket:
Mező Leírás Cél IoT Hubok Válasszon ki egy vagy több csatolt IoT Hubot, vagy adjon hozzá egy új hivatkozást egy IoT Hubhoz. Foglalási szabályzat Válassza az Egyéni (az Azure-függvény használata) lehetőséget. Válassza az Azure-függvény kiválasztása lehetőséget, majd kövesse az utasításokat az oktatóanyaghoz létrehozott függvény kiválasztásához. Válassza az Áttekintés + létrehozás lehetőséget.
A Véleményezés + létrehozás lapon ellenőrizze az összes értéket, majd válassza a Létrehozás lehetőséget.
A regisztráció mentése után nyissa meg újra, és jegyezze fel az elsődleges kulcsot. A kulcsok létrehozásához először mentenie kell a regisztrációt. Ez a kulcs a szimulált eszközök egyedi eszközkulcsainak létrehozásához használható a következő szakaszban.
Tipp.
Amikor létrehoz egy regisztrációs csoportot az Azure Portalon, és kiválaszt egy egyéni foglalási szabályzatot, az Azure Portal automatikusan lekéri és beágyazza a függvénykulcsot az Ön nevében. Ha programozott módon hoz létre regisztrációt, a létrehozási lépés részeként meg kell adnia a kulcsot.
Egyedi eszközkulcsok levezetése
Az eszközök nem használják közvetlenül a regisztrációs csoport elsődleges szimmetrikus kulcsát. Ehelyett az elsődleges kulccsal kell levezetni az eszközkulcsot az egyes eszközökhöz. Ebben a szakaszban két egyedi eszközkulcsot hoz létre. Egy kulccsal szimulált kenyérpirító eszköz használható. A másik kulcsot egy szimulált hőszivattyús eszközhöz használják.
Az eszközkulcs származtatásához a korábban feljegyzett regisztrációs csoport elsődleges kulcsával számítja ki az egyes eszközökhöz tartozó eszközregisztrációs azonosító HMAC-SHA256 kivonatát, és konvertálja az eredményt Base 64 formátumba. A származtatott eszközkulcsok regisztrációs csoportokkal való létrehozásáról további információt a Szimmetrikus kulcsigazolásszimmetrikus kulcsokkal szakaszában talál.
Az oktatóanyagban szereplő példához használja az alábbi két eszközregisztrációs azonosítót, és számítsa ki az eszközkulcsot mindkét eszközhöz. Mindkét regisztrációs azonosító érvényes utótaggal rendelkezik az egyéni foglalási szabályzat példakódjának használatához:
- breakroom499-contoso-tstrsd-007
- főépület167-contoso-hpsd-088
Az Azure CLI IoT-bővítménye biztosítja az iot dps enrollment-group compute-device-key parancsot a származtatott eszközkulcsok létrehozásához. Ez a parancs Windows- vagy Linux-rendszereken használható PowerShell- vagy Bash-rendszerhéjból.
Cserélje le az argumentum értékét --key a regisztrációs csoport elsődleges kulcsára .
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
Feljegyzés
A parancshoz a szimmetrikus kulcs helyett a regisztrációs csoport azonosítóját iot dps enrollment-group compute-device-key is megadhatja. Példa:
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
A szimulált eszközök a származtatott eszközkulcsokat használják az egyes regisztrációs azonosítókkal a szimmetrikus kulcsigazolás végrehajtásához.
Azure IoT C SDK fejlesztői környezet előkészítése
Ebben a szakaszban előkészíti az Azure IoT C SDK létrehozásához használt fejlesztői környezetet. Az SDK tartalmazza a szimulált eszköz mintakódját. Ez a szimulált eszköz megpróbálja telepíteni az eszközt a rendszerindítási folyamat során.
Ez a szakasz egy Windows-alapú munkaállomásra irányul. Linux-példaként tekintse meg az oktatóanyag regionális Linux rendszerű virtuális gépek létrehozása című szakaszát: Geokésésítés.
Töltse le a CMake buildrendszert.
A telepítés megkezdése előtt. Ha az előfeltételek telepítve vannak, és ellenőrizte a letöltött fájlt, telepítse a CMake buildelési rendszert.
Keresse meg az SDK legújabb kiadásának címkéjét.
Nyisson meg egy parancssort vagy a Git Bash-felületet. Futtassa az alábbi parancsokat az Azure IoT Device SDK for C GitHub-adattár legújabb kiadásának klónozásához. Használja az előző lépésben talált címkét a
-bparaméter értékeként, például:lts_03_2025.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --initEz a művelet várhatóan több percig is eltarthat.
Hozzon létre egy
cmakealkönyvtárat a Git-adattár gyökérkönyvtárában, és lépjen erre a mappára. Futtassa a következő parancsokat aazure-iot-sdk-ckönyvtárból:mkdir cmake cd cmakeFuttassa az alábbi parancsot, amely létrehozza az SDK fejlesztői ügyfélplatformra szabott verzióját. A rendszer létrehoz egy Visual Studio-megoldást a szimulált eszközhöz a
cmakecímtárban.cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..Ha
cmakenem találja a C++ fordítót, a parancs futtatása közben buildelési hibák jelenhetnek meg. Ha ez történik, futtassa a parancsot a Visual Studio parancssorában.Miután a build sikeres volt, az utolsó néhány kimeneti sor az alábbi kimenethez hasonlóan néz ki:
$ 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
Az eszközök szimulálása
Ebben a szakaszban frissít egy prov_dev_client_sample nevű kiépítési mintát a korábban beállított Azure IoT C SDK-ban.
Ez a mintakód egy eszköz rendszerindítási sorozatát szimulálja, amely elküldi a kiépítési kérelmet a Device Provisioning Service-példánynak. A rendszerindítási sorrend miatt a kenyérpirító eszköz felismerhető és hozzárendelhető az IoT Hubhoz az egyéni foglalási szabályzat használatával.
Az Azure Portalon válassza az Eszközkiépítési szolgáltatás Áttekintés lapját, és jegyezze fel az azonosító hatókörének értékét.
Nyissa meg a Visual Studióban a CMake korábbi futtatásával létrehozott azure_iot_sdks.sln megoldásfájlt. A megoldásfájlnak a következő helyen kell lennie:
azure-iot-sdk-c\cmake\azure_iot_sdks.sln.A Visual Studio Megoldáskezelő ablakában keresse meg a Provision_Samples mappát. Bontsa ki a prov_dev_client_sample nevű mintaprojektet. Bontsa ki a Forrásfájlok elemet, és nyissa meg a prov_dev_client_sample.c fájlt.
Keresse meg az
id_scopeállandót, és cserélje le az értékét a korábban kimásolt Azonosító hatóköre értékre.static const char* id_scope = "0ne00002193";Keresse meg a
main()függvény definícióját ugyanebben a fájlban. Győződjön meg arról, hogyhsm_typeaSECURE_DEVICE_TYPE_SYMMETRIC_KEYváltozó az alábbi példában látható módon van beállítva:SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;A függvényben
main()keresse meg a következő hívásátProv_Device_Register_Device(): . A hívás előtt adja hozzá a következő kódsorokat, amelyek az egyéni JSON-hasznos adatok átadására szolgálnakProv_Device_Set_Provisioning_Payload()a kiépítés során. Ez az egyéni adatcsomag további információk megadására használható az egyéni allokációs függvények számára. Ez a payload a regisztrációs azonosító vizsgálata helyett az eszköz típusának továbbítására is használható. További információkért az egyéni adatcsomagok DPS-sel való küldéséről és fogadásáról, lásd: Eszköz hasznos adatainak használata egyéni kiosztásban.// 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)); }Kattintson a jobb gombbal a prov_dev_client_sample projektre, és válassza a Beállítás indítási projektként lehetőséget.
A Contoso kenyérpirító eszköz szimulálása
A kenyérpirító eszköz szimulálásához keresse meg a prov_dev_client_sample.c
prov_dev_set_symmetric_key_info()található hívást, amely megjegyzésként szerepel.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");Bontsa ki a függvényhívást, és cserélje le a helyőrző értékeket (beleértve a szögletes zárójeleket) a korábban létrehozott pirítósregisztrációs azonosítóra és származtatott eszközkulcsra. A JC8F96eayuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs= kulcsérték csak példaként jelenik meg.
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("breakroom499-contoso-tstrsd-007", "JC8F96eayuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs=");Mentse a fájlt.
A Visual Studio menüjében válassza a Debug>Start without debugging (Hibakeresés > Indítás hibakeresés nélkül) lehetőséget a megoldás futtatásához. A projekt újraépítésére vonatkozó kérdésben válassza az Igen lehetőséget a projekt újraépítéséhez a futtatás előtt.
Az alábbi kimenet egy példa arra, hogy a szimulált kenyérpirító eszköz sikeresen elindul és csatlakozik a kiépítési szolgáltatáspéldányhoz, amelyet az egyéni kiosztási szabályzat rendel a pirítók IoT Hubhoz:
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:Az alábbi kimenet a kenyérpirító eszközhöz futó egyéni foglalási függvény kódjának kimenetét naplózhatja. Figyelje meg, hogy egy központ sikeresen ki van jelölve egy kenyérpirító eszközhöz. Figyelje meg azt a
payloadtulajdonságot is, amely a kódhoz hozzáadott egyéni JSON-tartalmat tartalmazza. Ez a tartalom a kód számára elérhető adeviceRuntimeContext.Ez a naplózás a Naplók elemre kattintva érhető el a portál függvénykódja alatt:
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)
A Contoso hőszivattyú eszköz szimulálása
A hőszivattyús eszköz szimulálásához frissítse újra a prov_dev_client_sample.c-be
prov_dev_set_symmetric_key_info()irányuló hívást a korábban létrehozott hőszivattyú regisztrációs azonosítójával és származtatott eszközkulcsával. Az alábbi kódban látható 6uejA9PfkQgmYylj8Zerp3kcbeVrGZ172YLa7VSnJzg= kulcsérték szintén csak példaként van megadva.// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("mainbuilding167-contoso-hpsd-088", "6uejA9PfkQgmYylj8Zerp3kcbeVrGZ172YLa7VSnJzg=");Mentse a fájlt.
A Visual Studio menüjében válassza a Debug>Start without debugging (Hibakeresés > Indítás hibakeresés nélkül) lehetőséget a megoldás futtatásához. A projekt újraépítésére vonatkozó kérdésben válassza az Igen lehetőséget a projekt újraépítéséhez a futtatás előtt.
Az alábbi kimenet egy példa arra, hogy a szimulált hőszivattyús eszköz sikeresen elindul és csatlakozik a Kiépítési szolgáltatáspéldányhoz, amelyet az egyéni kiosztási szabályzat rendel a Contoso hőszivattyúk IoT Hubhoz:
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:
Egyéni foglalási szabályzatok hibaelhárítása
Az alábbi táblázat a várt forgatókönyveket és az esetlegesen kapott eredményhibakódokat mutatja be. Ezzel a táblázattal elháríthatja az egyéni foglalási szabályzatok hibáit az Azure Functionsben.
| Eset | Regisztrációs eredmény a Kiépítési szolgáltatásból | SDK-eredmények kiépítése |
|---|---|---|
| A webhook a 200 OK értéket adja vissza, az "iotHubHostName" pedig érvényes IoT hub állomásnév. | Eredmény állapota: Hozzárendelve | Az SDK PROV_DEVICE_RESULT_OK a központi adatokkal együtt adja vissza |
| A webhook 200 OK értéket ad vissza a válaszban található "iotHubHostName" értékkel, de üres sztringre vagy nullra van állítva | Eredmény állapota: Sikertelen Hibakód: CustomAllocationIotHubNotSpecified (400208) |
Az SDK PROV_DEVICE_RESULT_HUB_NOT_SPECIFIED ad vissza |
| A webhook a 401 Jogosulatlan értéket adja vissza | Eredmény állapota: Sikertelen Hibakód: CustomAllocationUnauthorizedAccess (400209) |
Az SDK PROV_DEVICE_RESULT_UNAUTHORIZED ad vissza |
| Egyéni regisztráció lett létrehozva az eszköz letiltásához | Eredmény állapota: Letiltva | Az SDK PROV_DEVICE_RESULT_DISABLED ad vissza |
| A webhook a = 429 hibakódot >adja vissza | A DPS orchestráció többször újrapróbálkozik. Az újrapróbálkozési szabályzat jelenleg a következő: - Újrapróbálkozás száma: 10 - Kezdeti időköz: 1 s - Növekmény: 9 s |
Az SDK figyelmen kívül hagyja a hibát, és egy másik get állapotüzenetet küld a megadott időpontban |
| A webhook bármilyen más állapotkódot ad vissza | Eredmény állapota: Sikertelen Hibakód: CustomAllocationFailed (400207) |
Az SDK PROV_DEVICE_RESULT_DEV_AUTH_ERROR ad vissza |
Az erőforrások eltávolítása
Ha folytatni szeretné az oktatóanyagban létrehozott erőforrások használatát, elhagyhatja őket. Ha nem tervezi folytatni az erőforrások használatát, az alábbi lépésekkel törölheti az oktatóanyagban létrehozott összes erőforrást a szükségtelen díjak elkerülése érdekében.
Az alábbi lépések feltételezik, hogy ebben az oktatóanyagban az összes erőforrást a contoso-us-resource-group nevű erőforráscsoportban leírtak szerint hozta létre.
Fontos
Az erőforráscsoport törlése nem vonható vissza. Az erőforráscsoport és a benne foglalt erőforrások véglegesen törlődnek. Figyeljen, nehogy véletlenül rossz erőforráscsoportot vagy erőforrásokat töröljön. Ha az IoT Hubot egy meglévő erőforráscsoporton belül hozta létre, amely a megtartani kívánt erőforrásokat tartalmazza, csak magát az IoT Hub-erőforrást törölje az erőforráscsoport törlése helyett.
Az erőforráscsoport törlése név szerint:
Jelentkezzen be az Azure Portalra, és válassza az Erőforráscsoportok elemet.
A Szűrés név szerint... szövegmezőbe írja be az erőforrásokat tartalmazó erőforráscsoport nevét( contoso-us-resource-group).
Az eredménylistában az erőforráscsoporttól jobbra válassza a ... lehetőséget, majd az Erőforráscsoport törlése lehetőséget.
A rendszer az erőforráscsoport törlésének megerősítését kéri. Írja be ismét az erőforráscsoport nevét a megerősítéshez, majd válassza a Törlés lehetőséget. A rendszer néhány pillanaton belül törli az erőforráscsoportot és a benne foglalt erőforrásokat.
Következő lépések
Az egyéni foglalási szabályzatokkal kapcsolatos további információkért lásd: