Bagikan melalui


Menjadwalkan dan menyiarkan pekerjaan (Node.js)

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

Secara konseptual, pekerjaan membungkus salah satu tindakan ini dan melacak kemajuan eksekusi terhadap kumpulan perangkat, yang didefinisikan oleh kueri kembar perangkat. Misalnya, aplikasi backend dapat menggunakan pekerjaan untuk memanggil metode reboot pada 10.000 perangkat, yang ditentukan oleh kueri kembar perangkat dan dijadwalkan pada waktu mendatang. Aplikasi itu kemudian dapat melacak kemajuan saat masing-masing perangkat tersebut menerima dan menjalankan metode reboot.

Pelajari lebih lanjut tentang setiap kemampuan ini di artikel ini:

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 Node.js:

  • Aplikasi perangkat simulasi Node.js, simDevice.js, yang menerapkan metode langsung yang disebut lockDoor, yang dapat dipanggil dengan aplikasi back-end.

  • Aplikasi konsol Node.js, scheduleJobService.js, 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

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

  • Node.js versi 10.0.x atau yang lebih baru. Mempersiapkan lingkungan pengembangan Anda mendeskripsikan cara menginstal Node.js untuk artikel ini pada Windows ataupun Linux.

  • 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 Node.js yang merespons metode langsung yang disebut cloud, yang memicu metode lockDoor simulasi.

  1. Buat folder kosong baru yang disebut simDevice. Di folder simDevice, buat file package.js menggunakan perintah berikut pada perintah Anda. Terima semua defaultnya:

    npm init
    
  2. Pada perintah Anda di folder simDevice, jalankan perintah berikut untuk menginstal paket SDK Perangkat azure-iot-device dan paket azure-iot-device-mqtt:

    npm install azure-iot-device azure-iot-device-mqtt --save
    
  3. Menggunakan editor teks, buat file simDevice.js baru di folder simDevice.

  4. Tambahkan pernyataan 'require' berikut di awal file filesimDevice.js:

    'use strict';
    
    var Client = require('azure-iot-device').Client;
    var Protocol = require('azure-iot-device-mqtt').Mqtt;
    
  5. Tambahkan variabel connectionString dan gunakan untuk membuat instans Klien. Ganti nilai tempat penampung {yourDeviceConnectionString} dengan string koneksi perangkat yang Anda salin sebelumnya.

    var connectionString = '{yourDeviceConnectionString}';
    var client = Client.fromConnectionString(connectionString, Protocol);
    
  6. Tambahkan fungsi berikut untuk menangani metode lockDoor.

    var onLockDoor = function(request, response) {
    
        // Respond the cloud app for the direct method
        response.send(200, function(err) {
            if (err) {
                console.error('An error occurred when sending a method response:\n' + err.toString());
            } else {
                console.log('Response to method \'' + request.methodName + '\' sent successfully.');
            }
        });
    
        console.log('Locking Door!');
    };
    
  7. Tambahkan kode berikut untuk mendaftarkan handler untuk metode lockDoor.

    client.open(function(err) {
         if (err) {
             console.error('Could not connect to IotHub client.');
         }  else {
             console.log('Client connected to IoT Hub. Register handler for lockDoor direct method.');
             client.onDeviceMethod('lockDoor', onLockDoor);
         }
    });
    
  8. Simpan dan tutup file simDevice.js.

Catatan

Untuk mempermudah, artikel ini tidak menerapkan kebijakan coba lagi. Dalam kode produksi, Anda harus menerapkan kebijakan percobaan kembali (seperti backoff eksponensial), seperti yang disarankan dalam artikel, 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 memperbarui properti kembar perangkat

Di bagian ini, Anda membuat aplikasi konsol Node.js yang memulai lockDoor jarak jauh pada perangkat menggunakan metode langsung dan memperbarui properti perangkat kembar.

  1. Buat folder kosong baru yang disebut scheduleJobService. Di folder scheduleJobService, buat file package.js menggunakan perintah berikut ini pada perintah Anda. Terima semua defaultnya:

    npm init
    
  2. Pada perintah Anda di folder scheduleJobService, jalankan perintah berikut untuk menginstal paket SDK Perangkat azure-iothub dan paket azure-iot-device-mqtt:

    npm install azure-iothub uuid --save
    
  3. Menggunakan editor teks, buat file scheduleJobService.js baru di folder scheduleJobService.

  4. Tambahkan pernyataan 'require' berikut di awal file scheduleJobService.js:

    'use strict';
    
    var uuid = require('uuid');
    var JobClient = require('azure-iothub').JobClient;
    
  5. Tambahkan deklarasi variabel berikut. Ganti nilai tempat penampung {iothubconnectionstring} dengan nilai yang Anda salin di Mendapatkan string koneksi hub IoT. Jika Anda mendaftarkan perangkat yang berbeda dari myDeviceId, pastikan untuk mengubahnya dalam kondisi kueri.

    var connectionString = '{iothubconnectionstring}';
    var queryCondition = "deviceId IN ['myDeviceId']";
    var startTime = new Date();
    var maxExecutionTimeInSeconds =  300;
    var jobClient = JobClient.fromConnectionString(connectionString);
    
  6. Tambahkan fungsi berikut yang digunakan untuk memantau pelaksanaan pekerjaan:

    function monitorJob (jobId, callback) {
        var jobMonitorInterval = setInterval(function() {
            jobClient.getJob(jobId, function(err, result) {
            if (err) {
                console.error('Could not get job status: ' + err.message);
            } else {
                console.log('Job: ' + jobId + ' - status: ' + result.status);
                if (result.status === 'completed' || result.status === 'failed' || result.status === 'cancelled') {
                clearInterval(jobMonitorInterval);
                callback(null, result);
                }
            }
            });
        }, 5000);
    }
    
  7. Tambahkan kode berikut untuk menjadwalkan pekerjaan yang memanggil metode perangkat:

    var methodParams = {
        methodName: 'lockDoor',
        payload: null,
        responseTimeoutInSeconds: 15 // Timeout after 15 seconds if device is unable to process method
    };
    
    var methodJobId = uuid.v4();
    console.log('scheduling Device Method job with id: ' + methodJobId);
    jobClient.scheduleDeviceMethod(methodJobId,
                                queryCondition,
                                methodParams,
                                startTime,
                                maxExecutionTimeInSeconds,
                                function(err) {
        if (err) {
            console.error('Could not schedule device method job: ' + err.message);
        } else {
            monitorJob(methodJobId, function(err, result) {
                if (err) {
                    console.error('Could not monitor device method job: ' + err.message);
                } else {
                    console.log(JSON.stringify(result, null, 2));
                }
            });
        }
    });
    
  8. Tambahkan kode berikut untuk menjadwalkan tugas untuk memperbarui perangkat kembar:

    var twinPatch = {
       etag: '*',
       properties: {
           desired: {
               building: '43',
               floor: 3
           }
       }
    };
    
    var twinJobId = uuid.v4();
    
    console.log('scheduling Twin Update job with id: ' + twinJobId);
    jobClient.scheduleTwinUpdate(twinJobId,
                                queryCondition,
                                twinPatch,
                                startTime,
                                maxExecutionTimeInSeconds,
                                function(err) {
        if (err) {
            console.error('Could not schedule twin update job: ' + err.message);
        } else {
            monitorJob(twinJobId, function(err, result) {
                if (err) {
                    console.error('Could not monitor twin update job: ' + err.message);
                } else {
                    console.log(JSON.stringify(result, null, 2));
                }
            });
        }
    });
    
  9. Simpan dan tutup file scheduleJobService.js.

Menjalankan aplikasi

Sekarang Anda siap untuk menjalankan aplikasi.

  1. Pada perintah di folder manageddevice, jalankan perintah berikut untuk mulai mendengarkan metode langsung reboot.

    node simDevice.js
    
  2. Pada perintah di folder scheduleJobService, jalankan perintah berikut untuk memicu pekerjaan untuk mengunci pintu dan memperbarui kembar

    node scheduleJobService.js
    
  3. Anda melihat respons perangkat terhadap metode langsung dan status pekerjaan di konsol.

    Berikut ini menunjukkan respons perangkat terhadap metode langsung:

    Output aplikasi perangkat simulasi

    Berikut ini menunjukkan pekerjaan penjadwalan layanan untuk metode langsung dan pembaruan kembar perangkat, dan pekerjaan yang berjalan hingga selesai:

    Menjalankan aplikasi perangkat simulasi

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