Začínáme s dvojčaty zařízení (.NET)

Dvojčata zařízení jsou dokumenty JSON s uloženými informacemi o stavu zařízení, včetně metadat, konfigurací a podmínek. IoT Hub zachová dvojče zařízení pro každé zařízení, které se k němu připojí.

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

Dvojčata zařízení použijte k:

  • Uložte metadata zařízení z back-endu řešení.

  • Nahlašujte aktuální informace o stavu, jako jsou dostupné možnosti a podmínky, například použitá metoda připojení, z vaší aplikace zařízení.

  • Synchronizujte stav dlouhotrvajících pracovních postupů, jako jsou aktualizace firmwaru a konfigurace, mezi aplikací zařízení a back-endovou aplikací.

  • Zadejte dotaz na metadata, konfiguraci nebo stav zařízení.

Dvojčata zařízení jsou navržená pro synchronizaci a dotazování konfigurací a podmínek zařízení. Další informace o dvojčatech zařízení, včetně případů použití dvojčat zařízení, najdete v tématu Principy dvojčat zařízení.

IoT Hubs ukládají dvojčata zařízení, která obsahují následující prvky:

  • Značky. Metadata zařízení jsou přístupná jenom back-endem řešení.

  • Požadované vlastnosti. Objekty JSON upravitelné back-endem řešení a pozorovatelné aplikací zařízení.

  • Ohlášené vlastnosti Objekty JSON upravitelné aplikací zařízení a čitelné back-endem řešení.

Značky a vlastnosti nemohou obsahovat pole, ale mohou obsahovat vnořené objekty.

Následující obrázek znázorňuje organizaci dvojčete zařízení:

Snímek obrazovky s diagramem konceptu dvojčete zařízení

Back-end řešení navíc může dotazovat dvojčata zařízení na základě všech výše uvedených dat. Další informace o dvojčatech zařízení najdete v tématu Principy dvojčat zařízení. Další informace o dotazování najdete v dotazovacím jazyce služby IoT Hub.

V tomto článku se dozvíte, jak:

  • Pomocí aplikace simulovaného zařízení můžete hlásit svůj kanál připojení jako ohlášenou vlastnost dvojčete zařízení.

  • Dotazování zařízení z back-endové aplikace pomocí filtrů na značky a vlastnosti, které jste vytvořili dříve.

V tomto článku vytvoříte dvě konzolové aplikace .NET:

  • AddTagsAndQuery: back-endová aplikace, která přidává značky a dotazy na dvojčata zařízení.

  • Sestava Připojení ivity: aplikace simulovaného zařízení, která se připojuje k centru IoT a hlásí stav připojení.

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.

  • IoT Hub. Vytvořte ho pomocí rozhraní příkazového řádku nebo webu Azure Portal.

  • Registrované zařízení. Zaregistrujte si ho na webu Azure Portal.

  • Ujistěte se, že je v bráně firewall otevřený port 8883. Ukázka zařízení v tomto článku používá protokol MQTT, který komunikuje přes port 8883. Tento port může být blokovaný v některých podnikových a vzdělávacích síťových prostředích. Další informace a způsoby, jak tento problém obejít, najdete v tématu Připojení pro IoT Hub (MQTT).

Získání připojovací řetězec centra IoT

V tomto článku vytvoříte back-endovou službu, která přidá požadované vlastnosti do dvojčete zařízení, a pak se do registru identit dotazuje, aby zjistila všechna zařízení s ohlášenými vlastnostmi, které byly odpovídajícím způsobem aktualizovány. Vaše služba potřebuje oprávnění k připojení služby k úpravě požadovaných vlastností dvojčete zařízení a potřebuje oprávnění ke čtení registru pro dotazování registru identit. Neexistují žádné výchozí zásady sdíleného přístupu, které obsahují pouze tato dvě oprávnění, takže potřebujete vytvořit jednu.

Chcete-li vytvořit zásadu sdíleného přístupu, která uděluje oprávnění ke čtení služby a registru a získat připojovací řetězec pro tuto zásadu, postupujte takto:

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

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

  3. V horní nabídce nad seznamem zásad vyberte Přidat zásady přístupu ke sdíleným zásadám.

  4. V podokně Přidat zásady sdíleného přístupu vpravo zadejte popisný název zásady, například serviceAndRegistryRead. V části Oprávnění vyberte Připojení Registru ke čtení a službě a pak vyberte Přidat.

    Snímek obrazovky, který ukazuje, jak přidat nové zásady sdíleného přístupu

  5. Ze seznamu zásad vyberte novou zásadu.

  6. Vyberte ikonu kopírování pro primární připojovací řetězec a uložte hodnotu.

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

Další informace ozásadách

Vytvoření aplikace zařízení, která aktualizuje ohlášené vlastnosti

V této části vytvoříte konzolovou aplikaci .NET, která se připojí k vašemu centru jako myDeviceId, a pak aktualizujete její ohlášené vlastnosti, abyste potvrdili, že je připojená pomocí mobilní sítě.

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

  2. Zvolte Konzolová aplikace (.NET Framework) a pak vyberte Další.

  3. V části Konfigurovat nový projekt pojmenujte sestavu projektu Připojení ivitu a pak vyberte Další.

  4. V Průzkumník řešení klikněte pravým tlačítkem na projekt Sestava Připojení ivitu a pak vyberte Spravovat balíčky NuGet.

  5. Ponechte výchozí rozhraní .NET Framework a pak vyberte Vytvořit a vytvořte projekt.

  6. Vyberte Procházet a vyhledejte a zvolte Microsoft.Azure.Devices.Client. Vyberte volbu Instalovat.

    Tento krok stáhne, nainstaluje a přidá odkaz na balíček NuGet sady Sdk pro zařízení Azure IoT a jeho závislosti.

  7. 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 Newtonsoft.Json;
    
  8. Do třídy Program přidejte následující pole. Nahraďte {device connection string} připojovací řetězec zařízení, které jste viděli při registraci zařízení ve službě IoT Hub:

    static string DeviceConnectionString = "HostName=<yourIotHubName>.azure-devices.net;DeviceId=<yourIotDeviceName>;SharedAccessKey=<yourIotDeviceAccessKey>";
    static DeviceClient Client = null;
    
  9. Do třídy Program přidejte následující metodu.

    public static async void InitClient()
    {
        try
        {
            Console.WriteLine("Connecting to hub");
            Client = DeviceClient.CreateFromConnectionString(DeviceConnectionString, 
              TransportType.Mqtt);
            Console.WriteLine("Retrieving twin");
            await Client.GetTwinAsync();
        }
        catch (Exception ex)
        {
            Console.WriteLine();
            Console.WriteLine("Error in sample: {0}", ex.Message);
        }
    }
    

    Objekt Klient zveřejňuje všechny metody, které potřebujete k interakci s dvojčaty zařízení ze zařízení. Výše uvedený kód inicializuje objekt Client a potom načte dvojče zařízení pro myDeviceId.

  10. Do třídy Program přidejte následující metodu.

    public static async void ReportConnectivity()
    {
        try
        {
            Console.WriteLine("Sending connectivity data as reported property");
    
            TwinCollection reportedProperties, connectivity;
            reportedProperties = new TwinCollection();
            connectivity = new TwinCollection();
            connectivity["type"] = "cellular";
            reportedProperties["connectivity"] = connectivity;
            await Client.UpdateReportedPropertiesAsync(reportedProperties);
        }
        catch (Exception ex)
        {
            Console.WriteLine();
            Console.WriteLine("Error in sample: {0}", ex.Message);
        }
    }
    

    Výše uvedený kód aktualizuje hlášenou vlastnost myDeviceId informacemi o připojení.

  11. Nakonec do metody Main přidejte následující řádky:

    try
    {
        InitClient();
        ReportConnectivity();
    }
    catch (Exception ex)
    {
        Console.WriteLine();
        Console.WriteLine("Error in sample: {0}", ex.Message);
    }
    Console.WriteLine("Press Enter to exit.");
    Console.ReadLine();
    
  12. V Průzkumník řešení klikněte pravým tlačítkem na řešení a vyberte Nastavit projekty po spuštění.

  13. V projektu spuštění společných vlastností>vyberte více projektů po spuštění. V části Sestava Připojení ivity vyberte Spustit jako akci. Kliknutím na TLAČÍTKO OK uložte provedené změny.

  14. Spusťte tuto aplikaci tak, že kliknete pravým tlačítkem na projekt Sestava Připojení ivity a vyberete Ladit a pak spustíte novou instanci. Měla by se zobrazit aplikace, která získá informace o dvojčeti, a pak odesílat připojení jako ohlášenou vlastnost.

    Spuštění aplikace zařízení pro hlášení připojení

    Jakmile zařízení nahlásilo informace o připojení, mělo by se zobrazit v obou dotazech.

  15. Klikněte pravým tlačítkem myši na projekt AddTagsAndQuery a vyberte Spustit novou instanci ladění>a spusťte dotazy znovu. Tentokrát by se myDeviceId měl zobrazit v obou výsledcích dotazu.

    Připojení zařízení bylo úspěšně hlášeno.

Vytvoření aplikace služby, která aktualizuje požadované vlastnosti a dotazuje dvojčata

V této části vytvoříte konzolovou aplikaci .NET pomocí jazyka C#, která přidá metadata umístění do dvojčete zařízení přidruženého k myDeviceId. Aplikace se dotazuje ioT Hubu na zařízení umístěná v USA a pak se dotazuje zařízení, která hlásí připojení mobilní sítě.

  1. V sadě Visual Studio vyberte Soubor > nový > projekt. V části Vytvořit nový projekt vyberte Konzolová aplikace (.NET Framework) a pak vyberte Další.

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

    Snímek obrazovky znázorňuje, jak vytvořit nový projekt sady Visual Studio

  3. Přijměte výchozí verzi rozhraní .NET Framework a pak vyberte Vytvořit a vytvořte projekt.

  4. V Průzkumník řešení klikněte pravým tlačítkem na projekt AddTagsAndQuery a pak vyberte Spravovat balíčky NuGet.

  5. Vyberte Procházet a vyhledejte a vyberte Microsoft.Azure.Devices. Vyberte volbu Instalovat.

    Okno Správce balíčků NuGet

    Tento krok stáhne, nainstaluje a přidá odkaz na balíček NuGet sdk služby Azure IoT a jeho závislosti.

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

    using Microsoft.Azure.Devices;
    
  7. Do třídy Program přidejte následující pole. Nahraďte {iot hub connection string} připojovací řetězec IoT Hub, který jste zkopírovali v připojovací řetězec Get the IoT Hub.

    static RegistryManager registryManager;
    static string connectionString = "{iot hub connection string}";
    
  8. Do třídy Program přidejte následující metodu.

    public static async Task AddTagsAndQuery()
    {
        var twin = await registryManager.GetTwinAsync("myDeviceId");
        var patch =
            @"{
                tags: {
                    location: {
                        region: 'US',
                        plant: 'Redmond43'
                    }
                }
            }";
        await registryManager.UpdateTwinAsync(twin.DeviceId, patch, twin.ETag);
    
        var query = registryManager.CreateQuery(
          "SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'", 100);
        var twinsInRedmond43 = await query.GetNextAsTwinAsync();
        Console.WriteLine("Devices in Redmond43: {0}", 
          string.Join(", ", twinsInRedmond43.Select(t => t.DeviceId)));
    
        query = registryManager.CreateQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity.type = 'cellular'", 100);
        var twinsInRedmond43UsingCellular = await query.GetNextAsTwinAsync();
        Console.WriteLine("Devices in Redmond43 using cellular network: {0}", 
          string.Join(", ", twinsInRedmond43UsingCellular.Select(t => t.DeviceId)));
    }
    

    Třída RegistryManager zveřejňuje všechny metody potřebné k interakci s dvojčaty zařízení ze služby. Předchozí kód nejprve inicializuje objekt registryManager , pak načte dvojče zařízení pro myDeviceId a nakonec aktualizuje jeho značky informacemi o požadovaném umístění.

    Po aktualizaci provede dva dotazy: první vybere jenom dvojčata zařízení umístěná v závodu Redmond43 a druhý dotaz zpřesní tak, že vybere jenom zařízení připojená přes mobilní síť.

    Předchozí kód při vytváření objektu dotazu určuje maximální počet vrácených dokumentů. Dotaz objekt obsahuje HasMoreResults boolean vlastnost, kterou můžete použít k vyvolání GetNextAsTwinAsync metody vícekrát k načtení všech výsledků. Metoda s názvem GetNextAsJson je k dispozici pro výsledky, které nejsou dvojčaty zařízení, například výsledky agregačních dotazů.

  9. Nakonec do metody Main přidejte následující řádky:

    registryManager = RegistryManager.CreateFromConnectionString(connectionString);
    AddTagsAndQuery().Wait();
    Console.WriteLine("Press Enter to exit.");
    Console.ReadLine();
    
  10. Spusťte tuto aplikaci tak, že kliknete pravým tlačítkem myši na projekt AddTagsAndQuery a vyberete Ladit a pak spustíte novou instanci. Ve výsledcích dotazu byste měli vidět jedno zařízení s žádostí o všechna zařízení umístěná v Redmond43 a žádný dotaz, který výsledky omezuje na zařízení, která používají mobilní síť.

    Výsledky dotazu v okně

V tomto článku:

  • Přidání metadat zařízení jako značek z back-endové aplikace
  • Nahlášené informace o připojení zařízení ve dvojčeti zařízení
  • Dotazovali se na informace dvojčete zařízení pomocí dotazovacího jazyka ioT Hubu podobného SQL.

Další kroky

Informace o: