View a markdown version of this page

AWS IoT Pemecahan Masalah Perintah - AWS IoT Core

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

AWS IoT Pemecahan Masalah Perintah

Ini adalah bagian pemecahan masalah untuk AWS IoT Device Management Perintah.

Masalah eksekusi perintah

Eksekusi perintah tetap dalam status CREATED

Ketika eksekusi perintah tetap dalam CREATED status dan tidak melanjutkan ke IN_PROGRESS atau status lain, pertimbangkan hal berikut:

  • Verifikasi perangkat terhubung ke AWS IoT Core dan telah berlangganan topik permintaan perintah.

  • Periksa apakah kebijakan perangkat mengizinkan iot:Subscribe dan iot:Receive pada topik permintaan perintah, dan iot:Publish pada topik respons perintah.

  • Jika perangkat sedang offline dan menggunakan sesi persisten MQTT, perintah menunggu di Core. AWS IoT Saat perangkat terhubung kembali sebelum batas waktu sesi persisten dan batas waktu eksekusi, perangkat dapat memproses perintah. Jika batas waktu eksekusi berakhir, eksekusi bertransisi ke. TIMED_OUT

DataConflict kesalahan pada UpdateCommandExecution

DataConflictKesalahan terjadi ketika beberapa UpdateCommandExecution permintaan dibuat ke layanan secara paralel atau dalam jangka waktu yang singkat (misalnya, segera IN_PROGRESS diikuti olehSUCCEEDED).

Untuk menyelesaikan masalah ini:

  • Berlangganan topik /accepted dan /rejected respons untuk mengonfirmasi setiap pembaruan status telah diproses sebelum mengirim yang berikutnya.

  • Terapkan logika coba lagi dengan backoff eksponensial saat menerima kesalahan. DataConflict

Eksekusi perintah pindah ke status terminal TIMED_OUT secara tak terduga

Ketika eksekusi perintah bertransisi ke TIMED_OUT sebelum perangkat dapat memprosesnya:

  • Tinjau nilai batas waktu yang dikonfigurasi untuk eksekusi perintah. Batas waktu default mungkin terlalu singkat untuk kasus penggunaan Anda.

  • Jika perangkat sedang offline saat perintah dikirim, verifikasi bahwa perangkat terhubung kembali dan menerima permintaan eksekusi sebelum batas waktu berakhir.

  • Sebuah cloud-initiated TIMED_OUT adalah non-terminal. Perangkat masih dapat memperbarui eksekusi ke status terminal (SUCCEEDED,, FAILEDREJECTED, atauTIMED_OUT).

catatan

Device-initiated TIMED_OUT adalah status terminal dan tidak ada pembaruan lebih lanjut yang dapat dilakukan untuk eksekusi perintah ini.

Bagaimana cara melihat kesalahan dalam CloudWatch log?

Kesalahan dari permintaan UpdateCommandExecution MQTT dicatat di grup AWSIoTLogsV2 log di Amazon. CloudWatch Untuk mengaktifkan logging dan melihat log, lihatKonfigurasikan AWS IoT logging.

UpdateCommandExecution kode kesalahan

Ketika permintaan UpdateCommandExecution MQTT gagal, layanan akan menerbitkan respons kesalahan terhadap topik tersebut. /rejected Respons kesalahan berisi kode kesalahan dan pesan. Tabel berikut mencantumkan kode kesalahan yang dapat dikembalikan.

Kode kesalahan Dicoba ulang Deskripsi
InvalidStateTransition Tidak Transisi status yang diminta tidak diperbolehkan. Misalnya, transisi dari SUCCEEDED keIN_PROGRESS, memperbarui eksekusi yang dimulai perangkatTIMED_OUT.
TerminalStateReached Tidak Eksekusi perintah telah mencapai status terminal dan tidak dapat diperbarui.
ResourceNotFound Tidak Eksekusi perintah yang ditentukan tidak ada.
DataConflict Ya Eksekusi perintah dimodifikasi secara bersamaan. Ini dapat terjadi ketika pembaruan status dikirim secara berurutan. Berlangganan topik /accepted dan /rejected respons untuk mengonfirmasi setiap pembaruan status telah diproses sebelum mengirim yang berikutnya. Untuk detail selengkapnya, lihat DataConflict kesalahan pada UpdateCommandExecution.
InternalError Ya Terjadi kesalahan server internal. Coba lagi permintaan dengan backoff eksponensial.

Berikut ini adalah contoh respons kesalahan yang dipublikasikan ke /rejected topik:

{ "clientToken": "client-token-1", "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554", "error": "DataConflict", "errorMessage": "The command execution was modified concurrently" }