View a markdown version of this page

Konsep dan status perintah - AWS IoT Core

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konsep dan status perintah

Gunakan AWS IoT Perintah untuk mengirim instruksi dari cloud ke perangkat yang terhubung. Untuk menggunakan fitur ini:

  1. Buat perintah dengan payload yang berisi konfigurasi yang diperlukan untuk dijalankan pada perangkat.

  2. Tentukan perangkat target yang akan menerima muatan dan melakukan tindakan.

  3. Jalankan perintah pada perangkat target dan mengambil informasi status. Untuk memecahkan masalah, lihat CloudWatch log.

Untuk informasi selengkapnya tentang alur kerja ini, lihatHigh-level alur kerja perintah.

Konsep kunci perintah

Konsep kunci berikut membantu Anda memahami fitur Perintah. Istilah digunakan secara konsisten di seluruh dokumentasi ini:

  • Command - Template yang dapat digunakan kembali mendefinisikan instruksi perangkat

  • Ek sekusi - Contoh perintah yang berjalan pada perangkat

  • Nama benda - Pengidentifikasi untuk perangkat yang terdaftar di registri IoT

  • ID Klien - Pengidentifikasi MQTT untuk perangkat yang tidak terdaftar

  • Payload - Data instruksi yang dikirim ke perangkat

  • Topik - Saluran MQTT untuk komunikasi perintah

Commands

Perintah adalah instruksi yang dikirim dari cloud ke perangkat IoT Anda sebagai pesan MQTT. Setelah menerima muatan, perangkat memproses instruksi dan mengambil tindakan yang sesuai, seperti memodifikasi pengaturan konfigurasi, mengirimkan pembacaan sensor, atau mengunggah log. Perangkat kemudian mengembalikan hasil ke cloud, memungkinkan pemantauan dan kontrol jarak jauh.

Namespace

Saat membuat perintah, tentukan namespace nya. Untuk AWS IoT Device Management perintah, gunakan AWS-IoT namespace default dan berikan payload atau payloadTemplate. Untuk AWS IoT FleetWise perintah, gunakan AWS-IoT-FleetWise namespace. Untuk informasi selengkapnya, lihat Perintah jarak jauh di Panduan AWS IoT FleetWise Pengembang.

Muatan

Saat membuat perintah, berikan muatan statis yang menentukan tindakan yang harus dilakukan perangkat. Payload dapat menggunakan format yang didukung. Untuk memastikan perangkat menafsirkan muatan dengan benar, sebaiknya tentukan jenis format payload. Perangkat yang menggunakan protokol MQTT5 dapat mengikuti standar MQTT untuk mengidentifikasi format. Indikator format untuk JSON atau CBOR tersedia di topik permintaan perintah.

Templat muatan

Template payload mendefinisikan payload perintah dengan placeholder yang menghasilkan muatan berbeda saat runtime berdasarkan nilai parameter yang Anda berikan. Misalnya, alih-alih membuat muatan terpisah untuk nilai suhu yang berbeda, buat satu templat dengan placeholder suhu dan tentukan nilainya selama eksekusi. Ini menghilangkan mempertahankan beberapa muatan serupa.

Perangkat target

Untuk menjalankan perintah, tentukan perangkat target menggunakan nama benda (untuk perangkat yang terdaftar dengan AWS IoT) atau ID klien MQTT (untuk perangkat yang tidak terdaftar). ID klien adalah pengidentifikasi unik yang ditentukan dalam MQTT protokol yang digunakan untuk menghubungkan perangkat ke AWS IoT. Lihat perinciannya di Pertimbangan perangkat target.

Topik perintah

Sebelum menjalankan perintah, perangkat harus berlangganan topik permintaan perintah. Saat Anda menjalankan perintah, muatan dikirim ke perangkat pada topik ini. Setelah eksekusi, perangkat mempublikasikan hasil dan status ke topik respons perintah. Untuk informasi selengkapnya, lihat Topik perintah.

Eksekusi perintah

Eksekusi adalah contoh perintah yang berjalan pada perangkat target. Saat Anda memulai eksekusi, payload dikirim ke perangkat dan ID eksekusi unik dihasilkan. Perangkat mengeksekusi perintah dan melaporkan kemajuan ke AWS IoT. Device-side logika menentukan perilaku eksekusi dan pelaporan status ke topik yang dicadangkan.

Kondisi nilai parameter

Saat membuat perintah dengan templat payload, tentukan kondisi nilai untuk memvalidasi nilai parameter sebelum eksekusi. Kondisi nilai memastikan parameter memenuhi persyaratan, mencegah eksekusi yang tidak valid.

Operator yang didukung berdasarkan CommandParameterValue jenis

Jenis numerik (INTEGER, PANJANG, DOUBLE, UNSIGNEDLONG)
  • EQUALS- Nilai harus sama dengan angka yang ditentukan

  • NOT_EQUALS- Nilai tidak boleh sama dengan angka yang ditentukan

  • GREATER_THAN- Nilai harus lebih besar dari angka yang ditentukan

  • GREATER_THAN_EQUALS- Nilai harus lebih besar dari atau sama dengan angka yang ditentukan

  • LESS_THAN- Nilai harus kurang dari angka yang ditentukan

  • LESS_THAN_EQUALS- Nilai harus kurang dari atau sama dengan angka yang ditentukan

  • IN_RANGE- Nilai harus dalam kisaran yang ditentukan (inklusif)

  • NOT_IN_RANGE- Nilai harus di luar kisaran yang ditentukan (inklusif)

  • IN_SET- Nilai harus cocok dengan salah satu angka yang ditentukan

  • NOT_IN_SET- Nilai tidak boleh cocok dengan salah satu angka yang ditentukan

Jenis string (STRING)
  • EQUALS- Nilai harus sama dengan string yang ditentukan

  • NOT_EQUALS- Nilai tidak harus sama dengan string yang ditentukan

  • IN_SET- Nilai harus cocok dengan salah satu string yang ditentukan

  • NOT_IN_SET- Nilai tidak harus cocok dengan salah satu string yang ditentukan

Tipe Boolean
  • Kondisi nilai tidak didukung

Jenis biner
  • Kondisi nilai tidak didukung

Contoh: Perintah kontrol suhu

{ "commandId": "SetTemperature", "namespace": "AWS-IoT", "payloadTemplate": "{\"temperature\": \"${aws:iot:commandexecution::parameter:temperature}\"}", "parameters": [ { "name": "temperature", "type": "INTEGER", "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": { "numberRange": { "min": "60", "max": "80" } } } ] } ] }

Dalam contoh ini, temperature parameter harus antara 60 dan 80 (inklusif). Permintaan eksekusi dengan nilai di luar rentang ini gagal validasi.

catatan

Kondisi nilai dievaluasi pada pemanggilan StartCommandExecution API. Validasi yang gagal mengembalikan kesalahan dan mencegah pembuatan eksekusi.

Prioritas dan evaluasi nilai parameter

Saat memulai eksekusi perintah dengan template payload, nilai parameter diselesaikan menggunakan prioritas berikut:

  1. Parameter permintaan eksekusi - Nilai yang disediakan dalam StartCommandExecution permintaan mengambil prioritas tertinggi

  2. Nilai default perintah - Jika parameter tidak disediakan dalam permintaan eksekusi, parameter defaultValue digunakan

  3. Tidak ada nilai - Jika tidak ada yang disediakan, eksekusi gagal sebagai parameter yang diperlukan untuk menghasilkan permintaan eksekusi

Kondisi nilai dievaluasi pada nilai parameter akhir yang diturunkan di atas pada prioritas dan sebelum pembuatan eksekusi. Jika validasi gagal, permintaan eksekusi mengembalikan kesalahan.

Contoh: SetTemperature perintah dengan defaultValue

{ "parameters": [ { "name": "temperature", "type": "INTEGER", "defaultValue": {"I": 72}, "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": {"numberRange": {"min": "60", "max": "80"}} } ] } ] }

Saat memulai eksekusi:

  • Jika Anda memberikan "temperature": {"I": 75} dalam permintaan, 75 digunakan

  • Jika Anda menghilangkan parameter suhu, nilai default 72 digunakan

  • Kedua nilai divalidasi terhadap kondisi rentang [60,80]

Status perintah

Perintah di Anda Akun AWS dapat berada di salah satu dari tiga status: Tersedia, Tidak digunakan lagi , atau Penundaan penghapusan.

Available

Setelah pembuatan berhasil, perintah berada dalam status Tersedia dan dapat dieksekusi pada perangkat.

Tidak digunakan lagi

Tandai perintah untuk penghentian saat tidak lagi diperlukan. Perintah yang tidak digunakan lagi tidak dapat memulai eksekusi baru, tetapi eksekusi yang tertunda terus selesai. Untuk mengaktifkan eksekusi baru, kembalikan perintah ke status Tersedia.

Penghapusan tertunda

Saat Anda menandai perintah untuk dihapus, perintah tersebut akan dihapus secara otomatis jika tidak digunakan lagi lebih lama dari batas waktu maksimum (default: 12 jam). Tindakan ini permanen. Jika tidak usang atau tidak digunakan lagi selama kurang dari batas waktu, perintah masuk ke status Penghapusan Tertunda dan dihapus setelah batas waktu berakhir.

Status pelaksanaan perintah

Saat Anda memulai eksekusi pada perangkat target, perangkat tersebut memasuki CREATED status dan dapat beralih ke status lain berdasarkan laporan perangkat. Anda dapat mengambil informasi status dan melacak eksekusi.

catatan

Anda dapat menjalankan beberapa perintah secara bersamaan di perangkat. Gunakan kontrol konkurensi untuk membatasi eksekusi per perangkat dan mencegah kelebihan beban. Untuk eksekusi bersamaan maksimum per perangkat, lihat kuota AWS IoT Device Management perintah.

Tabel berikut menunjukkan status eksekusi dan transisinya berdasarkan kemajuan eksekusi.

Status eksekusi perintah dan sumber
Status pelaksanaan perintah Diprakarsai oleh device/cloud? Eksekusi terminal? Transisi status yang diizinkan
CREATED Cloud Tidak
  • IN_PROGRESS

  • SUCCEEDED

  • FAILED

  • DITOLAK

  • TIMED_OUT

IN_PROGRESS Perangkat Tidak
  • IN_PROGRESS

  • SUCCEEDED

  • FAILED

  • DITOLAK

  • TIMED_OUT

TIMED_OUT Perangkat dan cloud Tidak
  • SUCCEEDED

  • FAILED

  • DITOLAK

  • TIMED_OUT

SUCCEEDED Perangkat Ya Tidak berlaku
FAILED Perangkat Ya Tidak berlaku
REJECTED Perangkat Ya Tidak berlaku

Perangkat dapat mempublikasikan pembaruan status dan hasil kapan saja menggunakan perintah yang disediakan topik MQTT. Untuk memberikan konteks tambahan, perangkat dapat menggunakan reasonCode dan reasonDescription bidang dalam statusReason objek.

Diagram berikut menunjukkan transisi status eksekusi.

Gambar menunjukkan bagaimana transisi status eksekusi perintah antara berbagai status.
catatan

Ketika AWS IoT mendeteksi tidak ada respons perangkat dalam periode batas waktu, itu ditetapkan TIMED_OUT sebagai status sementara yang memungkinkan percobaan ulang dan perubahan status. Jika perangkat Anda secara eksplisit melaporkanTIMED_OUT, ini menjadi status terminal tanpa transisi lebih lanjut. Untuk informasi selengkapnya, lihat Non-terminal eksekusi perintah.

Bagian berikut menjelaskan eksekusi terminal dan non-terminal serta statusnya.

Non-terminal eksekusi perintah

Eksekusi adalah non-terminal jika dapat menerima pembaruan dari perangkat. Non-terminal Eksekusi dianggap aktif. Status berikut adalah non-terminal:

  • CREATED

    Saat Anda memulai eksekusi dari AWS IoT konsol atau menggunakan StartCommandExecution API, permintaan yang berhasil mengubah status menjadiCREATED. Dari status ini, eksekusi dapat beralih ke status non-terminal atau terminal lainnya.

  • IN_PROGRESS

    Setelah menerima muatan, perangkat dapat mulai menjalankan instruksi dan melakukan tindakan tertentu. Saat mengeksekusi, perangkat dapat mempublikasikan tanggapan ke topik respons perintah dan memperbarui status keIN_PROGRESS. DariIN_PROGRESS, eksekusi dapat beralih ke terminal atau status non-terminal apa pun kecuali. CREATED

    catatan

    UpdateCommandExecutionAPI dapat dipanggil beberapa kali dengan IN_PROGRESS status. Tentukan detail eksekusi tambahan menggunakan statusReason objek.

  • TIMED_OUT

    Baik cloud maupun perangkat dapat memicu status ini. Eksekusi dalam CREATED atau IN_PROGRESS status dapat berubah menjadi TIMED_OUT karena alasan berikut:

    • Setelah mengirim perintah, timer dimulai. Jika perangkat tidak merespons dalam durasi yang ditentukan, cloud berubah status menjadiTIMED_OUT. Dalam hal ini, eksekusi non-terminal.

    • Perangkat dapat mengganti status ke status terminal apa pun atau melaporkan batas waktu dan mengatur status ke. TIMED_OUT Dalam hal ini, status tetap TIMED_OUT ada, tetapi bidang StatusReason objek berubah berdasarkan informasi perangkat. Eksekusi menjadi terminal.

    Untuk informasi selengkapnya, lihat Nilai batas waktu dan status eksekusi TIMED_OUT.

Eksekusi perintah terminal

Eksekusi menjadi terminal ketika tidak lagi menerima pembaruan dari perangkat. Status berikut adalah terminal. Eksekusi dapat beralih ke status terminal dari status non-terminal apa pun:CREATED,, IN_PROGRESS atau. TIMED_OUT

  • SUCCEEDED

    Jika perangkat berhasil menyelesaikan eksekusi, perangkat dapat mempublikasikan respons ke topik respons perintah dan memperbarui status keSUCCEEDED.

  • FAILED

    Ketika perangkat gagal menyelesaikan eksekusi, perangkat dapat mempublikasikan respons ke topik respons perintah dan memperbarui status keFAILED. Gunakan reasonDescription bidang reasonCode dan di statusReason objek, atau CloudWatch log, untuk memecahkan masalah kegagalan.

  • DITOLAK

    Ketika perangkat menerima permintaan yang tidak valid atau tidak kompatibel, perangkat dapat memanggil UpdateCommandExecution API dengan statusREJECTED. Gunakan reasonDescription bidang reasonCode dan di statusReason objek, atau CloudWatch log, untuk memecahkan masalah.