Začínáme s identitou modulu a dvojčem modulu služby IoT Hub (.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 identita zařízení a dvojče zařízení Azure IoT Hub 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 více komponentami, jako jsou zařízení s operačním systémem nebo zařízení firmwaru, umožňují identity modulů a dvojčata modulů izolované konfigurace a podmínky pro každou komponentu.
Poznámka:
Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard služby IoT Hub. Další informace o úrovních Služby IoT Hub úrovně Basic a Standard/Free najdete v tématu Volba správné úrovně IoT Hubu 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í klientů zařízení a modulů.
UpdateModuleTwinReportedProperties: odesílá aktualizované dvojče modulu, ohlášené vlastnosti do vašeho centra IoT.
Poznámka:
Další informace o dostupných nástrojích SDK pro sestavení zařízení i back-endových aplikací najdete v sadách SDK .
Požadavky
Visual Studio.
Centrum IoT ve vašem předplatném Azure Pokud centrum ještě nemáte, můžete postupovat podle kroků v tématu Vytvoření centra IoT.
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 formátovaný běžný CN=<deviceid>/<moduleid>
název (CN). Příklad:
openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"
Získání připojovací řetězec centra IoT
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 vytvoří každé centrum IoT se zásadami sdíleného přístupu s názvem registryReadWrite , které toto oprávnění udělí.
Pokud chcete získat připojovací řetězec ioT Hubu pro zásadu registryReadWrite, postupujte takto:
Na webu 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ů.
V levém podokně centra vyberte zásady sdíleného přístupu.
V seznamu zásad vyberte zásadu registryReadWrite .
Zkopírujte primární připojovací řetězec a uložte hodnotu.
Důležité
Tento článek obsahuje postup připojení ke službě pomocí sdíleného přístupového podpisu. Tato metoda ověřování je vhodná pro testování a vyhodnocení, ale ověřování ve službě pomocí MICROSOFT Entra ID nebo spravovaných identit je bezpečnější přístup. Další informace najdete v tématu Osvědčené postupy > zabezpečení cloudu.
Vytvoření identity modulu
V této části vytvoříte konzolovou aplikaci .NET, která vytvoří identitu zařízení a identitu modulu v registru identit ve vašem centru. Zařízení nebo modul se nemůže připojit k centru, pokud neobsahuje položku v registru identit. Další informace najdete v části Registr identit příručky pro vývojáře ioT Hubu.
Když spustíte tuto konzolovou aplikaci, vygeneruje jedinečné ID a klíč zařízení i modulu. Vaše zařízení a modul tyto hodnoty používají k tomu, aby se identifikovaly při odesílání zpráv typu zařízení-cloud do IoT Hubu. V ID se rozlišují malá a velká písmena.
Otevřete Visual Studio a vyberte Vytvořit nový projekt.
V části Vytvořit nový projekt vyberte Konzolová aplikace (.NET Framework).
Výběrem možnosti Další otevřete Možnost Konfigurovat nový projekt. Pojmenujte projekt CreateIdentities a pak vyberte Další.
Ponechte výchozí možnost rozhraní .NET Framework a výběrem možnosti Vytvořit vytvořte projekt.
V sadě Visual Studio otevřete Nástroje>NuGet Správce balíčků> Nabídky NuGet pro řešení. Vyberte kartu Procházet.
Vyhledejte Microsoft.Azure.Devices. Vyberte ho a pak vyberte Nainstalovat.
Do horní části souboru Program.cs přidejte následující příkazy
using
:using Microsoft.Azure.Devices; using Microsoft.Azure.Devices.Common.Exceptions;
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";
Do třídy Main přidejte následující kód.
static void Main(string[] args) { AddDeviceAsync().Wait(); AddModuleAsync().Wait(); }
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 toto ID zařízení již v registru identit existuje, kód jednoduše načte informace o stávají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 zařízení myFirstDevice. Pokud toto 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í může být viditelné v protokolech shromažďovaných pro účely zákaznické podpory a řešení potíží. Proto jako název nepoužívejte citlivé údaje.
Spusťte tuto aplikaci a poznamenejte si klíč zařízení a klíč modulu.
Poznámka:
Registr identit služby IoT Hub ukládá pouze identity zařízení a modulů, které umožňují 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ď z simulovaného zařízení komunikujeme s cloudem. 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 modul připojovací řetězec, přejděte do centra IoT a vyberte Zařízení. Vyhledejte a vyberte myFirstDevice , abyste ho otevřeli, a pak ho otevřete výběrem myFirstModule . V části Podrobnosti o identitě modulu zkopírujte připojovací řetězec (primární klíč) a uložte ho pro konzolovou aplikaci.
Důležité
Tento článek obsahuje postup připojení zařízení pomocí sdíleného přístupového podpisu, označovaného také jako ověřování symetrického klíče. Tato metoda ověřování je vhodná pro testování a vyhodnocení, ale ověřování zařízení pomocí certifikátů X.509 je bezpečnější přístup. Další informace najdete v tématu Zabezpečení osvědčených postupů > zabezpečení připojení.
V sadě Visual Studio přidejte do řešení nový projekt tak, že vyberete Soubor>nový>projekt. V části Vytvořit nový projekt vyberte Konzolová aplikace (.NET Framework) a vyberte Další.
V části Konfigurace nového projektu pojmenujte projekt UpdateModuleTwinReportedProperties a pak vyberte Další.
Ponechte výchozí možnost rozhraní .NET Framework a výběrem možnosti Vytvořit vytvořte projekt.
V sadě Visual Studio otevřete Nástroje>NuGet Správce balíčků> Nabídky NuGet pro řešení. Vyberte kartu Procházet.
Vyhledejte a vyberte Microsoft.Azure.Devices.Client a pak vyberte Nainstalovat.
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;
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); }
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); }
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 pomocí protokolu AMQP.
Volitelně můžete tyto příkazy přidat do metody Main a odeslat událost do IoT Hubu z vašeho modulu. Umístěte tyto řádky 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 spouštět aplikace.
V sadě Visual Studio v Průzkumník řešení klikněte pravým tlačítkem na řešení a pak vyberte Nastavit projekty StartUp.
V části Společné vlastnosti vyberte Spouštěný projekt.
Vyberte Více projektů po spuštění a pak vyberte Spustit jako akci pro aplikace a OK přijměte provedené změny.
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: