Berkomunikasi dengan DPS Anda menggunakan protokol MQTT

DPS memungkinkan perangkat berkomunikasi dengan titik akhir perangkat DPS menggunakan:

DPS bukan broker MQTT berfitur 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 bisa menggunakan protokol MQTT untuk menyambungkan ke DPS menggunakan salah satu opsi berikut.

Menggunakan protokol MQTT secara langsung (sebagai perangkat)

Jika perangkat 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 idScope DPS.

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

Berikut ini adalah daftar perilaku khusus penerapan DPS:

  • DPS tidak mendukung fungsionalitas bendera CleanSession yang diatur ke 0.

  • 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. Karakter kartubebas multi-tingkat # dalam Filter Topik hanya digunakan untuk memungkinkan perangkat menerima properti tambahan dalam nama topik. DPS tidak mengizinkan penggunaan karakter kartubebas # atau ? untuk pemfilteran subtopik. Karena IoT Hub bukan broker pesan pub-sub tujuan umum, IoT Hub 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 akan menerima respons pada nama topik $dps/registrations/res/202/?$rid={request_id}&retry-after=x di mana x adalah nilai retry-after dalam hitungan detik. Payload respons akan 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 $dps/registrations/res/# seperti yang ditunjukkan di atas, perangkat dapat menerbitkan pesan get operationstatus ke nama topik $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId}. ID operasi dalam pesan ini harus menjadi nilai yang diterima dalam pesan respons RegistrationOperationStatus pada langkah sebelumnya. Dalam kasus yang berhasil, layanan akan merespons $dps/registrations/res/200/?$rid={request_id} topik tersebut. Payload respons akan 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 mengeksplorasi lebih lanjut kemampuan DPS, lihat: