Ismerkedés az IoT Hub-modul identitásával és ikermoduljával (.NET)
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 az Azure IoT Hub eszközidentitása és ikereszköze 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 modul ikerpéldánya biztosítja ezeket a képességeket az eszköz egyes összetevői számára. A több összetevővel rendelkező, például operációsrendszer-eszközökkel vagy belső vezérlőprogram-eszközökkel rendelkező, képes 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.
Feljegyzés
A cikkben ismertetett funkciók csak az IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub-szintekről további információt a megoldáshoz megfelelő IoT Hub-szint kiválasztása című témakörben talál.
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 összekapcsolásához.
UpdateModuleTwinReportedProperties: frissített modul ikermodult, jelentett tulajdonságokat küld az IoT Hubnak.
Feljegyzés
Az eszköz- és háttéralkalmazások készítéséhez elérhető SDK-eszközökről további információt az Azure IoT SDK-kban talál.
Előfeltételek
A Visual Studióval.
IoT Hub az Azure-előfizetésben. Ha még nem rendelkezik központokkal, kövesse az IoT Hub létrehozása című témakörben leírt lépéseket.
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öznapi neve (CN) formátumával CN=<deviceid>/<moduleid>
kell rendelkeznie. Példa:
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 egy háttérszolgáltatást hoz létre, amely hozzáad egy eszközt az identitásjegyzékhez, majd hozzáad egy modult az adott 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 megadja ezt az engedélyt.
Az IoT Hub kapcsolati sztring a registryReadWrite szabályzathoz való lekéréséhez kövesse az alábbi lépéseket:
Az Azure Portalon válassza ki az Erőforráscsoportokat. 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 ablaktábláján válassza a Megosztott hozzáférési szabályzatok lehetőséget.
A szabályzatok listájában válassza ki a registryReadWrite szabályzatot .
Másolja ki az elsődleges kapcsolati sztring, és mentse az értéket.
További információ az IoT Hub megosztott hozzáférési szabályzatairól és engedélyeiről: 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 hub 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ókért tekintse meg az IoT Hub fejlesztői útmutatójának Identity Registry szakaszát.
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 ezen értékekkel azonosítja magát, amikor eszközről felhőbe irányuló üzeneteket küld az IoT Hubnak. 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 lehetőséget az új projekt konfigurálásához. Nevezze el a projekt CreateIdentities nevét, majd válassza a Tovább gombot.
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 Tools>NuGet Csomagkezelő> Manage NuGet Packages for Solution eszközt. 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 fő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 eszközidentitást a myFirstDevice azonosítóval. 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 modulidentitást a myFirstModule azonosítóval 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.
Feljegyzés
Az IoT Hub identitásjegyzéke 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ókért lásd az Azure IoT Hub fejlesztői útmutatóját.
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 keresse meg az IoT Hubot, majd válassza az Eszközök lehetőséget. Keresse meg és válassza ki a myFirstDevice parancsot a megnyitáshoz, majd a myFirstModule gombra kattintva nyissa meg. 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>projekt fájl>kiválasztásával. Az Új projekt létrehozása területen válassza a Konzolalkalmazás (.NET-keretrendszer) lehetőséget, és válassza a Tovább gombot.
Az új projekt konfigurálásához nevezze el az UpdateModuleTwinReportedProperties projektet, majd válassza a Tovább gombot.
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 Tools>NuGet Csomagkezelő> Manage NuGet Packages for Solution eszközt. 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 Fő 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 az IoT Hubnak 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ő kattintson a jobb gombbal a megoldásra, majd válassza az Indítási projektek beállítása lehetőséget.
A 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 elemet az alkalmazások műveleteként, és az OK gombra kattintva fogadja el a módosításokat.
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: