Ú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:
Dvojče zařízení a vlastnosti: Začínáme s dvojčaty zařízení a principy a používání dvojčat zařízení ve službě IoT Hub
Přímé metody: Příručka pro vývojáře ioT Hubu – přímé metody
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í.
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ší.
V části Konfigurace nového projektu pojmenujte projekt SimulateDeviceMethods a pak vyberte Další.
Přijměte výchozí verzi rozhraní .NET Framework a pak vyberte Vytvořit a vytvořte projekt.
V Průzkumník řešení klikněte pravým tlačítkem myši na projekt SimulateDeviceMethods a pak vyberte Spravovat balíčky NuGet.
V Správce balíčků NuGet 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.
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;
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;
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)); }
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)); }
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); }
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:
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.
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í.
V sadě Visual Studio vyberte Soubor>nový>projekt. V části Vytvořit nový projekt zvolte Konzolová aplikace (.NET Framework) a pak vyberte Další.
V části Konfigurace nového projektu pojmenujte projekt ScheduleJob a pak vyberte Vytvořit.
Přijměte výchozí verzi rozhraní .NET Framework a pak vyberte Vytvořit a vytvořte projekt.
V Průzkumník řešení klikněte pravým tlačítkem myši na projekt ScheduleJob a pak vyberte Spravovat balíčky NuGet.
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.
Do horní části souboru Program.cs přidejte následující příkazy
using
:using Microsoft.Azure.Devices; using Microsoft.Azure.Devices.Shared;
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;
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>";
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)); }
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"); }
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.
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();
Uložte si práci a sestavte řešení.
Spouštění aplikací
Nyní jste připraveni aplikaci spustit.
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í.
Vyberte Možnost Společné vlastnosti>Spouštěný projekt a pak vyberte Více projektů po spuštění.
Ujistěte se, že
SimulateDeviceMethods
je v horní části seznamu následovanýScheduleJob
. Nastavte obě jejich akce na Start a vyberte OK.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í.
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+.