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


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

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:

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

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

  3. A szabályzatok listájából válassza a beállításjegyzékReadWrite szabályzatot .

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

    Képernyőkép a kapcsolati sztring lekéréséről

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.

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

    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 ToolsNuGet Package Manager>Manage NuGet Packages for Solution (NuGet-csomagok> kezelése megoldáshoz) elemet. 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.

    Telepítse Azure IoT Hub .NET-szolgáltatás SDK aktuális verzióját

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

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

Képernyőkép a

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

  2. Az Új projekt konfigurálása területen adja a projektnek az UpdateModuleTwinReportedProperties nevet, majd válassza a Tovább lehetőséget.

    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 ToolsNuGet Package Manager>Manage NuGet Packages for Solution (NuGet-csomagok> kezelése megoldáshoz) elemet. 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, amelyen a

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

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

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

  2. A Common Properties (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 lehetőséget az alkalmazások műveleteként, majd az OK elemet a módosítások elfogadásához.

  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: