Első lépések IoT Hub modulidentitás és moduli ikermodul (.NET) használatában
A modulidentitások és modulikrek az Azure IoT Hub eszközidentitásához és eszközikeréhez hasonlók, de nagyobb részletességet biztosítanak. Bár Azure IoT Hub eszközidentitás és ikereszköz lehetővé teszi a háttéralkalmazás számára az eszköz konfigurálását és az eszköz feltételeinek láthatóságát, a modulidentitás és a modulikerámia biztosítja ezeket a képességeket az eszköz egyes összetevői számára. A több összetevővel, például operációsrendszer-eszközökkel vagy belső vezérlőprogram-eszközökkel rendelkező kompatibilis eszközökön a modulidentitások és a modulikrek lehetővé teszik az egyes összetevők elkülönített konfigurációját és feltételeit.
Megjegyzés
A cikkben ismertetett funkciók csak a IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub szintekkel kapcsolatos további információkért lásd: A megoldáshoz megfelelő IoT Hub szint kiválasztása.
A cikk végén két .NET-konzolalkalmazása van:
CreateIdentities: létrehoz egy eszközidentitást, egy modulidentitást és egy társított biztonsági kulcsot az eszköz- és modulügyfelek csatlakoztatásához.
UpdateModuleTwinReportedProperties: frissített ikermodult küld, jelentett tulajdonságokat küld az IoT Hubnak.
Megjegyzés
Az eszköz- és háttéralkalmazások készítéséhez elérhető SDK-eszközökkel kapcsolatos további információkért lásd: Azure IoT SDK-k .
Előfeltételek
A Visual Studióval.
Egy IoT Hub. Hozzon létre egyet a parancssori felülettel vagy a Azure Portal.
Modulhitelesítés
A modulidentitások hitelesítéséhez szimmetrikus kulcsokat vagy X.509-tanúsítványokat használhat. Az X.509-tanúsítványhitelesítéshez a modul tanúsítványának a következőképpen formázott köznapi nevével (CN) kell rendelkeznie CN=<deviceid>/<moduleid>
: . Például:
openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"
Az IoT Hub kapcsolati sztring lekérése
Ebben a cikkben létrehoz egy háttérszolgáltatást, amely hozzáad egy eszközt az identitásjegyzékhez, majd hozzáad egy modult az eszközhöz. A szolgáltatáshoz a beállításjegyzék írási engedélye szükséges. Alapértelmezés szerint minden IoT Hub egy registryReadWrite nevű megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja.
A registryReadWrite szabályzat IoT Hub kapcsolati sztring az alábbi lépésekkel szerezheti be:
A Azure Portal válassza az Erőforráscsoportok lehetőséget. Válassza ki azt az erőforráscsoportot, ahol a központ található, majd válassza ki a központot az erőforrások listájából.
A központ bal oldali paneljén válassza a Megosztott hozzáférési szabályzatok lehetőséget.
A szabályzatok listájából válassza a beállításjegyzékReadWrite szabályzatot .
Másolja ki az Elsődleges kapcsolati sztring, és mentse az értéket.
A IoT Hub megosztott hozzáférési szabályzatokkal és engedélyekkel kapcsolatos további információkért lásd: Hozzáférés-vezérlés és engedélyek.
Modulidentitás létrehozása
Ebben a szakaszban egy .NET-konzolalkalmazást hoz létre, amely egy eszközidentitást és egy modulidentitást hoz létre a központ identitásjegyzékében. Egy eszköz vagy modul csak akkor tud csatlakozni a központhoz, ha van bejegyzése az identitásjegyzékben. További információt a IoT Hub fejlesztői útmutató Identity Registry című szakaszában talál.
A konzolalkalmazás a futtatásakor egy egyedi azonosítót és kulcsot állít elő az eszköz és a modul számára. Az eszköz és a modul ezeket az értékeket használva azonosítja magát, amikor eszközről felhőbe irányuló üzeneteket küld IoT Hub. Az azonosítók megkülönböztetik a kis- és nagybetűket.
Nyissa meg a Visual Studiót, és válassza az Új projekt létrehozása lehetőséget.
Az Új projekt létrehozása területen válassza a Konzolalkalmazás (.NET-keretrendszer) lehetőséget.
Válassza a Tovább gombot az új projekt konfigurálásának megnyitásához. Nevezze el a projektnek a CreateIdentities nevet, majd válassza a Tovább lehetőséget.
Tartsa meg az alapértelmezett .NET-keretrendszer beállítást, és válassza a Létrehozás lehetőséget a projekt létrehozásához.
A Visual Studióban nyissa meg a ToolsNuGet Package Manager>Manage NuGet Packages for Solution (NuGet-csomagok> kezelése megoldáshoz) elemet. Válassza a Tallózás lapot.
Keressen rá a Microsoft.Azure.Devices kifejezésre. Jelölje ki, majd válassza a Telepítés lehetőséget.
Adja hozzá a következő
using
utasításokat a Program.cs fájl elejéhez:using Microsoft.Azure.Devices; using Microsoft.Azure.Devices.Common.Exceptions;
Adja hozzá a Program osztályhoz a következő mezőket: A helyőrző értékét cserélje le az előző szakaszban létrehozott IoT Hub kapcsolati sztringre.
const string connectionString = "<replace_with_iothub_connection_string>"; const string deviceID = "myFirstDevice"; const string moduleID = "myFirstModule";
Adja hozzá a következő kódot a Main osztályhoz.
static void Main(string[] args) { AddDeviceAsync().Wait(); AddModuleAsync().Wait(); }
Adja hozzá a Program osztályhoz a következő metódusokat:
private static async Task AddDeviceAsync() { RegistryManager registryManager = RegistryManager.CreateFromConnectionString(connectionString); Device device; try { device = await registryManager.AddDeviceAsync(new Device(deviceID)); } catch (DeviceAlreadyExistsException) { device = await registryManager.GetDeviceAsync(deviceID); } Console.WriteLine("Generated device key: {0}", device.Authentication.SymmetricKey.PrimaryKey); } private static async Task AddModuleAsync() { RegistryManager registryManager = RegistryManager.CreateFromConnectionString(connectionString); Module module; try { module = await registryManager.AddModuleAsync(new Module(deviceID, moduleID)); } catch (ModuleAlreadyExistsException) { module = await registryManager.GetModuleAsync(deviceID, moduleID); } Console.WriteLine("Generated module key: {0}", module.Authentication.SymmetricKey.PrimaryKey); }
A
AddDeviceAsync
metódus létrehoz egy myFirstDevice azonosítójú eszközidentitást. Ha az eszközazonosító már létezik az identitásjegyzékben, a kód egyszerűen lekéri a meglévő eszközadatokat. Az alkalmazás ezután megjeleníti az identitáshoz tartozó elsődleges kulcsot. Ezzel a kulccsal csatlakozhat a központhoz a szimulált eszközalkalmazásban.A
AddModuleAsync
metódus létrehoz egy myFirstModule azonosítójú modulidentitást a myFirstDevice eszköz alatt. Ha ez a modulazonosító már létezik az identitásjegyzékben, a kód egyszerűen lekéri a meglévő moduladatokat. Az alkalmazás ezután megjeleníti az identitáshoz tartozó elsődleges kulcsot. Ezzel a kulccsal csatlakozhat a központhoz a szimulált modulalkalmazásban.Fontos
Előfordulhat, hogy az eszközazonosító látható az ügyfélszolgálat számára és a hibaelhárításhoz gyűjtött naplókban, ezért ügyeljen arra, hogy az elnevezésekor ne adjon meg bizalmas adatokat.
Futtassa ezt az alkalmazást, és jegyezze fel az eszközkulcsot és a modulkulcsot.
Megjegyzés
A IoT Hub identitásjegyzék csak az eszköz- és modulidentitásokat tárolja a központhoz való biztonságos hozzáférés érdekében. Az identitásjegyzék tárolja az eszközazonosítókat és -kulcsot, és biztonsági hitelesítő adatokként használja őket. Az identitásjegyzék minden egyes eszközhöz tárol egy engedélyezve/letiltva jelzőt is, amellyel letilthatja az eszköz hozzáférését. Ha az alkalmazásnak más eszközspecifikus metaadatokat kell tárolnia, akkor egy alkalmazásspecifikus tárolót kell használnia. A modulidentitások esetében nincs engedélyezési/letiltási jelző. További információ: IoT Hub fejlesztői útmutató.
A moduliker frissítése a .NET eszközoldali SDK-val
Most kommunikáljunk a felhőben a szimulált eszközről. A modulidentitás létrehozása után egy moduliker is implicit módon létrejön az IoT Hubban. Ebben a szakaszban egy .NET-konzolalkalmazást hoz létre a szimulált eszközön a moduliker jelentett tulajdonságainak frissítéséhez.
A modul kapcsolati sztring lekéréséhez lépjen az IoT Hubra, majd válassza az Eszközök lehetőséget. Keresse meg és válassza ki a myFirstDevice elemet a megnyitásához, majd válassza a myFirstModule lehetőséget a megnyitásához. A Modulidentitás részletei területen másolja ki a kapcsolati sztringet (elsődleges kulcsot), és mentse a konzolalkalmazásba.
A Visual Studióban adjon hozzá egy új projektet a megoldáshoz azÚj>projektfájlja> lehetőség kiválasztásával. Az Új projekt létrehozása területen válassza a Konzolalkalmazás (.NET-keretrendszer) lehetőséget, majd a Tovább lehetőséget.
Az Új projekt konfigurálása területen adja a projektnek az UpdateModuleTwinReportedProperties nevet, majd válassza a Tovább lehetőséget.
Tartsa meg az alapértelmezett .NET-keretrendszer beállítást, és válassza a Létrehozás lehetőséget a projekt létrehozásához.
A Visual Studióban nyissa meg a ToolsNuGet Package Manager>Manage NuGet Packages for Solution (NuGet-csomagok> kezelése megoldáshoz) elemet. Válassza a Tallózás lapot.
Keresse meg és válassza a Microsoft.Azure.Devices.Client, majd a Telepítés lehetőséget.
Adja hozzá a következő
using
utasításokat a Program.cs fájl elejéhez:using Microsoft.Azure.Devices.Client; using Microsoft.Azure.Devices.Shared; using System.Threading.Tasks; using Newtonsoft.Json;
Adja hozzá a Program osztályhoz a következő mezőket: A helyőrző értékét írja át a modul kapcsolati sztringjére.
private const string ModuleConnectionString = "<Your module connection string>"; private static ModuleClient Client = null; static void ConnectionStatusChangeHandler(ConnectionStatus status, ConnectionStatusChangeReason reason) { Console.WriteLine("Connection Status Changed to {0}; the reason is {1}", status, reason); }
Adja hozzá a Program osztályhoz a következő, OnDesiredPropertyChanged metódust:
private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, object userContext) { Console.WriteLine("desired property change:"); Console.WriteLine(JsonConvert.SerializeObject(desiredProperties)); Console.WriteLine("Sending current time as reported property"); TwinCollection reportedProperties = new TwinCollection { ["DateTimeLastDesiredPropertyChangeReceived"] = DateTime.Now }; await Client.UpdateReportedPropertiesAsync(reportedProperties).ConfigureAwait(false); }
Adja hozzá a következő sorokat a Main metódushoz:
static void Main(string[] args) { Microsoft.Azure.Devices.Client.TransportType transport = Microsoft.Azure.Devices.Client.TransportType.Amqp; try { Client = ModuleClient.CreateFromConnectionString(ModuleConnectionString, transport); Client.SetConnectionStatusChangesHandler(ConnectionStatusChangeHandler); Client.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null).Wait(); Console.WriteLine("Retrieving twin"); var twinTask = Client.GetTwinAsync(); twinTask.Wait(); var twin = twinTask.Result; Console.WriteLine(JsonConvert.SerializeObject(twin.Properties)); Console.WriteLine("Sending app start time as reported property"); TwinCollection reportedProperties = new TwinCollection(); reportedProperties["DateTimeLastAppLaunch"] = DateTime.Now; Client.UpdateReportedPropertiesAsync(reportedProperties); } catch (AggregateException ex) { Console.WriteLine("Error in sample: {0}", ex); } Console.WriteLine("Waiting for Events. Press enter to exit..."); Console.ReadLine(); Client.CloseAsync().Wait(); }
Most már tudja, hogyan lehet lekérni a modul ikerpéldányát, és frissíteni a jelentett tulajdonságokat az AMQP protokollal.
Ha szeretné, hozzáadhatja ezeket az utasításokat a Main metódushoz, hogy eseményt küldjön IoT Hub a modulból. Helyezze ezeket a sorokat a
try catch
blokk alá.Byte[] bytes = new Byte[2]; bytes[0] = 0; bytes[1] = 1; var sendEventsTask = Client.SendEventAsync(new Message(bytes)); sendEventsTask.Wait(); Console.WriteLine("Event sent to IoT Hub.");
Az alkalmazások futtatása
Most már futtathatja az alkalmazásokat.
A Visual Studióban a Megoldáskezelőben kattintson a jobb gombbal a megoldásra, majd válassza a StartUp-projektek beállítása lehetőséget.
A Common Properties (Közös tulajdonságok) területen válassza az Indítási projekt lehetőséget.
Válassza a Több indítási projekt lehetőséget, majd válassza a Start lehetőséget az alkalmazások műveleteként, majd az OK elemet a módosítások elfogadásához.
Nyomja le az F5 billentyűt az alkalmazások elindításához.
Következő lépések
További bevezetés az IoT Hub használatába, valamint egyéb IoT-forgatókönyvek megismerése: