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
CREATEDstatus dan tidak melanjutkan keIN_PROGRESSatau status lain, pertimbangkan hal berikut:-
Verifikasi perangkat terhubung ke AWS IoT Core dan telah berlangganan topik permintaan perintah.
-
Periksa apakah kebijakan perangkat mengizinkan
iot:Subscribedaniot:Receivepada topik permintaan perintah, daniot:Publishpada 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 beberapaUpdateCommandExecutionpermintaan dibuat ke layanan secara paralel atau dalam jangka waktu yang singkat (misalnya, segeraIN_PROGRESSdiikuti olehSUCCEEDED).Untuk menyelesaikan masalah ini:
-
Berlangganan topik
/accepteddan/rejectedrespons 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_OUTsebelum 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_OUTadalah non-terminal. Perangkat masih dapat memperbarui eksekusi ke status terminal (SUCCEEDED,,FAILEDREJECTED, atauTIMED_OUT).
catatan
Device-initiated
TIMED_OUTadalah 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
UpdateCommandExecutionMQTT dicatat di grupAWSIoTLogsV2log 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" }