Megosztás a következőn keresztül:


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

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:

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

  2. A központ bal oldali ablaktábláján válassza a Megosztott hozzáférési szabályzatok lehetőséget.

  3. A szabályzatok listájában válassza ki a registryReadWrite szabályzatot .

  4. Másolja ki az elsődleges kapcsolati sztring, és mentse az értéket.

    Képernyőfelvétel, amely bemutatja, hogyan kérhető le a kapcsolati sztring

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.

  1. Nyissa meg a Visual Studiót, és válassza az Új projekt létrehozása lehetőséget.

  2. Az Új projekt létrehozása területen válassza a Konzolalkalmazás (.NET-keretrendszer) lehetőséget.

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

    Képernyőkép az

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

  5. A Visual Studióban nyissa meg a Tools>NuGet Csomagkezelő> Manage NuGet Packages for Solution eszközt. Válassza a Tallózás lapot.

  6. Keressen rá a Microsoft.Azure.Devices kifejezésre. Jelölje ki, majd válassza a Telepítés lehetőséget.

    Az Azure IoT Hub .NET szolgáltatás SDK aktuális verziójának telepítése

  7. Adja hozzá a következő usingutasításokat a Program.cs fájl elejéhez:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Common.Exceptions;
    
  8. 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";
    
  9. Adja hozzá a következő kódot a főosztályhoz .

    static void Main(string[] args)
    {
        AddDeviceAsync().Wait();
        AddModuleAsync().Wait();
    }
    
  10. 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.

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

Képernyőkép a Modulidentitás részletei oldalról.

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

  2. Az új projekt konfigurálásához nevezze el az UpdateModuleTwinReportedProperties projektet, majd válassza a Tovább gombot.

    Képernyőkép az

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

  4. A Visual Studióban nyissa meg a Tools>NuGet Csomagkezelő> Manage NuGet Packages for Solution eszközt. Válassza a Tallózás lapot.

  5. Keresse meg és válassza a Microsoft.Azure.Devices.Client, majd a Telepítés lehetőséget.

    Képernyőkép a kijelölt

  6. Adja hozzá a következő usingutasí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;
    
  7. 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);
    }
    
  8. 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);
        }
    
  9. Adja hozzá a következő sorokat a 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.

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

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

  2. A Közös tulajdonságok területen válassza az Indítási projekt lehetőséget.

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

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