Bagikan melalui


Menjadwalkan dan menyiarkan pekerjaan (.NET)

Gunakan Azure IoT Hub untuk menjadwalkan dan melacak pekerjaan yang memperbarui jutaan perangkat. Gunakan pekerjaan untuk:

  • Memperbarui properti yang diinginkan

  • Memperbarui tag

  • Memanggil metode langsung

Pekerjaan membungkus salah satu tindakan ini dan melacak eksekusi terhadap kumpulan perangkat yang didefinisikan oleh kueri kembar perangkat. Misalnya, aplikasi ujung belakang dapat menggunakan pekerjaan untuk memanggil metode langsung pada 10.000 perangkat yang mereboot perangkat. Anda menentukan kumpulan perangkat dengan kueri perangkat kembar dan menjadwalkan pekerjaan untuk dijalankan di waktu mendatang. Pekerjaan melacak kemajuan saat masing-masing perangkat menerima dan menjalankan metode langsung reboot.

Untuk mempelajari lebih lanjut tentang masing-masing kemampuan ini, lihat:

Catatan

Fitur yang dijelaskan dalam artikel ini hanya tersedia di tingkat standar IoT Hub. Untuk informasi selengkapnya tentang tingkat IoT Hub dasar dan standar/gratis, lihat Memilih tingkat IoT Hub yang tepat untuk solusi Anda.

Artikel ini menunjukkan kepada Anda cara membuat dua aplikasi konsol .NET (C#):

  • Aplikasi perangkat, SimulateDeviceMethods, yang mengimplementasikan metode langsung yang disebut LockDoor, yang dapat dipanggil oleh aplikasi back-end.

  • Aplikasi back-end, ScheduleJob, yang membuat dua pekerjaan. Satu pekerjaan memanggil metode langsung lockDoor dan pekerjaan lain mengirimkan pembaruan properti yang diinginkan ke beberapa perangkat.

Catatan

Lihat Azure IoT SDK untuk informasi selengkapnya tentang alat SDK yang tersedia untuk membangun aplikasi perangkat dan back-end.

Prasyarat

  • Visual Studio.

  • Hub IoT. Membuat satu dengan CLI atau portal Azure.

  • Perangkat yang terdaftar di hub IoT Anda. Jika Anda tidak memiliki perangkat di hub IoT Anda, ikuti langkah-langkah di Mendaftarkan perangkat.

  • Pastikan port 8883 terbuka di firewall Anda. Sampel perangkat dalam artikel ini menggunakan protokol MQTT, yang berkomunikasi melalui port 8883. Port ini dapat diblokir di beberapa lingkungan jaringan perusahaan dan pendidikan. Untuk informasi selengkapnya dan cara mengatasi masalah ini, lihat Menyambungkan ke Azure IoT Hub (MQTT).

Membuat aplikasi perangkat yang disimulasikan

Di bagian ini, Anda membuat aplikasi konsol .NET yang merespons metode langsung yang disebut dengan back end solusi.

  1. Buka Visual Studio, pilih Buat project baru, lalu pilih template project Console App (.NET Framework). Untuk melanjutkan, klik Berikutnya.

  2. Di Konfigurasikan proyek baru Anda, beri nama proyek SimulateDeviceMethods lalu pilih Berikutnya.

    Cuplikan layar popup 'Konfigurasikan proyek baru Anda' di Visual Studio.

  3. Terima versi default .NET Framework, lalu pilih Buat untuk membuat proyek.

  4. Di Penjelajah Solusi, klik kanan proyek SimulateDeviceMethods lalu pilih Kelola Paket NuGet.

  5. Di Manajer Paket NuGet, pilih Telusuri dan cari lalu pilih Microsoft.Azure.Devices.Client. Pilih Instal.

    Cuplikan layar Manajer Paket NuGet di Visual Studio.

    Langkah ini mengunduh, memasang, dan menambahkan referensi ke Paket NuGet SDK perangkat Azure IoT dan dependensinya.

  6. Tambahkan pernyataan berikut using ke bagian atas file Program.cs:

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    using Newtonsoft.Json;
    using System.Threading.Tasks;
    using System.Text;
    
  7. Tambahkan bidang berikut ke kelas Program. Ganti nilai tempat penampung dengan string koneksi perangkat yang Anda catat pada bagian sebelumnya:

    static string DeviceConnectionString = "<yourDeviceConnectionString>";
    static DeviceClient Client = null;
    
  8. Tambahkan kode berikut untuk mengimplementasikan metode langsung pada perangkat:

    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. Tambahkan metode berikut untuk mengimplementasikan pendengar kembar perangkat pada perangkat:

    private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, 
      object userContext)
    {
        Console.WriteLine("Desired property change:");
        Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
    }
    
  10. Terakhir, tambahkan kode berikut ke metode Utama untuk membuka koneksi ke IoT hub Anda dan memulai pendengar metode:

    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. Simpan pekerjaan Anda dan buat solusi Anda.

Catatan

Untuk mempermudah, artikel ini tidak menerapkan kebijakan percobaan kembali. Dalam kode produksi, Anda harus menerapkan kebijakan coba lagi (seperti coba lagi koneksi), seperti yang disarankan dalam penanganan kesalahan Sementara.

Mendapatkan string koneksi IoT hub

Dalam artikel ini, Anda membuat layanan back-end yang menjadwalkan pekerjaan untuk memanggil metode langsung pada perangkat, menjadwalkan pekerjaan untuk memperbarui kembaran perangkat, dan memantau kemajuan setiap pekerjaan. Untuk melakukan operasi ini, layanan Anda memerlukan izin baca registri dan penulisan registri. Secara default, setiap hub IoT dibuat dengan kebijakan akses bersama bernama registryReadWrite yang memberikan izin ini.

Untuk mendapatkan string koneksi IoT Hub untuk kebijakan registryReadWrite, ikuti langkah-langkah berikut:

  1. Di portal Azure, pilih Grup sumber daya. Pilih grup sumber daya tempat hub Anda berada, lalu pilih hub Anda dari daftar sumber daya.

  2. Di panel sisi kiri hub Anda, pilih Kebijakan akses bersama.

  3. Dari daftar kebijakan, pilih kebijakan registryReadWrite.

  4. Salin String koneksi utama dan simpan nilainya.

    Cuplikan layar yang menampilkan cara mengambil string koneksi

Untuk mengetahui informasi selengkapnya tentang kebijakan dan izin akses bersama IoT Hub, lihat Kontrol akses dan izin.

Menjadwalkan pekerjaan untuk memanggil metode langsung dan mengirim pembaruan kembar perangkat

Di bagian ini, Anda membuat aplikasi konsol .NET (menggunakan C#) yang menggunakan pekerjaan untuk memanggil metode langsung LockDoor dan mengirim pembaruan properti yang diinginkan ke beberapa perangkat.

  1. Di Visual Studio, pilih File>Baru>Proyek. Di Buat proyek baru, pilih Aplikasi Konsol (.NET Framework), lalu pilih Berikutnya.

  2. Di Konfigurasikan proyek baru Anda, beri nama proyek ScheduleJob lalu pilih Buat.

    Memberi nama dan mengonfigurasi proyek ScheduleJob Anda

    Cuplikan layar popup 'Konfigurasikan proyek baru Anda' di Visual Studio, tempat Anda menambahkan nama.

  3. Terima versi default .NET Framework, lalu pilih Buat untuk membuat proyek.

  4. Pada Penjelajah Solusi, klik kanan proyek ScheduleJob, dan pilih Kelola Paket NuGet.

  5. Di Manajer Paket NuGet, pilih Telusuri cari lalu pilih Microsoft.Azure.Devices, lalu pilih Pasang.

    Langkah ini mengunduh, memasang, dan menambahkan referensi ke paket NuGet SDK layanan Azure IoT dan dependensinya.

  6. Tambahkan pernyataan berikut using ke bagian atas file Program.cs:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  7. Tambahkan pernyataan using berikut jika belum ada dalam pernyataan default.

    using System.Threading;
    using System.Threading.Tasks;
    
  8. Tambahkan bidang berikut ke kelas Program. Ganti tempat penampung dengan string koneksi Hub IoT yang Anda salin sebelumnya di Dapatkan string koneksi hub IoT dan nama perangkat Anda.

    static JobClient jobClient;
    static string connString = "<yourIotHubConnectionString>";
    static string deviceId = "<yourDeviceId>";
    
  9. Tambahkan metode berikut ke kelas 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. Tambahkan metode berikut ke kelas 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. Tambahkan metode lain ke kelas 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");
    }
    

    Catatan

    Untuk informasi selengkapnya tentang sintaks kueri, lihat Bahasa kueri Hub IoT.

  12. Terakhir, tambahkan baris berikut ke metode 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. Simpan pekerjaan Anda dan buat solusi Anda.

Menjalankan aplikasi

Anda sekarang siap untuk menjalankan aplikasi.

  1. Di Penjelajah Solusi Visual Studio, klik kanan solusi Anda, lalu pilih Atur Proyek StartUp.

  2. Pilih Properti Umum>Startup Project, lalu pilih Beberapa proyek startup.

  3. Pastikan SimulateDeviceMethods berada di bagian atas daftar diikuti oleh ScheduleJob. Atur kedua tindakan mereka ke Mulai dan pilih OK.

  4. Jalankan proyek dengan mengklik Mulai atau masuk ke menu Debug dan klik Mulai Debugging.

    Anda akan melihat output dari kedua perangkat dan aplikasi back-end.

    Jalankan aplikasi untuk menjadwalkan pekerjaan

Langkah berikutnya

Dalam artikel ini, Anda menjadwalkan pekerjaan untuk menjalankan metode langsung dan memperbarui properti kembar perangkat.

Untuk terus menjelajahi IoT Hub dan pola pengelolaan perangkat, perbarui gambar di tutorial Pembaruan Perangkat untuk Azure IoT Hub menggunakan Gambar Referensi Raspberry Pi 3 B+.