Berkomunikasi dengan DPS menggunakan protokol MQTT

Azure IoT Device Provisioning Service (DPS) memungkinkan perangkat berkomunikasi dengan titik akhir perangkat DPS menggunakan:

DPS bukan broker MQTT berfungsi lengkap dan tidak mendukung semua perilaku yang ditentukan dalam standar MQTT v3.1.1. Artikel ini menjelaskan bagaimana perangkat bisa menggunakan perilaku MQTT yang didukung untuk berkomunikasi dengan DPS.

Semua komunikasi perangkat dengan DPS harus diamankan menggunakan TLS/SSL. Oleh karena itu, DPS tidak mendukung koneksi yang tidak aman melalui port 1883.

Catatan

DPS saat ini tidak mendukung perangkat yang menggunakan mekanisme pengesahan TPM melalui protokol MQTT.

Menyambungkan ke DPS

Perangkat dapat menggunakan protokol MQTT untuk menyambungkan ke instans DPS menggunakan salah satu opsi berikut.

Menggunakan protokol MQTT secara langsung (sebagai perangkat)

Jika tidak bisa menggunakan SDK perangkat, perangkat masih bisa tersambung ke titik akhir perangkat publik menggunakan protokol MQTT pada port 8883. Dalam paket CONNECT, perangkat harus menggunakan nilai berikut:

  • Untuk bidang ClientId, gunakan registrationId.

  • Untuk bidang Nama Pengguna, gunakan {idScope}/registrations/{registration_id}/api-version=2019-03-31, di mana {idScope} adalah cakupan ID DPS dan {registration_id} merupakan ID Pendaftaran untuk perangkat Anda.

    Catatan

    Jika Anda menggunakan autentikasi sertifikat X.509, ID pendaftaran disediakan oleh nama umum subjek (CN) sertifikat daun perangkat (entitas akhir) Anda. {registration_id}di bidang Nama Pengguna harus cocok dengan nama umum.

  • Untuk bidang Kata sandi, gunakan token SAS. Format token SAS sama dengan yang digunakan untuk protokol HTTPS dan AMQP:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration ResourceURI harus dalam format {idScope}/registrations/{registration_id}. Nama kebijakan (skn) harus diatur ke registration.

    Catatan

    Jika Anda menggunakan autentikasi sertifikat X.509, kata sandi token SAS tidak diperlukan.

    Untuk informasi selengkapnya tentang cara membuat token SAS, lihat bagian token keamanan Kontrol akses ke DPS.

Daftar berikut berisi perilaku khusus implementasi DPS:

  • DPS tidak mendukung sesi persisten. Ini memperlakukan setiap sesi sebagai non-persisten, terlepas dari nilai bendera CleanSession . Sebaiknya atur CleanSession ke true.

  • Saat aplikasi perangkat berlangganan topik dengan QoS 2, DPS memberikan QoS level 1 maksimum dalam paket SUBACK. Setelah itu, DPS mengirimkan pesan ke perangkat menggunakan QoS 1.

Konfigurasi TLS/SSL

Untuk menggunakan protokol MQTT secara langsung, klien Anda harus tersambung melalui TLS/SSL 1.2. Upaya untuk melewati langkah ini akan gagal dengan kesalahan koneksi.

Mendaftarkan perangkat

Untuk mendaftarkan perangkat melalui DPS, perangkat harus berlangganan menggunakan $dps/registrations/res/# sebagai Filter Topik. Kartubebas # multi-tingkat di Filter Topik hanya digunakan untuk memungkinkan perangkat menerima lebih banyak properti dalam nama topik. DPS tidak mengizinkan penggunaan # atau ? kartubebas untuk pemfilteran subtopik. Karena DPS bukan broker olahpesan pub-sub tujuan umum, DPS hanya mendukung nama topik dan filter topik yang didokumentasikan.

Perangkat harus menerbitkan pesan register ke DPS menggunakan $dps/registrations/PUT/iotdps-register/?$rid={request_id} sebagai Nama Topik. Payload harus berisi objek Pendaftaran Perangkat dalam format JSON. Dalam skenario yang berhasil, perangkat menerima respons pada $dps/registrations/res/202/?$rid={request_id}&retry-after=x nama topik di mana x adalah nilai coba lagi setelah dalam hitungan detik. Payload respons berisi objek RegistrationOperationStatus dalam format JSON.

Polling untuk status operasi pendaftaran

Perangkat harus melakukan polling layanan secara berkala untuk menerima hasil operasi pendaftaran perangkat. Dengan asumsi bahwa perangkat telah berlangganan topik tersebut $dps/registrations/res/# , perangkat dapat menerbitkan pesan status operasi get ke $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId} nama topik. ID operasi dalam pesan ini harus menjadi nilai yang diterima dalam pesan respons RegistrationOperationStatus pada langkah sebelumnya. Dalam kasus yang berhasil, layanan merespons topik tersebut $dps/registrations/res/200/?$rid={request_id} . Payload respons berisi objek RegistrationOperationStatus. Perangkat harus terus melakukan polling layanan jika kode respons adalah 202 setelah penundaan sama dengan periode retry-after. Operasi pendaftaran perangkat berhasil jika layanan mengembalikan kode status 200.

Menyambung lewat Websocket

Saat menyambung lewat Websocket, tentukan subprotokolnya sebagai mqtt. Ikuti RFC 6455.

Langkah berikutnya

Untuk mempelajari selengkapnya tentang protokol MQTT, lihat Dokumentasi MQTT.

Untuk menelusuri sampel kode MQTT, lihat Sampel aplikasi MQTT.

Untuk mengeksplorasi lebih lanjut kemampuan DPS, lihat: