Share via


Feladatok ütemezése és közvetítése (.NET)

A Azure IoT Hub használatával ütemezheti és nyomon követheti a több millió eszközt frissítő feladatokat. Feladatok használata a következőhöz:

  • Eszköz kívánt tulajdonságainak frissítése

  • Címkék frissítése

  • Közvetlen metódusok meghívása

A feladatok az alábbi műveletek egyikét burkolják, és nyomon követik a végrehajtást egy ikereszköz-lekérdezés által meghatározott eszközkészleten. Egy háttéralkalmazás például egy feladat használatával meghívhat egy közvetlen metódust 10 000 olyan eszközön, amely újraindítja az eszközöket. Megadhatja az eszközkészletet ikereszköz-lekérdezéssel, és ütemezheti, hogy a feladat egy későbbi időpontban fusson. A feladat nyomon követi az előrehaladást, amint az egyes eszközök megkapják és végrehajtják a közvetlen újraindítási metódust.

Ha többet szeretne megtudni ezekről a képességekről, tekintse meg a következő témakört:

Megjegyzés

A cikkben ismertetett funkciók csak a IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub szintekkel kapcsolatos további információkért lásd: A megoldáshoz megfelelő IoT Hub szint kiválasztása.

Ez a cikk bemutatja, hogyan hozhat létre két .NET-konzolalkalmazást:

  • Egy SimulateDeviceMethods nevű eszközalkalmazás, amely a LockDoor nevű közvetlen metódust valósítja meg, amelyet a háttéralkalmazás hívhat meg.

  • Egy ScheduleJob nevű háttéralkalmazás, amely két feladatot hoz létre. Az egyik feladat meghívja a lockDoor közvetlen metódust, egy másik feladat pedig több eszközre küldi a kívánt tulajdonságfrissítéseket.

Megjegyzés

Az eszköz- és háttéralkalmazások készítéséhez elérhető SDK-eszközökről az Azure IoT SDK-k című témakörben olvashat bővebben.

Előfeltételek

  • A Visual Studióval.

  • Egy IoT Hub. Hozzon létre egyet a parancssori felülettel vagy a Azure Portal.

  • Regisztrált eszköz. Regisztráljon egyet a Azure Portal.

  • Győződjön meg arról, hogy a 8883-as port nyitva van a tűzfalon. A cikkben szereplő eszközminta MQTT protokollt használ, amely a 8883-es porton keresztül kommunikál. Ez a port bizonyos vállalati és oktatási hálózati környezetben blokkolva lehet. További információkért és a probléma megkerülésének módjaiért lásd: Csatlakozás IoT Hub -hez (MQTT).

Szimulált eszközalkalmazás létrehozása

Ebben a szakaszban egy .NET-konzolalkalmazást hoz létre, amely a megoldás háttérrendszere által meghívott közvetlen metódusra válaszol.

  1. A Visual Studióban válassza az Új projekt létrehozása lehetőséget, majd válassza a Konzolalkalmazás (.NET-keretrendszer) projektsablont. A folytatáshoz válassza a Tovább gombot.

  2. Az Új projekt konfigurálása területen nevezze el a SimulateDeviceMethods projektet, majd válassza a Tovább gombot.

    Képernyőkép az

  3. Fogadja el a .NET-keretrendszer alapértelmezett verzióját, majd válassza a Létrehozás lehetőséget a projekt létrehozásához.

  4. A Megoldáskezelő kattintson a jobb gombbal a SimulateDeviceMethods projektre, majd válassza a Manage NuGet Packages (NuGet-csomagok kezelése) lehetőséget.

  5. A NuGet Package Managerben válassza a Tallózás lehetőséget , keressen rá, majd válassza a Microsoft.Azure.Devices.Client elemet. Válassza a Telepítés gombot.

    Képernyőkép a NuGet-csomagkezelőről a Visual Studióban.

    Ez a lépés letölti, telepíti és hozzáadja az Azure IoT-eszköz SDK NuGet-csomagjára és függőségeire mutató hivatkozást.

  6. Adja hozzá a következő usingutasításokat a Program.cs fájl elejéhez:

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    using Newtonsoft.Json;
    using System.Threading.Tasks;
    using System.Text;
    
  7. Adja hozzá a Program osztályhoz a következő mezőket: Cserélje le a helyőrző értékét az előző szakaszban feljegyzett eszköz kapcsolati sztring:

    static string DeviceConnectionString = "<yourDeviceConnectionString>";
    static DeviceClient Client = null;
    
  8. Adja hozzá a következő kódot a közvetlen metódus implementálásához az eszközön:

    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. Adja hozzá az alábbi módszert az ikereszköz-figyelő implementálásához az eszközön:

    private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, 
      object userContext)
    {
        Console.WriteLine("Desired property change:");
        Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
    }
    
  10. Végül adja hozzá a következő kódot a Main metódushoz az IoT Hubhoz való csatlakozás megnyitásához és a metódusfigyelő inicializálásához:

    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. Mentse a munkáját, és hozza létre a megoldást.

Megjegyzés

Az egyszerűség érdekében ez a cikk nem valósít meg újrapróbálkozési szabályzatokat. Az éles kódban újrapróbálkozási szabályzatokat (például kapcsolat-újrapróbálkozási szabályzatokat) kell implementálnia az átmeneti hibakezelésben javasolt módon.

Az IoT Hub kapcsolati sztring lekérése

Ebben a cikkben létrehoz egy háttérszolgáltatást, amely ütemez egy feladatot egy közvetlen metódus meghívására egy eszközön, ütemez egy feladatot az ikereszköz frissítésére, és figyeli az egyes feladatok előrehaladását. Ezeknek a műveleteknek a végrehajtásához a szolgáltatásnak a beállításjegyzék olvasási és beállításjegyzék-írási engedélyére van szüksége. Alapértelmezés szerint minden IoT Hub egy registryReadWrite nevű megosztott hozzáférési szabályzattal jön létre, amely megadja ezeket az engedélyeket.

A registryReadWrite szabályzathoz tartozó IoT Hub kapcsolati sztring az alábbi lépésekkel szerezheti be:

  1. A Azure Portal válassza az Erőforráscsoportok lehetőséget. Válassza ki azt az erőforráscsoportot, ahol a központ található, majd válassza ki a központot az erőforrások listájából.

  2. A központ bal oldali paneljén válassza a Megosztott hozzáférési szabályzatok lehetőséget.

  3. A szabályzatok listájában válassza a beállításjegyzékReadWrite szabályzatát .

  4. Másolja ki az Elsődleges kapcsolati sztring, és mentse az értéket.

    Képernyőfelvétel a kapcsolati sztring lekéréséről

A IoT Hub megosztott hozzáférési szabályzatokkal és engedélyekkel kapcsolatos további információkért lásd: Hozzáférés-vezérlés és engedélyek.

Feladatok ütemezése közvetlen metódus meghívásához és ikereszköz-frissítések küldéséhez

Ebben a szakaszban létrehoz egy .NET-konzolalkalmazást (C#használatával), amely feladatokkal hívja meg a LockDoor közvetlen metódust, és a kívánt tulajdonságfrissítéseket több eszközre küldi.

  1. A Visual Studióban válassza azÚj>projekt fájlja> lehetőséget. Az Új projekt létrehozása területen válassza a Konzolalkalmazás (.NET-keretrendszer) lehetőséget, majd válassza a Tovább gombot.

  2. Az Új projekt konfigurálása területen nevezze el a project ScheduleJob nevet, majd válassza a Létrehozás lehetőséget.

    A ScheduleJob-projekt elnevezése és konfigurálása

    Képernyőkép az

  3. Fogadja el a .NET-keretrendszer alapértelmezett verzióját, majd válassza a Létrehozás lehetőséget a projekt létrehozásához.

  4. A Megoldáskezelő kattintson a jobb gombbal a ScheduleJob projektre, majd válassza a Manage NuGet Packages (NuGet-csomagok kezelése) lehetőséget.

  5. A NuGet-csomagkezelőben válassza a Tallózás lehetőséget, keresse meg és válassza a Microsoft.Azure.Devices elemet, majd válassza a Telepítés lehetőséget.

    Ez a lépés letölti, telepíti és hozzáad egy hivatkozást az Azure IoT service SDK NuGet-csomaghoz és függőségeihez.

  6. Adja hozzá a következő usingutasításokat a Program.cs fájl elejéhez:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  7. Adja hozzá a következő using utasítást, ha még nem szerepel az alapértelmezett utasításokban.

    using System.Threading;
    using System.Threading.Tasks;
    
  8. Adja hozzá a Program osztályhoz a következő mezőket: Cserélje le a helyőrzőket az IoT Hub kapcsolati sztring lekérése és az eszköz neve című témakörben korábban másolt IoT Hub kapcsolati sztring.

    static JobClient jobClient;
    static string connString = "<yourIotHubConnectionString>";
    static string deviceId = "<yourDeviceId>";
    
  9. Adja hozzá a Program osztályhoz a következő módszert:

    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. Adja hozzá a Program osztályhoz a következő módszert:

    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. Adjon hozzá egy másik metódust a Program osztályhoz:

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

    Megjegyzés

    További információ a lekérdezési szintaxisról: IoT Hub lekérdezési nyelv.

  12. Végül adja a következő sorokat a Main metódushoz:

    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. Mentse a munkáját, és hozza létre a megoldást.

Az alkalmazások futtatása

Most már készen áll az alkalmazások futtatására.

  1. A Visual Studio Megoldáskezelő kattintson a jobb gombbal a megoldásra, majd válassza az Indítási projektek beállítása lehetőséget.

  2. Válassza a Common Properties Startup Project ( Közös tulajdonságok>indítási projektje) lehetőséget, majd válassza a Több indítási projekt lehetőséget.

  3. Győződjön meg arról, hogy SimulateDeviceMethods a lista tetején van, majd a következővel ScheduleJob: . Állítsa mindkét műveletet a Start értékre , és válassza az OK gombot.

  4. Futtassa a projekteket a Start gombra kattintva, vagy nyissa meg a Hibakeresés menüt, és kattintson a Hibakeresés indítása parancsra.

    Az eszköz és a háttéralkalmazások kimenetét is láthatja.

    Feladatok ütemezéséhez futtassa az alkalmazásokat

Következő lépések

Ebben a cikkben a feladatokat egy közvetlen metódus futtatására és az ikereszköz tulajdonságainak frissítésére ütemezte.

A IoT Hub és az eszközkezelési minták megismeréséhez frissítsen egy képet az Eszközfrissítésben Azure IoT Hub oktatóanyaghoz a Raspberry Pi 3 B+ referenciarendszerkép használatával.