Úlohy plánování a vysílání (.NET)

Pomocí služby Azure IoT Hub můžete plánovat a sledovat úlohy, které aktualizují miliony zařízení. Použití úloh k:

  • Aktualizace požadovaných vlastností

  • Aktualizace značek

  • Vyvolání přímých metod

Úloha zabalí jednu z těchto akcí a sleduje provádění proti sadě zařízení definovaných dotazem dvojčete zařízení. Back-endová aplikace může například pomocí úlohy vyvolat přímou metodu na 10 000 zařízeních, která zařízení restartuje. Zadáte sadu zařízení s dotazem dvojčete zařízení a naplánujete spuštění úlohy v budoucnu. Úloha sleduje průběh, když každé zařízení přijímá a spouští přímou metodu restartování.

Další informace o každé z těchto funkcí najdete tady:

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

V tomto článku se dozvíte, jak vytvořit dvě konzolové aplikace .NET (C#):

  • Aplikace zařízení SimulateDeviceMethods, která implementuje přímou metodu s názvem LockDoor, kterou může volat back-endová aplikace.

  • Back-endová aplikace ScheduleJob, která vytvoří dvě úlohy. Jedna úloha volá přímou metodu lockDoor a jiná úloha odesílá aktualizace požadovaných vlastností do více zařízení.

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.

  • Zařízení zaregistrované ve službě IoT Hub. Pokud ve službě IoT Hub nemáte zařízení, postupujte podle pokynů v části Registrace zařízení.

  • 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 řešení tohoto problému najdete v tématu Připojení ke službě IoT Hub (MQTT).

Vytvoření aplikace simulovaného zařízení

V této části vytvoříte konzolovou aplikaci .NET, která reaguje na přímou metodu volanou back-endem řešení.

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

  1. V sadě Visual Studio vyberte Vytvořit nový projekt a pak zvolte šablonu projektu Konzolová aplikace (.NET Framework). Pokračujte výběrem tlačítka Další.

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

    Snímek obrazovky s automaticky otevíranou obrazovkou Konfigurace nového projektu v sadě 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 myši na projekt SimulateDeviceMethods a pak vyberte Spravovat balíčky NuGet.

  5. V Správce balíčků NuGet vyberte Procházet a vyhledejte a zvolte Microsoft.Azure.Devices.Client. Vyberte volbu Instalovat.

    Snímek obrazovky Správce balíčků NuGet v sadě Visual Studio

    Tento krok stáhne, nainstaluje a přidá odkaz na balíček NuGet sady Sdk pro zařízení 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.Client;
    using Microsoft.Azure.Devices.Shared;
    using Newtonsoft.Json;
    using System.Threading.Tasks;
    using System.Text;
    
  7. Do třídy Program přidejte následující pole. Nahraďte zástupnou hodnotu připojovací řetězec zařízení, které jste si poznamenali v předchozí části:

    static string DeviceConnectionString = "<yourDeviceConnectionString>";
    static DeviceClient Client = null;
    
  8. Přidejte do zařízení následující kód, který implementuje přímou metodu:

    static Task<MethodResponse> LockDoor(MethodRequest methodRequest, object userContext)
    {
        Console.WriteLine();
        Console.WriteLine("Locking Door!");
        Console.WriteLine("\nReturning response for method {0}", methodRequest.Name);
    
        string result = "'Door was locked.'";
        return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200));
    }
    
  9. Přidejte následující metodu pro implementaci naslouchacího procesu dvojčat zařízení na zařízení:

    private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, 
      object userContext)
    {
        Console.WriteLine("Desired property change:");
        Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
    }
    
  10. Nakonec do metody Main přidejte následující kód, který otevře připojení k centru IoT a inicializuje naslouchací proces metody:

    try
    {
        Console.WriteLine("Connecting to hub");
        Client = DeviceClient.CreateFromConnectionString(DeviceConnectionString, 
          TransportType.Mqtt);
    
        Client.SetMethodHandlerAsync("LockDoor", LockDoor, null);
        Client.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null);
    
        Console.WriteLine("Waiting for direct method call and device twin update\n Press enter to exit.");
        Console.ReadLine();
    
        Console.WriteLine("Exiting...");
    
        Client.SetMethodHandlerAsync("LockDoor", null, null);
        Client.CloseAsync().Wait();
    }
    catch (Exception ex)
    {
        Console.WriteLine();
        Console.WriteLine("Error in sample: {0}", ex.Message);
    }
    
  11. Uložte si práci a sestavte řešení.

Poznámka:

Aby bylo všechno jednoduché, tento článek neimplementuje zásady opakování. V produkčním kódu byste měli implementovat zásady opakování (například opakování připojení), jak navrhuje zpracování přechodných chyb.

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

V tomto článku vytvoříte back-endovou službu, která naplánuje úlohu, která vyvolá přímou metodu na zařízení, naplánuje úlohu pro aktualizaci dvojčete zařízení a sleduje průběh každé úlohy. K provedení těchto operací potřebuje vaše služba oprávnění ke čtení registru a 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é těmto oprávněním udělí.

Pokud chcete získat připojovací řetězec ioT Hubu pro zásadu registryReadWrite, 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 seznamu zásad vyberte zásadu registryReadWrite .

  4. Zkopírujte 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

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.

Plánování úloh pro volání přímé metody a odesílání aktualizací dvojčat zařízení

V této části vytvoříte konzolovou aplikaci .NET (pomocí jazyka C#), která používá úlohy k volání přímé metody LockDoor a odesílání aktualizací požadovaných vlastností do více zařízení.

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

  2. V části Konfigurace nového projektu pojmenujte projekt ScheduleJob a pak vyberte Vytvořit.

    Pojmenování a konfigurace projektu ScheduleJob

    Snímek obrazovky s automaticky otevíranou obrazovkou Konfigurace nového projektu v sadě Visual Studio, kde přidáte název

  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 myši na projekt ScheduleJob a pak vyberte Spravovat balíčky NuGet.

  5. V Správce balíčků NuGet vyberte Procházet, vyhledejte a zvolte Microsoft.Azure.Devices a pak vyberte Nainstalovat.

    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;
    using Microsoft.Azure.Devices.Shared;
    
  7. Pokud ještě není k dispozici ve výchozích příkazech, přidejte následující using příkaz.

    using System.Threading;
    using System.Threading.Tasks;
    
  8. Do třídy Program přidejte následující pole. Zástupné symboly nahraďte připojovací řetězec IoT Hub, který jste zkopírovali dříve v části Získání připojovací řetězec centra IoT a názvu vašeho zařízení.

    static JobClient jobClient;
    static string connString = "<yourIotHubConnectionString>";
    static string deviceId = "<yourDeviceId>";
    
  9. Do třídy Program přidejte následující metodu.

    public static async Task MonitorJob(string jobId)
    {
        JobResponse result;
        do
        {
            result = await jobClient.GetJobAsync(jobId);
            Console.WriteLine("Job Status : " + result.Status.ToString());
            Thread.Sleep(2000);
        } while ((result.Status != JobStatus.Completed) && 
          (result.Status != JobStatus.Failed));
    }
    
  10. Do třídy Program přidejte následující metodu.

    public static async Task StartMethodJob(string jobId)
    {
        CloudToDeviceMethod directMethod = 
          new CloudToDeviceMethod("LockDoor", TimeSpan.FromSeconds(5), 
          TimeSpan.FromSeconds(5));
    
        JobResponse result = await jobClient.ScheduleDeviceMethodAsync(jobId,
            $"DeviceId IN ['{deviceId}']",
            directMethod,
            DateTime.UtcNow,
            (long)TimeSpan.FromMinutes(2).TotalSeconds);
    
        Console.WriteLine("Started Method Job");
    }
    
  11. Do třídy Program přidejte další metodu:

    public static async Task StartTwinUpdateJob(string jobId)
    {
        Twin twin = new Twin(deviceId);
        twin.Tags = new TwinCollection();
        twin.Tags["Building"] = "43";
        twin.Tags["Floor"] = "3";
        twin.ETag = "*";
    
        twin.Properties.Desired["LocationUpdate"] = DateTime.UtcNow;
    
        JobResponse createJobResponse = jobClient.ScheduleTwinUpdateAsync(
            jobId,
            $"DeviceId IN ['{deviceId}']", 
            twin, 
            DateTime.UtcNow, 
            (long)TimeSpan.FromMinutes(2).TotalSeconds).Result;
    
        Console.WriteLine("Started Twin Update Job");
    }
    

    Poznámka:

    Další informace o syntaxi dotazů najdete v dotazovacím jazyce služby IoT Hub.

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

    Console.WriteLine("Press ENTER to start running jobs.");
    Console.ReadLine();
    
    jobClient = JobClient.CreateFromConnectionString(connString);
    
    string methodJobId = Guid.NewGuid().ToString();
    
    StartMethodJob(methodJobId);
    MonitorJob(methodJobId).Wait();
    Console.WriteLine("Press ENTER to run the next job.");
    Console.ReadLine();
    
    string twinUpdateJobId = Guid.NewGuid().ToString();
    
    StartTwinUpdateJob(twinUpdateJobId);
    MonitorJob(twinUpdateJobId).Wait();
    Console.WriteLine("Press ENTER to exit.");
    Console.ReadLine();
    
  13. Uložte si práci a sestavte řešení.

Spouštění aplikací

Nyní jste připraveni aplikaci spustit.

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

  2. Vyberte Možnost Společné vlastnosti>Spouštěný projekt a pak vyberte Více projektů po spuštění.

  3. Ujistěte se, že SimulateDeviceMethods je v horní části seznamu následovaný ScheduleJob. Nastavte obě jejich akce na Start a vyberte OK.

  4. Spusťte projekty kliknutím na Start nebo přejděte do nabídky Ladění a klepněte na tlačítko Spustit ladění.

    Zobrazí se výstup ze zařízení i back-endových aplikací.

    Spuštění aplikací pro plánování úloh

Další kroky

V tomto článku jste naplánovali úlohy, které spustí přímou metodu a aktualizují vlastnosti dvojčete zařízení.

Pokud chcete pokračovat ve zkoumání vzorů správy ioT Hubu a zařízení, aktualizujte image ve službě Device Update pro Azure IoT Hub pomocí referenční image Raspberry Pi 3 B+.