Začínáme s identitou modulu IoT Hub a dvojčetem modulu (.NET)

Identity modulů a dvojčata modulů se podobají identitě zařízení a dvojčeti zařízení služby Azure IoT Hub, ale poskytují větší úroveň členitosti. Zatímco Azure IoT Hub identita zařízení a dvojče zařízení umožňují back-endové aplikaci konfigurovat zařízení a poskytovat přehled o podmínkách zařízení, identita modulu a dvojče modulu poskytují tyto funkce pro jednotlivé komponenty zařízení. Na zařízeních s podporou více komponent, jako jsou zařízení s operačním systémem nebo zařízení s firmwarem, umožňují identity modulů a dvojčata modulů izolovanou konfiguraci a podmínky pro každou komponentu.

Poznámka

Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard IoT Hub. Další informace o úrovních IoT Hub Basic a Standard/Free najdete v tématu Volba správné IoT Hub úrovně pro vaše řešení.

Na konci tohoto článku máte dvě konzolové aplikace .NET:

  • CreateIdentities: Vytvoří identitu zařízení, identitu modulu a přidružený klíč zabezpečení pro připojení zařízení a klientů modulu.

  • UpdateModuleTwinReportedProperties: Odesílá aktualizované dvojče modulu a ohlášené vlastnosti do vašeho centra IoT.

Poznámka

Další informace o nástrojích sdk dostupných pro vytváření aplikací pro zařízení i back-end najdete v tématu Sady SDK Pro azure IoT SDK.

Požadavky

Ověřování modulů

K ověřování identit modulů můžete použít symetrické klíče nebo certifikáty X.509. Pro ověřování certifikátů X.509 musí mít certifikát modulu svůj běžný název (CN) naformátovaný jako CN=<deviceid>/<moduleid>. Příklad:

openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"

Získání připojovacího řetězce služby IoT Hub

V tomto článku vytvoříte back-endovou službu, která přidá zařízení do registru identit a pak do tohoto zařízení přidá modul. Vaše služba vyžaduje oprávnění k zápisu do registru . Ve výchozím nastavení se každé centrum IoT vytvoří se zásadou sdíleného přístupu s názvem registryReadWrite , která toto oprávnění uděluje.

Pokud chcete získat připojovací řetězec IoT Hub pro zásadu registryReadWrite, postupujte takto:

  1. V Azure Portal vyberte Skupiny prostředků. Vyberte skupinu prostředků, ve které se nachází vaše centrum, a pak vyberte centrum ze seznamu prostředků.

  2. V levém podokně centra vyberte Zásady sdíleného přístupu.

  3. V seznamu zásad vyberte zásadu registruReadWrite .

  4. Zkopírujte primární připojovací řetězec a hodnotu uložte.

    Snímek obrazovky, který ukazuje, jak načíst připojovací řetězec

Další informace o IoT Hub zásady a oprávnění sdíleného přístupu najdete v tématu Řízení přístupu a oprávnění.

Vytvoření identity modulu

V této části vytvoříte konzolovou aplikaci .NET, která vytvoří identitu zařízení a identitu modulu v registru identit v centru. Zařízení nebo modul se nemůže připojit k centru, pokud nemá záznam v registru identit. Další informace najdete v části Registr identit v Příručce pro vývojáře pro službu IoT Hub.

Když spustíte tuto konzolovou aplikaci, vygeneruje jedinečné ID a klíč zařízení i modulu. Vaše zařízení a modul používají tyto hodnoty k identifikaci při odesílání zpráv zařízení-cloud do IoT Hub. V ID se rozlišují malá a velká písmena.

  1. Otevřete Visual Studio a vyberte Vytvořit nový projekt.

  2. V části Vytvořit nový projekt vyberte Konzolová aplikace (.NET Framework).

  3. Výběrem možnosti Další otevřete možnost Konfigurovat nový projekt. Pojmenujte projekt CreateIdentities a pak vyberte Další.

    Snímek obrazovky s automaticky otevíraným okem Konfigurace nového projektu s vlastností CreateIdentities

  4. Ponechte výchozí možnost rozhraní .NET Framework a vyberte Vytvořit a vytvořte projekt.

  5. V sadě Visual Studio otevřete Nástroji> Správce >balíčků NuGetSpravovat balíčky NuGet pro řešení. Vyberte kartu Procházet.

  6. Vyhledejte Microsoft.Azure.Devices. Vyberte ji a pak vyberte Nainstalovat.

    Instalace aktuální verze sady SDK služby Azure IoT Hub .NET

  7. Do horní části souboru Program.cs přidejte následující příkazy using:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Common.Exceptions;
    
  8. Do třídy Program přidejte následující pole. Nahraďte hodnotu zástupného symbolu připojovacím řetězcem pro službu IoT Hub, kterou jste vytvořili v předchozí části.

    const string connectionString = "<replace_with_iothub_connection_string>";
    const string deviceID = "myFirstDevice";
    const string moduleID = "myFirstModule";
    
  9. Do třídy Main přidejte následující kód.

    static void Main(string[] args)
    {
        AddDeviceAsync().Wait();
        AddModuleAsync().Wait();
    }
    
  10. Do třídy Program přidejte následující metody:

    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);
    }
    

    Metoda AddDeviceAsync vytvoří identitu zařízení s ID myFirstDevice. Pokud id zařízení už v registru identit existuje, kód jednoduše načte informace o existujícím zařízení. Aplikace pak zobrazí primární klíč pro danou identitu. Tento klíč použijete v aplikaci simulovaného zařízení pro připojení k centru.

    Metoda AddModuleAsync vytvoří identitu modulu s ID myFirstModule v části zařízení myFirstDevice. Pokud id modulu již v registru identit existuje, kód jednoduše načte informace o existujícím modulu. Aplikace pak zobrazí primární klíč pro danou identitu. Tento klíč použijete v aplikaci simulovaného modulu pro připojení k centru.

    Důležité

    ID zařízení se může zobrazit v protokolech shromažďovaných pro účely zákaznické podpory a řešení potíží, proto se ujistěte, že při pojmenování nepoužíváte žádné citlivé údaje.

  11. Spusťte tuto aplikaci a poznamenejte si klíč zařízení a klíč modulu.

Poznámka

Registr identit IoT Hub ukládá jenom identity zařízení a modulů, aby byl zajištěn zabezpečený přístup k centru. Registr identit ukládá ID zařízení a klíče pro použití jako bezpečnostních pověření. Registr identit také ukládá povolené a zakázané příznaky pro jednotlivá zařízení, pomocí kterých můžete zakázat přístup pro dané zařízení. Pokud vaše aplikace potřebuje ukládat další metadata specifická pro zařízení, měla by používat úložiště specifické pro aplikaci. Pro identity modulů neexistuje žádný příznak povoleno/zakázáno. Další informace najdete v Příručce pro vývojáře pro službu IoT Hub.

Aktualizace dvojčete modulu pomocí sady SDK pro zařízení .NET

Teď pojďme komunikovat do cloudu ze simulovaného zařízení. Po vytvoření identity modulu se ve službě IoT Hub implicitně vytvoří dvojče modulu. V této části vytvoříte na simulovaném zařízení konzolovou aplikaci .NET, která aktualizuje hlášené vlastnosti dvojčete modulu.

Pokud chcete načíst připojovací řetězec modulu, přejděte do centra IoT a vyberte Zařízení. Vyhledejte a vyberte myFirstDevice a otevřete ho tak, že vyberete myFirstModule . V části Podrobnosti o identitě modulu zkopírujte připojovací řetězec (primární klíč) a uložte ho pro konzolovou aplikaci.

Snímek obrazovky se stránkou Podrobnosti identity modulu

  1. V sadě Visual Studio přidejte do řešení nový projekt výběrem možnosti Soubor>nový>projekt. V části Vytvořit nový projekt vyberte Konzolová aplikace (.NET Framework) a vyberte Další.

  2. V části Konfigurace nového projektu pojmenujte projekt UpdateModuleTwinReportedProperties a pak vyberte Další.

    Snímek obrazovky zobrazící místní nabídku Konfigurace nového projektu

  3. Ponechte výchozí možnost rozhraní .NET Framework a vyberte Vytvořit a vytvořte projekt.

  4. V sadě Visual Studio otevřete Nástroji> Správce >balíčků NuGetSpravovat balíčky NuGet pro řešení. Vyberte kartu Procházet.

  5. Vyhledejte a vyberte Microsoft.Azure.Devices.Client a pak vyberte Nainstalovat.

    Snímek obrazovky znázorňující vybranou možnost Microsoft.Azure.Devices.Client a zvýrazněné tlačítko Nainstalovat

  6. Do horní části souboru Program.cs přidejte následující příkazy using:

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    
  7. Do třídy Program přidejte následující pole. Nahraďte zástupnou hodnotu připojovacím řetězcem modulu.

    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. Do třídy Program přidejte následující metodu OnDesiredPropertyChanged:

    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. Do metody Main přidejte následující řádky:

    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();
    }
    

    Teď víte, jak načíst dvojče modulu a aktualizovat ohlášené vlastnosti protokolem AMQP.

  10. Volitelně můžete tyto příkazy přidat do metody Main a odeslat událost IoT Hub z vašeho modulu. Tyto čáry umístěte pod try catch blok.

    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.");
    

Spouštění aplikací

Teď můžete aplikace spouštět.

  1. V sadě Visual Studio v Průzkumník řešení klikněte pravým tlačítkem na řešení a pak vyberte Nastavit projekty po spuštění.

  2. V části Společné vlastnosti vyberte Spouštěný projekt.

  3. Vyberte Více projektů po spuštění a pak vyberte Spustit jako akci pro aplikace a OK potvrďte změny.

  4. Stisknutím klávesy F5 spusťte aplikace.

Další kroky

Chcete-li pokračovat v seznamování se službou IoT Hub a prozkoumat další scénáře IoT, podívejte se na tato témata: