Share via


Taken plannen en uitzenden (.NET)

Gebruik Azure IoT Hub om taken te plannen en bij te houden die miljoenen apparaten bijwerken. Taken gebruiken om:

  • Gewenste eigenschappen bijwerken

  • Tags bijwerken

  • Directe methoden aanroepen

Een taak verpakt een van deze acties en houdt de uitvoering bij op basis van een set apparaten die is gedefinieerd door een query voor een apparaatdubbel. Een back-end-app kan bijvoorbeeld een taak gebruiken om een directe methode aan te roepen op 10.000 apparaten waarmee de apparaten opnieuw worden opgestart. U geeft de set apparaten op met een apparaatdubbelquery en plant de taak om op een later tijdstip uit te voeren. De taak houdt de voortgang bij wanneer elk van de apparaten de directe methode voor opnieuw opstarten ontvangt en uitvoert.

Zie voor meer informatie over elk van deze mogelijkheden:

Notitie

De functies die in dit artikel worden beschreven, zijn alleen beschikbaar in de standaardlaag van de IoT Hub. Zie De juiste IoT Hub laag voor uw oplossing kiezen voor meer informatie over de lagen Basic en Standard/free IoT Hub.

In dit artikel wordt beschreven hoe u twee .NET-console-apps (C#) maakt:

  • Een apparaat-app, SimulateDeviceMethods, die een directe methode implementeert met de naam LockDoor, die kan worden aangeroepen door de back-end-app.

  • Een back-end-app, ScheduleJob, waarmee twee taken worden gemaakt. De ene taak roept de directe methode lockDoor aan en een andere taak verzendt de gewenste eigenschapsupdates naar meerdere apparaten.

Notitie

Zie Azure IoT SDK's voor meer informatie over de SDK-hulpprogramma's die beschikbaar zijn voor het bouwen van zowel apparaat- als back-end-apps.

Vereisten

  • Visual Studio.

  • Een IoT-hub. Maak er een met de CLI of de Azure Portal.

  • Een geregistreerd apparaat. Registreer er een in de Azure Portal.

  • Zorg ervoor dat de poort 8883 is geopend in de firewall. Het apparaatvoorbeeld in dit artikel maakt gebruik van het MQTT-protocol, dat communiceert via poort 8883. Deze poort is in sommige netwerkomgevingen van bedrijven en onderwijsinstellingen mogelijk geblokkeerd. Zie Verbinding maken met IoT Hub (MQTT) voor meer informatie en manieren om dit probleem te omzeilen.

Een gesimuleerde apparaattoepassing maken

In deze sectie maakt u een .NET-console-app die reageert op een directe methode die wordt aangeroepen door de back-end van de oplossing.

  1. Selecteer in Visual Studio een nieuw project maken en kies vervolgens de projectsjabloon Console-app (.NET Framework). Selecteer Volgende om door te gaan.

  2. In Uw nieuwe project configureren geeft u het project de naam SimulateDeviceMethods en selecteert u Volgende.

    Schermopname van de pop-up 'Uw nieuwe project configureren' in Visual Studio.

  3. Accepteer de standaardversie van de .NET Framework selecteer vervolgens Maken om het project te maken.

  4. Klik in Solution Explorer met de rechtermuisknop op het project SimulateDeviceMethods en selecteer NuGet-pakketten beheren.

  5. Selecteer in NuGet Package Managerde optie Bladeren en zoek naar en kies Microsoft.Azure.Devices.Client. Selecteer Installeren.

    Schermopname van NuGet Package Manager in Visual Studio.

    In deze stap worden het NuGet-pakket van de Azure IoT-apparaat-SDK en de bijbehorende afhankelijkheden gedownload, geïnstalleerd en toegevoegd.

  6. Voeg aan het begin van het bestand Program.cs de volgende using instructies toe:

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    using Newtonsoft.Json;
    using System.Threading.Tasks;
    using System.Text;
    
  7. Voeg de volgende velden toe aan de klasse Program: Vervang de waarde van de tijdelijke aanduiding door de apparaat-connection string die u in de vorige sectie hebt genoteerd:

    static string DeviceConnectionString = "<yourDeviceConnectionString>";
    static DeviceClient Client = null;
    
  8. Voeg de volgende code toe om de directe methode op het apparaat te implementeren:

    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. Voeg de volgende methode toe om de listener voor apparaatdubbels op het apparaat te implementeren:

    private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, 
      object userContext)
    {
        Console.WriteLine("Desired property change:");
        Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
    }
    
  10. Voeg ten slotte de volgende code toe aan de methode Main om de verbinding met uw IoT-hub te openen en de methode-listener te initialiseren:

    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. Sla uw werk op en bouw uw oplossing.

Notitie

Om het eenvoudig te houden, wordt in dit artikel geen beleid voor opnieuw proberen geïmplementeerd. In productiecode moet u beleid voor opnieuw proberen implementeren (zoals opnieuw proberen van verbinding), zoals wordt voorgesteld in Tijdelijke foutafhandeling.

De IoT-hub ophalen connection string

In dit artikel maakt u een back-endservice die een taak plant om een directe methode op een apparaat aan te roepen, een taak plant om de apparaatdubbel bij te werken en de voortgang van elke taak bewaakt. Als u deze bewerkingen wilt uitvoeren, heeft uw service de lees - en schrijfmachtigingen voor het register nodig. Standaard wordt elke IoT-hub gemaakt met een gedeeld toegangsbeleid met de naam registryReadWrite dat deze machtigingen verleent.

Voer de volgende stappen uit om de IoT Hub connection string voor het registryReadWrite-beleid op te halen:

  1. Selecteer resourcegroepenin de Azure Portal. Selecteer de resourcegroep waarin uw hub zich bevindt en selecteer vervolgens uw hub in de lijst met resources.

  2. Selecteer In het linkerdeelvenster van uw hub de optie Beleid voor gedeelde toegang.

  3. Selecteer in de lijst met beleidsregels het beleid registryReadWrite .

  4. Kopieer de Primaire connection string en sla de waarde op.

    Schermopname die laat zien hoe u de connection string

Zie Toegangsbeheer en machtigingen voor meer informatie over IoT Hub beleid en machtigingen voor gedeelde toegang.

Taken plannen voor het aanroepen van een directe methode en het verzenden van updates van apparaatdubbels

In deze sectie maakt u een .NET-console-app (met behulp van C#) die gebruikmaakt van taken om de directe methode LockDoor aan te roepen en gewenste eigenschapsupdates naar meerdere apparaten te verzenden.

  1. Selecteer in Visual Studio Bestand>Nieuw>Project. Kies in Een nieuw project makende optie Console-app (.NET Framework) en selecteer vervolgens Volgende.

  2. In Uw nieuwe project configureren geeft u het project de naam ScheduleJob en selecteert u vervolgens Maken.

    Geef uw ScheduleJob-project een naam en configureer deze

    Schermopname van het pop-upvenster 'Uw nieuwe project configureren' in Visual Studio, waar u een naam toevoegt.

  3. Accepteer de standaardversie van de .NET Framework selecteer vervolgens Maken om het project te maken.

  4. Klik in Solution Explorer met de rechtermuisknop op het project ScheduleJob en selecteer Vervolgens NuGet-pakketten beheren.

  5. Selecteer in NuGet Package Manager de optie Bladeren, zoek en kies Microsoft.Azure.Devices en selecteer vervolgens Installeren.

    Met deze stap worden het NuGet-pakket van de Azure IoT-service-SDK en de bijbehorende afhankelijkheden gedownload, geïnstalleerd en toegevoegd.

  6. Voeg aan het begin van het bestand Program.cs de volgende using instructies toe:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  7. Voeg de volgende using instructie toe als deze nog niet aanwezig is in de standaardinstructies.

    using System.Threading;
    using System.Threading.Tasks;
    
  8. Voeg de volgende velden toe aan de klasse Program: Vervang de tijdelijke aanduidingen door de IoT Hub connection string die u eerder hebt gekopieerd in De IoT-hub ophalen connection string en de naam van uw apparaat.

    static JobClient jobClient;
    static string connString = "<yourIotHubConnectionString>";
    static string deviceId = "<yourDeviceId>";
    
  9. Voeg de volgende methode toe aan de klasse Program:

    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. Voeg de volgende methode toe aan de klasse Program:

    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. Voeg een andere methode toe aan de klasse Program :

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

    Notitie

    Zie IoT Hub querytaal voor meer informatie over de querysyntaxis.

  12. Voeg tot slot de volgende regels toe aan de methode Main:

    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. Sla uw werk op en bouw uw oplossing.

De apps uitvoeren

U kunt nu de apps uitvoeren.

  1. Klik in de Visual Studio-Solution Explorer met de rechtermuisknop op uw oplossing en selecteer vervolgens Opstartprojecten instellen.

  2. Selecteer Algemene eigenschappen>Opstartproject en selecteer vervolgens Meerdere opstartprojecten.

  3. Zorg ervoor dat SimulateDeviceMethods bovenaan de lijst staat, gevolgd door ScheduleJob. Stel beide acties in op Start en selecteer OK.

  4. Voer de projecten uit door te klikken op Start of ga naar het menu Foutopsporing en klik op Foutopsporing starten.

    U ziet de uitvoer van zowel apparaat- als back-end-apps.

    De apps uitvoeren om taken te plannen

Volgende stappen

In dit artikel hebt u taken gepland om een directe methode uit te voeren en de eigenschappen van de apparaatdubbel bij te werken.

Als u IoT Hub- en apparaatbeheerpatronen wilt blijven verkennen, werkt u een afbeelding bij in Device Update voor Azure IoT Hub zelfstudie met behulp van de Raspberry Pi 3 B+ Reference Image.