Memahami dan memanggil metode langsung dari IoT Hub
Metode langsung IoT Hub memungkinkan Anda memanggil panggilan dari jarak jauh pada perangkat dari cloud. Metode langsung mengikuti pola permintaan-respons dan dimaksudkan untuk komunikasi yang memerlukan konfirmasi segera atas hasilnya. Misalnya, kontrol interaktif perangkat, seperti menyalakan kipas angin. Fungsionalitas ini berguna untuk skenario di mana tindakan langsung berbeda tergantung pada apakah perangkat dapat merespons.
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.
Setiap metode perangkat menargetkan satu perangkat. Jika Anda ingin memanggil metode langsung di beberapa perangkat, atau menjadwalkan metode untuk perangkat yang terputus, lihat Menjadwalkan pekerjaan di beberapa perangkat.
Siapa pun yang memiliki izin koneksi layanan di IoT Hub dapat memanggil metode di perangkat.
Lihat panduan komunikasi Cloud-ke-perangkat jika ragu antara menggunakan properti yang diinginkan, metode langsung, atau pesan cloud-ke-perangkat.
Siklus hidup metode
Metode langsung diimplementasikan pada perangkat dan mungkin memerlukan nol atau lebih input dalam payload metode untuk membuat instans dengan benar. Anda memanggil metode langsung melalui URI yang menghadap ke layanan ({iot hub}/twins/{device id}/methods/
). Perangkat menerima metode langsung melalui topik MQTT khusus perangkat ($iothub/methods/POST/{method name}/
) atau melalui tautan AMQP (properti aplikasi IoThub-methodname
dan IoThub-status
).
Catatan
Saat Anda memanggil metode langsung pada perangkat, nama dan nilai properti hanya dapat berisi alfanumerik US-ASCII yang dapat dicetak, kecuali yang ada dalam himpunan berikut: $ ( ) < > @ , ; : \ " / [ ] ? = { } SP HT
Metode langsung sinkron dan berhasil atau gagal setelah periode batas waktu (default 30 detik; dapat diatur antara 5 dan 300 detik). Metode langsung berguna dalam skenario interaktif di mana Anda ingin perangkat bertindak jika dan hanya jika perangkat online dan menerima perintah. Misalnya, menyalakan lampu dari telepon. Dalam skenario ini, Anda ingin melihat keberhasilan atau kegagalan langsung sehingga layanan cloud dapat menindaklanjuti hasilnya sesegera mungkin. Perangkat dapat mengembalikan beberapa isi pesan sebagai akibat dari metode , tetapi tidak diperlukan. Tidak ada jaminan pemesanan atau semantik konkurensi pada pemanggilan metode.
Metode langsung hanya HTTPS dari sisi cloud dan MQTT, AMQP, MQTT melalui WebSockets, atau AMQP melalui WebSockets dari sisi perangkat.
Payload untuk permintaan dan tanggapan metode adalah dokumen JSON hingga 128 KB.
Panggil metode langsung dari aplikasi back-end
Untuk memanggil metode langsung dari aplikasi back-end, gunakan REST API metode perangkat Invoke atau yang setara di salah satu SDK layanan IoT Hub.
Pemanggilan metode
Pemanggilan metode langsung pada perangkat adalah panggilan HTTPS yang terdiri dari item berikut:
URI permintaan khusus untuk perangkat bersama dengan versi API:
https://fully-qualified-iothubname.azure-devices.net/twins/{deviceId}/methods?api-version=2021-04-12
Metode POSTING
Header yang berisi otorisasi, jenis konten, dan pengodean konten.
body JSON transparan dalam format berikut:
{ "connectTimeoutInSeconds": 200, "methodName": "reboot", "responseTimeoutInSeconds": 200, "payload": { "input1": "someInput", "input2": "anotherInput" } }
Nilai yang diberikan sebagai responseTimeoutInSeconds
dalam permintaan adalah jumlah waktu yang harus ditunggu oleh layanan IoT Hub untuk penyelesaian eksekusi metode langsung pada perangkat. Setel batas waktu ini setidaknya selama waktu eksekusi yang diharapkan dari metode langsung oleh perangkat. Jika batas waktu tidak disediakan, nilai default 30 detik digunakan. Nilai minimum dan maksimum untuk responseTimeoutInSeconds
masing-masing adalah 5 dan 300 detik.
Nilai yang diberikan sebagai connectTimeoutInSeconds
dalam permintaan adalah jumlah waktu setelah pemanggilan metode langsung yang harus ditunggu oleh layanan IoT Hub agar perangkat yang terputus terhubung online. Nilai defaultnya adalah 0, artinya perangkat harus sudah online saat memanggil metode langsung. Nilai maksimum untuk connectTimeoutInSeconds
adalah 300 detik.
Contoh
Contoh ini memulai permintaan untuk memanggil metode langsung pada perangkat IoT yang terdaftar ke hub Azure IoT.
Untuk memulai, gunakan ekstensi Microsoft Azure IoT untuk Azure CLI untuk membuat SharedAccessSignature.
az iot hub generate-sas-token -n <iothubName> --du <duration>
Selanjutnya, ganti header Otorisasi dengan SharedAccessSignature yang baru dibuat, lalu ubah parameter iothubName
, deviceId
, methodName
, dan payload
agar sesuai dengan penerapan Anda dalam contoh perintah curl
di bawah.
curl -X POST \
https://<iothubName>.azure-devices.net/twins/<deviceId>/methods?api-version=2021-04-12\
-H 'Authorization: SharedAccessSignature sr=iothubname.azure-devices.net&sig=x&se=x&skn=iothubowner' \
-H 'Content-Type: application/json' \
-d '{
"methodName": "reboot",
"responseTimeoutInSeconds": 200,
"payload": {
"input1": "someInput",
"input2": "anotherInput"
}
}'
Jalankan perintah yang dimodifikasi untuk memanggil metode langsung yang ditentukan. Permintaan yang berhasil mengembalikan kode status HTTP 200.
Catatan
Contoh di atas menunjukkan pemanggilan metode langsung pada perangkat. Jika Anda ingin memanggil metode langsung dalam Modul IoT Edge, ubah permintaan url untuk disertakan /modules/<moduleName>
seperti yang ditunjukkan di bawah ini:
https://<iothubName>.azure-devices.net/twins/<deviceId>/modules/<moduleName>/methods?api-version=2021-04-12
Respons
Aplikasi back-end menerima respons yang terdiri dari item berikut:
Kode status HTTP:
- 200 menunjukkan keberhasilan eksekusi metode langsung;
- 404 menunjukkan bahwa salah satu ID perangkat tidak valid, atau bahwa perangkat tidak online saat memanggil metode langsung dan untuk
connectTimeoutInSeconds
setelahnya (gunakan pesan kesalahan yang disertai untuk memahami akar penyebab); - 504 menunjukkan batas waktu gateway yang disebabkan oleh perangkat yang tidak menanggapi panggilan metode langsung dalam
responseTimeoutInSeconds
.
Header yang berisi ETag, ID permintaan, jenis konten, dan pengodean konten.
body JSON dalam format berikut:
{ "status" : 201, "payload" : {...} }
Baik
status
danpayload
disediakan oleh perangkat dan digunakan untuk merespons dengan kode status dan metode respons.
Pemanggilan metode untuk modul IoT Edge
Memanggil metode langsung pada modul didukung oleh REST API metode modul panggil atau yang setara di salah satu SDK layanan IoT Hub.
moduleId
diteruskan bersama dengan deviceId
dalam URI permintaan saat menggunakan REST API atau sebagai parameter saat menggunakan SDK layanan. Contohnya,https://<iothubName>.azure-devices.net/twins/<deviceId>/modules/<moduleName>/methods?api-version=2021-04-12
. Isi permintaan dan respons mirip dengan metode langsung yang dipanggil pada perangkat.
Menangani metode langsung pada perangkat
Pada perangkat IoT, metode langsung dapat diterima melalui MQTT, AMQP, atau salah satu protokol ini melalui WebSocket. SDK perangkat IoT Hub membantu Anda menerima dan merespons metode langsung pada perangkat tanpa harus khawatir tentang detail protokol yang mendasar.
MQTT
Bagian berikut adalah untuk protokol MQTT. Untuk mempelajari selengkapnya tentang menggunakan protokol MQTT secara langsung dengan IoT Hub, lihat dukungan protokol MQTT.
Pemanggilan metode
Perangkat menerima permintaan metode langsung pada topik MQTT: $iothub/methods/POST/{method name}/?$rid={request id}
. Namun, request id
dihasilkan oleh IoT Hub dan tidak dapat diketahui sebelumnya, jadi berlangganan $iothub/methods/POST/#
lalu filter pesan yang dikirim berdasarkan nama metode yang didukung oleh perangkat Anda. (Anda akan menggunakan request id
untuk merespons.)
Badan yang diterima perangkat dalam format berikut:
{
"input1": "someInput",
"input2": "anotherInput"
}
Permintaan metode adalah QoS 0.
Respons
Perangkat mengirimkan tanggapan ke $iothub/methods/res/{status}/?$rid={request id}
, di mana:
Properti
status
adalah status eksekusi metode yang disediakan perangkat.Properti
$rid
adalah ID permintaan dari pemanggilan metode yang diterima dari IoT Hub. ID permintaan adalah nilai berformat heksadesimal.
Tubuh diatur oleh perangkat dan dapat berupa status apa pun.
AMQP
Bagian berikut adalah untuk protokol AMQP. Untuk mempelajari selengkapnya tentang menggunakan protokol MQTT secara langsung dengan IoT Hub, lihat dukungan protokol MQTT.
Pemanggilan metode
Perangkat menerima permintaan metode langsung dengan membuat tautan terima di alamat amqps://{hostname}:5671/devices/{deviceId}/methods/deviceBound
.
Pesan AMQP tiba di tautan terima yang mewakili permintaan metode. Hal ini berisi bagian-bagian berikut:
Properti ID korelasi, yang berisi ID permintaan yang harus diteruskan kembali dengan respons metode yang sesuai.
Properti aplikasi bernama
IoThub-methodname
, yang berisi nama metode yang dipanggil.Badan pesan AMQP yang berisi payload metode sebagai JSON.
Respons
Perangkat membuat tautan pengiriman untuk mengembalikan respons metode pada alamat amqps://{hostname}:5671/devices/{deviceId}/methods/deviceBound
.
Respons metode dikembalikan pada tautan pengiriman dan disusun sebagai berikut:
Properti ID korelasi, yang berisi ID permintaan yang diteruskan dalam pesan permintaan metode.
Properti aplikasi bernama
IoThub-status
, yang berisi status metode yang disediakan pengguna.Badan pesan AMQP yang berisi respons metode sebagai JSON.
Langkah berikutnya
Sekarang Anda telah mempelajari cara menggunakan metode langsung, Anda mungkin tertarik dengan artikel panduan pengembang IoT Hub berikut:
- Menjadwalkan pekerjaan di beberapa perangkat
- SDK perangkat dan layanan Azure IoT mencantumkan berbagai SDK bahasa yang dapat digunakan saat Anda mengembangkan aplikasi perangkat dan layanan yang berinteraksi dengan IoT Hub.
- Bahasa kueri IoT Hub untuk kembaran perangkat, tugas, dan perutean pesan menjelaskan bahasa kueri IoT Hub yang dapat Anda gunakan untuk mengambil informasi dari IoT Hub tentang kembaran perangkat dan tugas Anda.