

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

# AWS IoT Device Management perintah
<a name="iot-remote-command"></a>

**penting**  
Dokumentasi ini menjelaskan bagaimana Anda dapat menggunakan [fitur perintah di AWS IoT Device Management](https://docs.aws.amazon.com/iot/latest/developerguide/iot-remote-command-concepts.html#command-iot-namespace). Untuk informasi tentang penggunaan fitur ini AWS IoT FleetWise, lihat [Perintah jarak jauh](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/remote-commands.html).  
Anda bertanggung jawab penuh untuk menerapkan perintah dengan cara yang aman dan sesuai dengan hukum yang berlaku. Untuk informasi lebih lanjut tentang tanggung jawab Anda, silakan lihat [Ketentuan AWS Layanan untuk AWS IoT Layanan](https://aws.amazon.com/service-terms/).

Gunakan AWS IoT Device Management Perintah untuk mengirim instruksi dari cloud ke perangkat yang terhubung AWS IoT. Perintah menargetkan satu perangkat pada satu waktu dan dapat digunakan untuk aplikasi dengan latensi rendah dan throughput tinggi, seperti mengambil log sisi perangkat atau memulai perubahan status perangkat.

*Perintah* adalah sumber daya yang dapat digunakan kembali yang dikelola oleh AWS IoT Device Management. Ini berisi konfigurasi yang diterapkan sebelum dipublikasikan ke perangkat. Anda dapat menentukan serangkaian perintah untuk kasus penggunaan tertentu, seperti menyalakan bola lampu atau membuka kunci pintu kendaraan.

Fitur AWS IoT Command memungkinkan Anda untuk:
+ Buat templat perintah yang dapat digunakan kembali dengan muatan statis atau dinamis, lalu jalankan pada perangkat tertentu.
+ Perangkat target terdaftar sebagai AWS IoT barang atau klien MQTT yang tidak terdaftar.
+ Jalankan beberapa perintah secara bersamaan di perangkat yang sama.
+ Aktifkan pemberitahuan acara dan lacak status eksekusi sebagai perintah proses perangkat.

Topik berikut menunjukkan cara membuat perintah, mengirimkannya ke perangkat, dan mengambil status yang dilaporkan oleh perangkat.

**Topics**
+ [Quick start](iot-commands-quickstart.md)
+ [Konsep dan status perintah](iot-remote-command-concepts.md)
+ [Alur kerja perintah tingkat tinggi](iot-remote-command-workflow.md)
+ [Membuat dan mengelola perintah](iot-remote-command-create-manage.md)
+ [Memulai dan memantau pelaksanaan perintah](iot-remote-command-execution-start-monitor.md)
+ [Menghentikan sumber daya perintah](iot-remote-command-deprecate.md)

# Quick start
<a name="iot-commands-quickstart"></a>

Selesaikan langkah-langkah ini untuk mengirim perintah pertama Anda:

1. **Prasyarat** - Pastikan Anda terhubung ke IoT Core, perangkat yang terhubung ke IoT Core, izin IAM untuk operasi Command API, dan pustaka klien MQTT yang diinstal pada perangkat Anda.

1. **Buat perintah** - Tentukan perintah dengan muatan statis, atau templat payload yang menentukan tindakan perangkat. Lihat [Buat sumber daya perintah](iot-remote-command-create-manage.md#iot-remote-command-create).

1. **Identifikasi perangkat Anda** - Daftarkan perangkat Anda sebagai IoT atau catat ID klien MQTT-nya. Lihat [Pertimbangan perangkat target](iot-remote-command-execution-start-monitor.md#iot-command-execution-target).

1. **Konfigurasikan izin** - Siapkan kebijakan IAM yang memungkinkan perangkat Anda menerima perintah dan mempublikasikan tanggapan.

1. **Berlangganan topik** - Konfigurasikan perangkat Anda untuk berlangganan permintaan perintah dan topik respons. Lihat [Pilih perangkat target untuk perintah Anda dan berlangganan topik MQTT](iot-remote-command-workflow.md#command-choose-target).

1. **Jalankan perintah** - Mulai eksekusi perintah pada perangkat target Anda. Lihat [Mulai eksekusi perintahMulai eksekusi perintah (konsol)Mulai eksekusi perintah (AWS CLI)](iot-remote-command-execution-start-monitor.md#iot-remote-command-execution-start).

**Kasus penggunaan umum:**
+ *Diagnostik jarak jauh* - Ambil log, jalankan diagnostik, periksa kesehatan perangkat
+ *Pembaruan konfigurasi* - Ubah pengaturan, perbarui parameter, beralih fitur
+ *Kontrol perangkat* -Lock/unlock, power on/off, perubahan mode

# Konsep dan status perintah
<a name="iot-remote-command-concepts"></a>

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

1. Buat perintah dengan muatan yang berisi konfigurasi yang diperlukan untuk berjalan di perangkat.

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

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

Untuk informasi selengkapnya tentang alur kerja ini, lihat[Alur kerja perintah tingkat tinggi](iot-remote-command-workflow.md).

**Topics**
+ [Perintah konsep kunci](#iot-command-concepts)
+ [Status perintah](#iot-command-states)
+ [Status pelaksanaan perintah](#iot-command-execution-status)

## Perintah konsep kunci
<a name="iot-command-concepts"></a>

Konsep kunci berikut membantu Anda memahami fitur Perintah. Ketentuan digunakan secara konsisten di seluruh dokumentasi ini:
+ *Command* - Template yang dapat digunakan kembali yang mendefinisikan instruksi perangkat
+ *Eksekusi* - Sebuah instance dari 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, mentransmisikan 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](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/remote-commands.html) di *Panduan AWS IoT FleetWise Pengembang*.

**Muatan**  
Saat membuat perintah, berikan muatan statis yang menentukan tindakan yang harus dilakukan perangkat. Muatan dapat menggunakan format apa pun yang didukung. Untuk memastikan perangkat menafsirkan muatan dengan benar, sebaiknya tentukan jenis format payload. Perangkat yang menggunakan MQTT5 protokol dapat mengikuti standar MQTT untuk mengidentifikasi format. Indikator format untuk JSON atau CBOR tersedia dalam 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 pemeliharaan beberapa muatan serupa.

**Perangkat target**  
Untuk menjalankan perintah, tentukan perangkat target menggunakan nama benda (untuk perangkat yang terdaftar AWS IoT) atau ID klien MQTT (untuk perangkat yang tidak terdaftar). ID klien adalah pengidentifikasi unik yang didefinisikan dalam [MQTT](mqtt.md) protokol yang digunakan untuk menghubungkan perangkat ke AWS IoT. Lihat perinciannya di [Pertimbangan perangkat target](iot-remote-command-execution-start-monitor.md#iot-command-execution-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](reserved-topics.md#reserved-topics-commands).

**Eksekusi perintah**  
Eksekusi adalah contoh dari perintah yang berjalan pada perangkat target. Saat Anda memulai eksekusi, payload dikirimkan ke perangkat dan ID eksekusi unik dihasilkan. Perangkat menjalankan perintah dan melaporkan kemajuan ke AWS IoT. Logika sisi perangkat menentukan perilaku eksekusi dan pelaporan status ke topik yang dicadangkan.

### Kondisi nilai parameter
<a name="iot-command-parameter-value-conditions"></a>

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](https://docs.aws.amazon.com//iot/latest/apireference/API_CommandParameterValue.html)jenis**

**Jenis numerik (INTEGER, LONG, 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 berada di luar rentang yang ditentukan (inklusif)
+ `IN_SET`- Nilai harus cocok dengan salah satu angka yang ditentukan
+ `NOT_IN_SET`- Nilai tidak boleh cocok dengan nomor 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 boleh cocok dengan string yang ditentukan

**Jenis Boolean**  
+ Kondisi nilai tidak didukung

**Tipe 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 saat pemanggilan API. StartCommandExecution ](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_StartCommandExecution.html) Validasi yang gagal mengembalikan kesalahan dan mencegah pembuatan eksekusi.

### Prioritas dan evaluasi nilai parameter
<a name="iot-command-parameter-value-priority"></a>

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

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

1. **Nilai default perintah** - Jika parameter tidak disediakan dalam permintaan eksekusi, parameter `defaultValue` digunakan

1. **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
<a name="iot-command-states"></a>

*Perintah dalam Anda Akun AWS dapat berada di salah satu dari tiga status: *Tersedia*, Usang, atau *Penghapusan tertunda*.*

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

**Usang**  
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 yang tertunda**  
Ketika Anda menandai perintah untuk penghapusan, itu dihapus secara otomatis jika tidak digunakan lagi lebih lama dari batas waktu maksimum (default: 12 jam). Tindakan ini bersifat permanen. Jika tidak digunakan lagi atau tidak digunakan lagi kurang dari batas waktu, perintah memasuki status penghapusan Tertunda dan dihapus setelah batas waktu berakhir.

## Status pelaksanaan perintah
<a name="iot-command-execution-status"></a>

Saat Anda memulai eksekusi pada perangkat target, ia memasuki `CREATED` status dan dapat bertransisi 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 [AWS IoT Device Management perintah](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#commands-limits) kuota.

Tabel berikut menunjukkan status eksekusi dan transisinya berdasarkan progres eksekusi.


**Status eksekusi perintah dan sumber**  

| Status pelaksanaan perintah | Diprakarsai oleh perangkat/cloud? | Eksekusi terminal? | Transisi status yang diizinkan | 
| --- | --- | --- | --- | 
| CREATED | Cloud | Tidak |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/iot-remote-command-concepts.html)  | 
| IN\$1PROGRESS | Perangkat | Tidak |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/iot-remote-command-concepts.html)  | 
| TIMED\$1OUT | Perangkat dan cloud | Tidak |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/iot-remote-command-concepts.html)  | 
| SUCCEEDED | Perangkat | Ya | Tidak berlaku | 
| FAILED | Perangkat | Ya | Tidak berlaku | 
| REJECTED | Perangkat | Ya | Tidak berlaku | 

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

Diagram berikut menunjukkan transisi status eksekusi.

![\[Gambar yang menunjukkan bagaimana transisi status eksekusi perintah antara berbagai status.\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/images/command-execution-status-transitions.png)


**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 melaporkan secara eksplisit`TIMED_OUT`, ini menjadi status terminal tanpa transisi lebih lanjut. Untuk informasi selengkapnya, lihat [Eksekusi perintah non-terminal](#iot-command-execution-status-nonterminal).

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

**Topics**
+ [Eksekusi perintah non-terminal](#iot-command-execution-status-nonterminal)
+ [Eksekusi perintah terminal](#iot-command-execution-status-terminal)

### Eksekusi perintah non-terminal
<a name="iot-command-execution-status-nonterminal"></a>

Eksekusi adalah non-terminal jika dapat menerima pembaruan dari perangkat. *Eksekusi non-terminal 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 menjadi`CREATED`. Dari status ini, eksekusi dapat beralih ke status non-terminal atau terminal lainnya.
+ 

**IN\$1PROGRESS**  
Setelah menerima muatan, perangkat dapat mulai menjalankan instruksi dan melakukan tindakan yang ditentukan. Saat mengeksekusi, perangkat dapat mempublikasikan tanggapan terhadap topik respons perintah dan memperbarui status ke`IN_PROGRESS`. Dari`IN_PROGRESS`, eksekusi dapat bertransisi ke status terminal atau non-terminal kecuali. `CREATED`
**catatan**  
`UpdateCommandExecution`API dapat dipanggil beberapa kali dengan `IN_PROGRESS` status. Tentukan detail eksekusi tambahan menggunakan `statusReason` objek.
+ 

**TIMED\$1OUT**  
Baik cloud dan perangkat dapat memicu status ini. Eksekusi dalam `CREATED` atau `IN_PROGRESS` status dapat berubah menjadi karena `TIMED_OUT` alasan berikut:
  + Setelah mengirim perintah, timer dimulai. Jika perangkat tidak merespons dalam durasi yang ditentukan, cloud akan mengubah statusnya`TIMED_OUT`. Dalam hal ini, eksekusi non-terminal.
  + Perangkat dapat mengganti status ke status terminal apa pun atau melaporkan batas waktu dan menyetel status ke. `TIMED_OUT` Dalam hal ini, status tetap ada`TIMED_OUT`, tetapi bidang `StatusReason` objek berubah berdasarkan informasi perangkat. Eksekusi menjadi terminal.

  Untuk informasi selengkapnya, lihat [Nilai waktu habis dan status `TIMED_OUT` eksekusi](iot-remote-command-execution-start-monitor.md#iot-command-execution-timeout-status).

### Eksekusi perintah terminal
<a name="iot-command-execution-status-terminal"></a>

Eksekusi menjadi terminal ketika tidak lagi menerima pembaruan dari perangkat. Status berikut adalah terminal. Eksekusi dapat bertransisi 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 terhadap topik respons perintah dan memperbarui status ke`SUCCEEDED`.
+ 

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

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

# Alur kerja perintah tingkat tinggi
<a name="iot-remote-command-workflow"></a>

Alur kerja ini menunjukkan bagaimana perangkat berinteraksi dengan AWS IoT Device Management Perintah. Semua permintaan HTTP API menggunakan [kredensi Sigv4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) untuk penandatanganan.

![\[Ikhtisar perintah AWS IoT Device Management perangkat alur kerja tingkat tinggi.\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/images/device-command-workflow.png)


**Topics**
+ [Membuat dan mengelola perintah](#command-create-command)
+ [Pilih perangkat target untuk perintah Anda dan berlangganan topik MQTT](#command-choose-target)
+ [Memulai dan memantau eksekusi perintah untuk perangkat target Anda](#command-command-executions)
+ [(Opsional) Aktifkan pemberitahuan untuk acara perintah](#iot-remote-command-commands-notifications)

## Membuat dan mengelola perintah
<a name="command-create-command"></a>

Untuk membuat dan mengelola perintah untuk perangkat Anda, lakukan langkah-langkah berikut.

1. 

**Buat sumber daya perintah**

   Buat Command dari [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) atau menggunakan [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html)API.

1. 

**Tentukan payload**

   Berikan Payload dalam format apa pun. Tentukan jenis konten untuk memastikan interpretasi perangkat yang benar.

   Untuk Perintah dinamis dengan templat payload, payload akhir dihasilkan saat runtime menggunakan parameter yang disediakan. Template hanya mendukung format JSON, tetapi Payload yang dihasilkan dapat dikirim sebagai JSON atau CBOR.

1. 

**(Opsional) Kelola perintah yang dibuat**

   Perbarui nama tampilan dan deskripsi setelah pembuatan. Tandai Perintah sebagai usang saat tidak lagi diperlukan, atau hapus secara permanen. Untuk memodifikasi informasi Payload, buat Command baru.

## Pilih perangkat target untuk perintah Anda dan berlangganan topik MQTT
<a name="command-choose-target"></a>

Pilih perangkat target Anda dan konfigurasikan topik MQTT untuk menerima Perintah dan tanggapan penerbitan.

1. 

**Pilih perangkat target untuk perintah Anda**

   Pilih perangkat target untuk menerima dan menjalankan Command. Gunakan nama Thing untuk perangkat terdaftar atau ID Klien untuk perangkat yang tidak terdaftar. Untuk informasi selengkapnya, lihat [Pertimbangan perangkat target](iot-remote-command-execution-start-monitor.md#iot-command-execution-target).

1. 

**Konfigurasikan kebijakan AWS IoT perangkat**

   Konfigurasikan kebijakan IAM yang memberikan izin untuk menerima Eksekusi dan mempublikasikan pembaruan. Lihat [Contoh kebijakan IAM](iot-remote-command-execution-start-monitor.md#iot-remote-command-execution-update-policy) contoh kebijakan.

1. 

**Buat koneksi MQTT**

   Hubungkan perangkat ke broker pesan dan berlangganan Topik permintaan dan respons. Perangkat membutuhkan `iot:Connect` izin. Temukan titik akhir bidang data Anda menggunakan perintah `DescribeEndpoint` API atau `describe-endpoint` CLI:

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   Menjalankan perintah ini mengembalikan titik akhir bidang data khusus akun seperti yang ditunjukkan di bawah ini.

   ```
   account-specific-prefix.iot.region.amazonaws.com
   ```

1. 

**Berlangganan topik perintah**

   Berlangganan Topik Permintaan Perintah. Ketika Anda memulai Eksekusi, broker pesan menerbitkan Payload ke Topik ini. Perangkat Anda menerima dan memproses Perintah.

   (Opsional) Berlangganan Topik respons (`accepted`atau`rejected`) untuk menerima konfirmasi apakah layanan cloud menerima atau menolak respons perangkat.

   Dalam contoh ini, ganti:
   + *`<device>`*dengan `thing` atau `client` tergantung pada apakah perangkat yang Anda targetkan telah terdaftar sebagai IoT, atau ditentukan sebagai klien MQTT.
   + *`<DeviceID>`*dengan pengenal unik perangkat target Anda. ID ini dapat berupa ID klien MQTT unik atau nama benda.
**catatan**  
Jika jenis payload bukan JSON atau CBOR, *<PayloadFormat>* bidang mungkin tidak ada dalam topik permintaan perintah. Untuk mendapatkan format payload, kami sarankan Anda menggunakan MQTT5 untuk mendapatkan informasi format dari header pesan MQTT. Untuk informasi selengkapnya, lihat [Topik perintah](reserved-topics.md#reserved-topics-commands).

   ```
   $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>
   $aws/commands/<devices>/<DeviceID>/executions/+/response/accepted/<PayloadFormat>
   $aws/commands/<devices>/<DeviceID>/executions/+/response/rejected/<PayloadFormat>
   ```

## Memulai dan memantau eksekusi perintah untuk perangkat target Anda
<a name="command-command-executions"></a>

Setelah Anda membuat perintah dan menentukan target untuk perintah, Anda dapat memulai eksekusi pada perangkat target dengan melakukan langkah-langkah berikut.

1. 

**Mulai eksekusi perintah pada perangkat target**

   Mulai Eksekusi dari [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) atau gunakan `StartCommandExecution` API dengan titik akhir khusus akun Anda. Gunakan `iot:Data-ATS` untuk dual-stack (IPv4/IPv6) atau hanya `iot:Jobs` untuk IPv4 .

   API menerbitkan Payload ke Topik permintaan Perintah.
**catatan**  
Jika perangkat offline dan menggunakan sesi persisten MQTT, Perintah menunggu di broker pesan. Saat perangkat terhubung kembali sebelum batas waktu, perangkat dapat memproses Perintah dan mempublikasikan hasil. Jika batas waktu berakhir, waktu eksekusi habis dan muatan akan dibuang.

1. 

**Perbarui hasil eksekusi perintah**

   Perangkat menerima Payload, memproses Perintah, melakukan tindakan yang ditentukan, dan menerbitkan hasil ke Topik respons Perintah menggunakan API berbasis `UpdateCommandExecution` MQTT. Jika berlangganan Topik yang diterima dan ditolak, perangkat akan menerima konfirmasi apakah layanan cloud menerima atau menolak respons.

   Tergantung pada apa yang Anda tentukan dalam topik permintaan, *<devices>* dapat berupa benda atau klien, dan *<DeviceID>* dapat berupa nama AWS IoT barang Anda atau ID klien MQTT.
**catatan**  
Hanya *<PayloadFormat>* bisa JSON atau CBOR dalam topik respons perintah.

   ```
   $aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>
   ```

1. 

**(Opsional) Ambil hasil eksekusi perintah**

   Ambil hasil Eksekusi dari AWS IoT konsol atau menggunakan`GetCommandExecution`. Perangkat harus mempublikasikan hasil ke Topik respons Perintah untuk informasi terbaru. Lihat detail tambahan termasuk waktu pembaruan terakhir, hasil, dan waktu penyelesaian.

## (Opsional) Aktifkan pemberitahuan untuk acara perintah
<a name="iot-remote-command-commands-notifications"></a>

Berlangganan acara Perintah untuk pemberitahuan saat status Eksekusi berubah. Untuk informasi rinci tentang peristiwa eksekusi perintah, termasuk format pesan acara dan atribut payload, lihat[Peristiwa eksekusi perintah](command-events.md).

1. 

**Buat aturan topik**

   Berlangganan Topik acara Perintah untuk pemberitahuan perubahan status. Buat aturan topik untuk merutekan data perangkat ke AWS IoT layanan lain seperti AWS Lambda, Amazon SQS, dan AWS Step Functions menggunakan AWS IoT konsol atau. [Membuat AWS IoT aturan](iot-create-rule.md)

   Dalam contoh ini, ganti `<CommandID>` dengan pengidentifikasi perintah yang ingin Anda terima notifikasi dan `<CommandExecutionStatus>` dengan status eksekusi perintah.

   ```
   $aws/events/commandExecution/<CommandID>/<CommandExecutionStatus>
   ```
**catatan**  
Untuk menerima pemberitahuan untuk semua perintah dan status eksekusi perintah, Anda dapat menggunakan karakter wildcard dan berlangganan topik berikut.

   ```
   $aws/events/commandExecution/+/#
   ```

1. 

**Menerima dan memproses peristiwa perintah**

   Kelola pemberitahuan push Command dan buat aplikasi menggunakan acara berlangganan.

Kode berikut menunjukkan payload sampel untuk pemberitahuan peristiwa perintah yang akan Anda terima.

```
{
    "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554",
    "status":"FAILED",
    "statusReason": {
         "reasonCode": "DEVICE_TOO_BUSY",
         "reasonDescription": ""
    },
    "eventType": "COMMAND_EXECUTION",
    "commandArn":"arn:aws:iot:us-east-1:123456789012:command/0b9d9ddf-e873-43a9-8e2c-9fe004a90086",
    "targetArn":"arn:aws:iot:us-east-1:123456789012:thing/5006c3fc-de96-4def-8427-7eee36c6f2bd",
    "timestamp":1717708862107
}
```

# Membuat dan mengelola perintah
<a name="iot-remote-command-create-manage"></a>

Gunakan AWS IoT Device Management Perintah untuk mengonfigurasi tindakan jarak jauh yang dapat digunakan kembali atau mengirim instruksi langsung ke perangkat. Buat dan kelola Perintah dari AWS IoT konsol atau gunakan AWS CLI.

**Topics**
+ [Buat sumber daya perintah](#iot-remote-command-create)
+ [Mengambil informasi tentang perintah](#iot-remote-command-get)
+ [Daftar perintah di Akun AWS](#iot-remote-command-list)
+ [Perbarui sumber daya perintah](#iot-remote-command-update)
+ [Menghentikan atau memulihkan sumber daya perintah](#iot-remote-command-deprecatecmd)
+ [Hapus sumber daya perintah](#iot-remote-command-delete)

## Buat sumber daya perintah
<a name="iot-remote-command-create"></a>

Berikan informasi berikut saat membuat Command:
+ 

**Informasi umum**  
Berikan Command ID unik untuk mengidentifikasi Command saat menjalankannya pada perangkat target. Secara opsional menentukan nama tampilan, deskripsi, dan tag untuk manajemen.
+ **Muatan**

  Untuk Perintah statis, berikan tindakan perangkat yang menentukan Payload. Tentukan jenis format Payload untuk interpretasi perangkat yang benar.

  Untuk Perintah dinamis, lihat atribut template Payload.
+ **Templat muatan**

  Untuk Commands dinamis, sediakan PayloadTemplate dengan placeholder dan parameter. Secara opsional menyediakan `defaultValue` dan kondisi. AWS IoT Device Management Perintah menggantikan placeholder saat runtime. Parameter yang hilang menggunakan defaultValue mereka. Semua nilai harus memenuhi kondisi yang ditentukan.

  Jenis placeholder peka huruf besar/kecil berikut didukung:
  + `${aws:iot:commandexecution::parameter:parameter1}`— Sebuah placeholder untuk nilai parameter dengan nama. `parameter1`
  + `${aws:iot:commandexecution::executionTimeoutSec}`— Sebuah placeholder untuk parameter batas waktu eksekusi perintah yang disediakan saat runtime.

### Topik muatan dan perintah
<a name="iot-commands-payload-mqtt"></a>

Perintah yang dicadangkan Topik menggunakan format berdasarkan jenis format Payload.
+ Untuk `application/json` atau jenis `application/cbor` konten, gunakan permintaan ini Topik:

  ```
  $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>
  ```
+ Untuk jenis konten lain atau format yang tidak ditentukan, gunakan permintaan ini Topik. Format Payload muncul di header pesan MQTT.

  ```
  $aws/commands/<devices>/<DeviceID>/executions/+/request
  ```

Topik respons Perintah menggunakan `json` atau `cbor` memformat apa pun jenis Payload. *<PayloadFormat>*harus `json` atau`cbor`:

```
$aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>
```

### Buat sumber daya perintah (konsol)
<a name="iot-remote-command-create-console"></a>

Bagian berikut menjelaskan pertimbangan format Payload dan pembuatan Command dari konsol.

**Topics**
+ [Format payload perintah statis](#iot-commands-payload-format)
+ [Format payload perintah dinamis](#iot-commands-dynamic-payload-format)
+ [Cara membuat perintah (konsol)](#iot-commands-console-how)

#### Format payload perintah statis
<a name="iot-commands-payload-format"></a>

Payload mendukung format apa pun hingga 32 KB. Tentukan jenis format Payload untuk interpretasi perangkat yang aman dan benar.

Tentukan jenis format Payload menggunakan `type/subtype` format (misalnya, `application/json` atau`application/cbor`). Default: `application/octet-stream`. Lihat [Jenis MIME umum](https://developer.mozilla.org/en-US/docs/Web/HTTP/MIME_types/Common_types) untuk format yang didukung.

#### Format payload perintah dinamis
<a name="iot-commands-dynamic-payload-format"></a>

PayloadTemplate harus JSON yang valid dengan setidaknya satu placeholder, hingga 32 KB.

Untuk `AwsJsonSubstitution` preprocessor, AWS IoT Device Management Command mengirimkan notifikasi dalam format JSON atau CBOR berdasarkan konfigurasi preprocessor.

#### Cara membuat perintah (konsol)
<a name="iot-commands-console-how"></a>

Untuk membuat Command dari konsol, buka [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) dan ikuti langkah-langkah berikut:

1. Pilih **Buat perintah**.

1. Tentukan ID Perintah yang unik.

1. (Opsional) Tentukan nama tampilan, deskripsi, dan tag.

1. Unggah file Payload yang berisi tindakan perangkat. Tentukan jenis format Payload untuk interpretasi perangkat yang benar.

1. (Opsional) Untuk template payload JSON dengan placeholder, parameter diisi sebelumnya dalam tabel sebaris untuk diedit.

1. (Opsional) Konfigurasikan jenis nilai parameter (wajib), nilai default, dan kondisi.

1. Pilih **Buat perintah**.

### Buat sumber daya perintah (CLI)
<a name="iot-remote-command-create-cli"></a>

Gunakan perintah [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html)API atau [https://docs.aws.amazon.com/cli/latest/reference/iot/create-command.html](https://docs.aws.amazon.com/cli/latest/reference/iot/create-command.html)CLI untuk membuat Command.

**Topics**
+ [Muatan perintah](#iot-commands-payload)
+ [Contoh kebijakan IAM](#iot-remote-command-create-iam)
+ [Contoh pembuatan perintah statis](#iot-remote-command-create-example)
+ [Contoh pembuatan perintah dinamis](#iot-remote-dynamic-command-create-example)

#### Muatan perintah
<a name="iot-commands-payload"></a>

Berikan templat Payload atau payload statis. Muatan Statis dikodekan base64. Untuk templat payload, Payload akhir dihasilkan saat runtime menggunakan nilai parameter. Perangkat memproses Payload dan melakukan tindakan yang ditentukan. Tentukan jenis konten Payload untuk penerimaan perangkat yang benar.

**catatan**  
Muatan tidak dapat dimodifikasi setelah pembuatan Command. Buat Command baru untuk memodifikasi Payload.

#### Contoh kebijakan IAM
<a name="iot-remote-command-create-iam"></a>

Sebelum Anda menggunakan operasi API ini, pastikan bahwa kebijakan IAM Anda mengizinkan Anda untuk melakukan tindakan ini pada perangkat. Contoh berikut menunjukkan kebijakan IAM yang memungkinkan izin pengguna untuk melakukan `CreateCommand` tindakan.

Dalam contoh ini, ganti:
+ `region`dengan Anda Wilayah AWS, seperti`us-east-1`.
+ `account-id`dengan Akun AWS nomor Anda, seperti`123456789012`.
+ `command-id`dengan pengenal unik untuk ID AWS IoT perintah Anda, seperti`LockDoor`. Jika Anda ingin mengirim lebih dari satu perintah, Anda dapat menentukan perintah ini di bawah bagian *Sumber Daya* dalam kebijakan IAM.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Action": "iot:CreateCommand",
        "Effect": "Allow",
        "Resource": "arn:aws:iot:us-east-1:123456789012:command/command-id"
    }
}
```

#### Contoh pembuatan perintah statis
<a name="iot-remote-command-create-example"></a>

Contoh berikut menunjukkan bagaimana Anda dapat membuat perintah statis. Tergantung pada aplikasi Anda, ganti:
+ *`<command-id>`*dengan pengidentifikasi unik untuk perintah. Misalnya, untuk mengunci pintu rumah Anda, Anda dapat menentukan*`LockDoor`*. Kami menyarankan Anda menggunakan UUID. Anda juga dapat menggunakan karakter alfa-numerik, “-”, dan “\$1”.
+ (Opsional) *`<display-name>`* dan*`<description>`*, yang merupakan bidang opsional yang dapat Anda gunakan untuk memberikan nama yang ramah dan deskripsi yang bermakna untuk perintah, seperti*`Lock the doors of my home`*.
+ `namespace`, yang dapat Anda gunakan untuk menentukan namespace perintah. Itu pasti`AWS-IoT`. Untuk informasi tentang penggunaan fitur ini AWS IoT FleetWise, lihat [Perintah jarak jauh](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/remote-commands.html)
+ `payload`berisi informasi tentang payload yang ingin Anda gunakan saat menjalankan perintah dan jenis kontennya.

```
aws iot create-command \ 
    --command-id <command-id> \
    --display-name <display-name> \
    --description <description> \ 
    --namespace AWS-IoT \ 
    --payload '{"content":"eyAibWVzc2FnZSI6ICJIZWxsbyBJb1QiIH0=","contentType":"application/json"}'
```

Menjalankan perintah ini menghasilkan respons yang berisi ID dan ARN (nama sumber daya Amazon) dari perintah tersebut. Misalnya, jika Anda menentukan `LockDoor` perintah selama pembuatan, berikut ini menunjukkan contoh output menjalankan perintah.

```
{
    "commandId": "LockDoor",
    "commandArn": "arn:aws:iot:us-east-1:123456789012:command/LockDoor"
}
```

#### Contoh pembuatan perintah dinamis
<a name="iot-remote-dynamic-command-create-example"></a>

Contoh berikut menunjukkan bagaimana Anda dapat membuat perintah dinamis. Tergantung pada aplikasi Anda, ganti:
+ *`<command-id>`*dengan pengidentifikasi unik untuk perintah. Misalnya, untuk mengatur status daya cahaya, Anda dapat menentukan*`Light_Power_Status`*. Kami menyarankan Anda menggunakan UUID. Anda juga dapat menggunakan karakter alfa-numerik, “-”, dan “\$1”.
+ (Opsional) *`<display-name>`* dan*`<description>`*, yang merupakan bidang opsional yang dapat Anda gunakan untuk memberikan nama yang ramah dan deskripsi yang bermakna untuk perintah, seperti*`Turn a light ON or OFF`*.
+ `namespace`, yang dapat Anda gunakan untuk menentukan namespace perintah. Itu pasti`AWS-IoT`. Untuk informasi tentang penggunaan fitur ini AWS IoT FleetWise, lihat [Perintah jarak jauh](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/remote-commands.html)
+ `payloadTemplate`berisi template playoad berformat JSON dengan placehodlers.
+ `preprocessor`berisi konfigurasi untuk preprocessor yang menentukan bagaimana PayloadTemplate harus diproses.
+ `mandatoryParameter`berisi parameter yang sesuai dengan placeholder di PayloadTemplate, jenisnya, nilai default, dan kondisi.

```
aws iot create-command \
    --command-id Light_Power_Status \
    --description "Turn a light ON or OFF" \
    --namespace AWS-IoT \
    --payload-template '{"powerStatus":"${aws:iot:commandexecution::parameter:powerStatus}"}' \
    --preprocessor awsJsonSubstitution={outputFormat=JSON} \
    --mandatory-parameters "name=powerStatus, defaultValue={S=OFF}, valueConditions=[{comparisonOperator=IN_SET, operand={strings=['ON','OFF']}}]"
```

Menjalankan perintah ini menghasilkan respons yang berisi ID dan ARN (nama sumber daya Amazon) dari perintah tersebut. Misalnya, jika Anda menentukan `Light_Power_Status` perintah selama pembuatan, berikut ini menunjukkan contoh output menjalankan perintah.

```
{
    "commandId": "Light_Power_Status",
    "commandArn": "arn:aws:iot:us-east-1:123456789012:command/Light_Power_Status"
}
```

## Mengambil informasi tentang perintah
<a name="iot-remote-command-get"></a>

Setelah Anda membuat perintah, Anda dapat mengambil informasi tentang hal itu dari AWS IoT konsol dan menggunakan. AWS CLI Anda dapat memperoleh informasi berikut.
+ ID perintah, nama sumber daya Amazon (ARN), nama tampilan dan deskripsi apa pun yang Anda tentukan untuk perintah tersebut.
+ Status perintah, yang menunjukkan apakah perintah tersedia untuk dijalankan pada perangkat target, atau apakah perintah itu tidak digunakan lagi atau dihapus.
+ Payload atau payloadTemplate yang Anda berikan.
+ Preprocessor yang Anda berikan.
+ MandatoryParameters yang Anda berikan.
+ Waktu ketika perintah dibuat dan terakhir diperbarui.

### Mengambil sumber daya perintah (konsol)
<a name="iot-remote-command-get-console"></a>

Untuk mengambil perintah dari konsol, buka [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) AWS IoT konsol dan kemudian pilih perintah yang Anda buat untuk melihat detailnya.

Selain detail perintah, Anda dapat melihat riwayat perintah, yang memberikan informasi tentang eksekusi perintah pada perangkat target. Setelah Anda menjalankan perintah ini pada perangkat, Anda dapat menemukan informasi tentang eksekusi pada tab ini.

### Mengambil sumber daya perintah (CLI)
<a name="iot-remote-command-get-cli"></a>

Gunakan operasi API bidang kontrol [https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommand.html)HTTP atau [https://docs.aws.amazon.com/cli/latest/reference/get-command.html](https://docs.aws.amazon.com/cli/latest/reference/get-command.html) AWS CLI perintah untuk mengambil informasi tentang sumber daya perintah. Anda harus sudah membuat perintah menggunakan permintaan `CreateCommand` API atau `create-command` CLI.

#### Contoh kebijakan IAM
<a name="iot-remote-command-get-iam"></a>

Sebelum Anda menggunakan operasi API ini, pastikan bahwa kebijakan IAM Anda mengizinkan Anda untuk melakukan tindakan ini pada perangkat. Contoh berikut menunjukkan kebijakan IAM yang memungkinkan izin pengguna untuk melakukan `GetCommand` tindakan.

Dalam contoh ini, ganti:
+ `region`dengan Anda Wilayah AWS, seperti`us-east-1`.
+ `account-id`dengan Akun AWS nomor Anda, seperti`123456789023`.
+ `command-id`dengan pengidentifikasi perintah AWS IoT unik Anda, seperti `LockDoor` atau`Light_Power_Status`. Jika Anda ingin mengambil lebih dari satu perintah, Anda dapat menentukan perintah ini di bawah bagian *Sumber daya* dalam kebijakan IAM.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Action": "iot:GetCommand",
        "Effect": "Allow",
        "Resource": "arn:aws:iot:us-east-1:123456789012:command/command-id"
    }
}
```

#### Ambil contoh perintah ()AWS CLI
<a name="iot-remote-command-get-example"></a>

Contoh berikut menunjukkan kepada Anda bagaimana untuk mengambil informasi tentang perintah menggunakan. `get-command` AWS CLI Bergantung pada aplikasi Anda, ganti *`<command-id>`* dengan pengenal untuk perintah yang ingin Anda ambil informasinya. Anda dapat memperoleh informasi ini dari tanggapan `create-command` CLI.

```
aws iot get-command --command-id <command-id>
```

Menjalankan perintah ini menghasilkan respons yang berisi informasi tentang perintah, payload, dan waktu ketika itu dibuat dan terakhir diperbarui. Ini juga memberikan informasi yang menunjukkan apakah perintah telah usang atau sedang dihapus.

Misalnya, kode berikut menunjukkan respons sampel. 

```
{
    "commandId": "LockDoor",
    "commandArn": "arn:aws:iot:<region>:<account>:command/LockDoor",
    "namespace": "AWS-IoT",
    "payload":{
        "content": "eyAibWVzc2FnZSI6ICJIZWxsbyBJb1QiIH0=",
        "contentType": "application/json"
    },
    "createdAt": "2024-03-23T00:50:10.095000-07:00",
    "lastUpdatedAt": "2024-03-23T00:50:10.095000-07:00",
    "deprecated": false,
    "pendingDeletion": false
}
```

## Daftar perintah di Akun AWS
<a name="iot-remote-command-list"></a>

Setelah Anda membuat perintah, Anda dapat melihat perintah yang telah Anda buat di akun Anda. Dalam daftar, Anda dapat menemukan informasi tentang:
+ ID perintah, dan nama tampilan apa pun yang Anda tentukan untuk perintah.
+ Nama sumber daya Amazon (ARN) dari perintah.
+ Status perintah yang menunjukkan apakah perintah tersedia untuk dijalankan pada perangkat target, atau apakah perintah tersebut tidak digunakan lagi.
**catatan**  
Daftar tidak menampilkan yang sedang dihapus dari akun Anda. Jika perintah tertunda penghapusan, Anda masih dapat melihat detail untuk perintah ini menggunakan ID perintah mereka.
+ Waktu ketika perintah dibuat dan terakhir diperbarui.

### Daftar perintah di akun Anda (konsol)
<a name="iot-remote-command-list-console"></a>

Di AWS IoT konsol, Anda dapat menemukan daftar perintah yang Anda buat dan detailnya dengan masuk ke [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub).

### Daftar perintah di akun Anda (CLI)
<a name="iot-remote-command-list-cli"></a>

Untuk membuat daftar perintah yang Anda buat, gunakan operasi [https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommands.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommands.html)API atau [https://docs.aws.amazon.com/cli/latest/reference/iot/list-commands.html](https://docs.aws.amazon.com/cli/latest/reference/iot/list-commands.html)CLI.

#### Contoh kebijakan IAM
<a name="iot-remote-command-list-iam"></a>

Sebelum Anda menggunakan operasi API ini, pastikan bahwa kebijakan IAM Anda mengizinkan Anda untuk melakukan tindakan ini pada perangkat. Contoh berikut menunjukkan kebijakan IAM yang memungkinkan izin pengguna untuk melakukan `ListCommands` tindakan.

Dalam contoh ini, ganti:
+ `region`dengan Anda Wilayah AWS, seperti`us-east-1`.
+ `account-id`dengan Akun AWS nomor Anda, seperti`123456789012`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Action": "iot:ListCommands",
        "Effect": "Allow",
        "Resource": "arn:aws:iot:us-east-1:123456789012:command/*"
    }
}
```

#### Daftar perintah dalam contoh akun Anda
<a name="iot-remote-command-list-example"></a>

Perintah berikut menunjukkan cara membuat daftar perintah di akun Anda.

```
aws iot list-commands --namespace "AWS-IoT"
```

Menjalankan perintah ini menghasilkan respons yang berisi daftar perintah yang Anda buat, waktu ketika perintah dibuat dan kapan terakhir diperbarui. Ini juga menyediakan informasi status perintah, yang menunjukkan apakah perintah telah usang atau tersedia untuk dijalankan pada perangkat target. Untuk informasi selengkapnya tentang status dan alasan status yang berbeda, lihat[Status pelaksanaan perintah](iot-remote-command-concepts.md#iot-command-execution-status).

## Perbarui sumber daya perintah
<a name="iot-remote-command-update"></a>

Setelah Anda membuat perintah, Anda dapat memperbarui nama tampilan dan deskripsi perintah.

**catatan**  
Payload untuk perintah tidak dapat diperbarui. Untuk memperbarui informasi ini atau menggunakan payload yang dimodifikasi, Anda harus membuat perintah baru.

### Perbarui sumber daya perintah (konsol)
<a name="iot-remote-command-update-console"></a>

Untuk memperbarui perintah dari konsol, buka [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) AWS IoT konsol dan lakukan langkah-langkah berikut.

1. Untuk memperbarui sumber daya perintah yang ada, pilih perintah yang ingin Anda perbarui, lalu di bawah **Tindakan**, pilih **Edit**.

1. Tentukan nama tampilan dan deskripsi yang ingin Anda gunakan, dan pasangan nama-nilai apa pun sebagai tag untuk perintah Anda.

1. Pilih **Edit** untuk menyimpan perintah dengan pengaturan baru.

### Perbarui sumber daya perintah (CLI)
<a name="iot-remote-command-update-cli"></a>

Gunakan operasi API bidang [https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCommand.html)kontrol atau [https://docs.aws.amazon.com/cli/latest/reference/iot/update-command.html](https://docs.aws.amazon.com/cli/latest/reference/iot/update-command.html) AWS CLI untuk memperbarui sumber daya perintah. Dengan menggunakan API ini, Anda dapat:
+ Edit nama tampilan dan deskripsi perintah yang Anda buat.
+ Menghilangkan sumber daya perintah, atau memulihkan perintah yang sudah tidak digunakan lagi.

#### Contoh kebijakan IAM
<a name="iot-remote-command-update-iam"></a>

Sebelum Anda menggunakan operasi API ini, pastikan bahwa kebijakan IAM Anda mengizinkan Anda untuk melakukan tindakan ini pada perangkat. Contoh berikut menunjukkan kebijakan IAM yang memungkinkan izin pengguna untuk melakukan `UpdateCommand` tindakan.

Dalam contoh ini, ganti:
+ `region`dengan Anda Wilayah AWS, seperti`us-east-1`.
+ `account-id`dengan Akun AWS nomor Anda, seperti`123456789012`.
+ `command-id`dengan pengidentifikasi perintah AWS IoT unik Anda, seperti`LockDoor`. Jika Anda ingin mengambil lebih dari satu perintah, Anda dapat menentukan perintah ini di bawah bagian *Sumber daya* dalam kebijakan IAM.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Action": "iot:UpdateCommand",
        "Effect": "Allow",
        "Resource": "arn:aws:iot:us-east-1:123456789012:command/command-id"
    }
}
```

#### Perbarui informasi tentang contoh perintah (AWS CLI)
<a name="iot-remote-command-update-example"></a>

Contoh berikut menunjukkan kepada Anda cara memperbarui informasi tentang perintah menggunakan `update-command` AWS CLI perintah. Untuk informasi tentang cara menggunakan API ini untuk menghentikan atau memulihkan sumber daya perintah, lihat. [Perbarui sumber daya perintah (CLI)](iot-remote-command-deprecate.md#iot-remote-command-deprecate-cli)

Contoh menunjukkan bagaimana Anda dapat memperbarui nama tampilan dan deskripsi perintah. Bergantung pada aplikasi Anda, ganti *`<command-id>`* dengan pengenal untuk perintah yang ingin Anda ambil informasinya.

```
aws iot update-command \ 
    --command-id <command-id>    
    --displayname <display-name> \
    --description <description>
```

Menjalankan perintah ini menghasilkan respons yang berisi informasi terbaru tentang perintah dan waktu terakhir diperbarui. Kode berikut menunjukkan permintaan sampel dan respons untuk memperbarui nama tampilan dan deskripsi perintah yang mematikan AC.

```
aws iot update-command \ 
    --command-id <LockDoor> \ 
    --displayname <Secondary lock door> \
    --description <Locks doors to my home>
```

Menjalankan perintah ini menghasilkan respons berikut.

```
{
    "commandId": "LockDoor",
    "commandArn": "arn:aws:iot:us-east-1:123456789012:command/LockDoor",
    "displayName": "Secondary lock door",
    "description": "Locks doors to my home",
    "lastUpdatedAt": "2024-05-09T23:15:53.899000-07:00"
}
```

## Menghentikan atau memulihkan sumber daya perintah
<a name="iot-remote-command-deprecatecmd"></a>

Setelah Anda membuat perintah, jika tidak lagi ingin melanjutkan menggunakan perintah, Anda dapat menandainya sebagai usang. Saat Anda menghentikan perintah, semua eksekusi perintah yang tertunda akan terus berjalan di perangkat target hingga mencapai status terminal. Setelah perintah tidak digunakan lagi, jika Anda ingin menggunakannya seperti untuk mengirim eksekusi perintah baru ke perangkat target, Anda harus memulihkannya.

**catatan**  
Anda tidak dapat mengedit perintah usang, atau menjalankan eksekusi baru untuk itu. Untuk menjalankan perintah baru pada perangkat, Anda harus mengembalikannya sehingga status perintah berubah menjadi *Tersedia*.

 Untuk informasi tambahan tentang menghentikan dan memulihkan perintah, dan pertimbangan untuk itu, lihat. [Menghentikan sumber daya perintah](iot-remote-command-deprecate.md)

## Hapus sumber daya perintah
<a name="iot-remote-command-delete"></a>

Jika Anda tidak lagi ingin menggunakan perintah, Anda dapat menghapusnya secara permanen dari akun Anda. Jika tindakan penghapusan berhasil:
+ Jika perintah tidak digunakan lagi untuk durasi yang lebih lama dari batas waktu maksimum 12 jam, perintah akan segera dihapus.
+ Jika perintah tidak digunakan lagi, atau tidak digunakan lagi untuk durasi yang lebih pendek dari batas waktu maksimum, perintah akan berada dalam status. `pending deletion` Ini akan dihapus secara otomatis dari akun Anda setelah batas waktu maksimum 12 jam.

**catatan**  
Perintah dapat dihapus bahkan jika ada eksekusi perintah yang tertunda. Perintah akan berada dalam status penghapusan tertunda dan akan dihapus dari akun Anda secara otomatis.

### Hapus sumber daya perintah (konsol)
<a name="iot-remote-command-delete-console"></a>

Untuk menghapus perintah dari konsol, buka [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) AWS IoT konsol dan lakukan langkah-langkah berikut.

1. Pilih perintah yang ingin Anda hapus, dan kemudian di bawah **Tindakan**, pilih **Hapus**.

1. Konfirmasikan bahwa Anda ingin menghapus perintah dan kemudian pilih **Hapus**.

Perintah akan ditandai untuk dihapus dan akan dihapus secara permanen dari akun Anda setelah 12 jam.

### Hapus sumber daya perintah (CLI)
<a name="iot-remote-command-delete-cli"></a>

Gunakan operasi API bidang kontrol `DeleteCommand` HTTP atau `delete-command` AWS CLI perintah untuk menghapus sumber daya perintah. Jika tindakan penghapusan berhasil, Anda akan melihat HTTP `statusCode` 204 atau 202, dan perintah akan dihapus dari akun Anda secara otomatis setelah durasi batas waktu maksimum 12 jam. Dalam kasus status 204, ini menunjukkan bahwa perintah telah dihapus.

#### Contoh kebijakan IAM
<a name="iot-remote-command-delete-iam"></a>

Sebelum Anda menggunakan operasi API ini, pastikan bahwa kebijakan IAM Anda mengizinkan Anda untuk melakukan tindakan ini pada perangkat. Contoh berikut menunjukkan kebijakan IAM yang memungkinkan izin pengguna untuk melakukan `DeleteCommand` tindakan.

Dalam contoh ini, ganti:
+ `region`dengan Anda Wilayah AWS, seperti`us-east-1`.
+ `account-id`dengan Akun AWS nomor Anda, seperti`123456789012`.
+ `command-id`dengan pengidentifikasi perintah AWS IoT unik Anda, seperti`LockDoor`. Jika Anda ingin mengambil lebih dari satu perintah, Anda dapat menentukan perintah ini di bawah bagian *Sumber daya* dalam kebijakan IAM.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Action": "iot:DeleteCommand",
        "Effect": "Allow",
        "Resource": "arn:aws:iot:us-east-1:123456789012:command/command-id"
    }
}
```

#### Hapus contoh perintah (AWS CLI)
<a name="iot-remote-command-delete-example"></a>

Contoh berikut menunjukkan cara menghapus perintah menggunakan `delete-command` AWS CLI perintah. Bergantung pada aplikasi Anda, ganti *`<command-id>`* dengan pengenal untuk perintah yang Anda hapus.

```
aws iot delete-command --command-id <command-id>
```

Jika permintaan API berhasil, maka perintah menghasilkan kode status 202 atau 204. Anda dapat menggunakan `GetCommand` API untuk memverifikasi bahwa perintah tidak ada lagi di akun Anda.

# Memulai dan memantau pelaksanaan perintah
<a name="iot-remote-command-execution-start-monitor"></a>

Setelah membuat Command, mulai Eksekusi pada perangkat target. Perangkat memperbarui hasil dan menerbitkan status ke Topik yang dicadangkan MQTT. Ambil dan pantau status Eksekusi dari akun Anda.

Mulai dan pantau Perintah menggunakan AWS IoT konsol atau AWS CLI.

**Topics**
+ [Mulai eksekusi perintah](#iot-remote-command-execution-start)
+ [Memperbarui hasil pelaksanaan perintah](#iot-remote-command-execution-update)
+ [Ambil eksekusi perintah](#iot-remote-command-execution-get)
+ [Melihat pembaruan perintah menggunakan klien pengujian MQTT](#iot-remote-command-execution-update-mqtt)
+ [Daftar eksekusi perintah di Akun AWS](#iot-remote-command-execution-list)
+ [Hapus eksekusi perintah](#iot-remote-command-execution-delete)

## Mulai eksekusi perintah
<a name="iot-remote-command-execution-start"></a>

**penting**  
Anda bertanggung jawab penuh untuk menerapkan perintah dengan cara yang aman dan sesuai dengan hukum yang berlaku.

Sebelum memulai Eksekusi, pastikan:
+ Anda membuat Command di AWS IoT namespace dengan informasi Payload. Saat memulai Eksekusi, perangkat memproses instruksi Payload dan melakukan tindakan yang ditentukan. Lihat [Buat sumber daya perintah](iot-remote-command-create-manage.md#iot-remote-command-create) untuk Pembuatan perintah.
+ Perangkat Anda berlangganan Topik untuk Perintah yang dicadangkan MQTT. Saat memulai Eksekusi, informasi Payload dipublikasikan ke permintaan MQTT yang dicadangkan ini Topik:

  *<devices>*dapat berupa klien Things atau MQTT. *<DeviceID>*adalah nama Thing atau Client ID. *<PayloadFormat>*Nilai yang didukung: JSON dan CBOR. Untuk informasi selengkapnya, lihat [Topik perintah](reserved-topics.md#reserved-topics-commands).

  ```
  $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>
  ```

  Untuk non-JSON/CBOR*<PayloadFormat>*, gunakan format Topik Perintah ini:

  ```
  $aws/commands/<devices>/<DeviceID>/executions/+/request
  ```

### Pertimbangan perangkat target
<a name="iot-command-execution-target"></a>

Tentukan perangkat target untuk menerima dan menjalankan Perintah. Gunakan nama Thing untuk perangkat terdaftar atau ID Klien untuk perangkat yang tidak terdaftar. Setelah menerima Payload, perangkat menjalankan perintah dan melakukan tindakan yang ditentukan.

#### AWS IoT hal
<a name="iot-command-execution-target-thing"></a>

Perangkat target dapat berupa Hal-hal yang terdaftar di AWS IoT registri. Hal-hal menyederhanakan pencarian dan manajemen perangkat.

Daftarkan perangkat sebagai Things dari [halaman Connect device](https://console.aws.amazon.com/iot/home#/connect-overview) atau gunakan [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateThing.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateThing.html). Temukan Hal yang ada dari [Thing Hub](https://console.aws.amazon.com/iot/home#/thinghub) atau gunakan [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeThing.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeThing.html). Lihat [Mengelola hal-hal dengan registri](https://docs.aws.amazon.com/iot/latest/developerguide/thing-registry) untuk detail pendaftaran.

#### ID Klien
<a name="iot-command-execution-target-clientid"></a>

Untuk perangkat yang tidak terdaftar, gunakan ID Klien.

ID Klien adalah pengenal unik yang Anda tetapkan ke perangkat. Didefinisikan dalam protokol MQTT, ini berisi karakter alfanumerik, garis bawah, atau tanda hubung. Setiap perangkat yang terhubung AWS IoT memerlukan ID Klien yang unik.

**catatan**  
Untuk Hal-hal yang terdaftar, ID Klien dapat mencocokkan nama Thing.
Saat menargetkan ID Klien tertentu, perangkat harus terhubung AWS IoT menggunakan ID Klien tersebut untuk menerima Payload.

ID Klien adalah perangkat ID klien MQTT yang digunakan saat menghubungkan ke. AWS IoT Core AWS IoT menggunakan ID ini untuk mengidentifikasi perangkat dan mengelola koneksi dan langganan.

### Pertimbangan batas waktu eksekusi perintah
<a name="iot-command-execution-timeout"></a>

Timeout menentukan durasi (dalam detik) untuk perangkat untuk memberikan hasil Eksekusi.

Setelah membuat Eksekusi, timer dimulai. Jika perangkat offline atau gagal melaporkan hasil dalam batas waktu, Eksekusi akan habis dengan status`TIMED_OUT`.

Default: 10 detik. Maksimal: 12 jam.

#### Nilai waktu habis dan status `TIMED_OUT` eksekusi
<a name="iot-command-execution-timeout-status"></a>

Cloud dan perangkat dapat melaporkan batas waktu.

Setelah mengirim Perintah, timer dimulai. Jika tidak ada respons perangkat yang tiba dalam batas waktu, cloud akan menyetel status Eksekusi `TIMED_OUT` dengan kode `$NO_RESPONSE_FROM_DEVICE` alasan.

Ini terjadi ketika:
+ Perangkat offline selama Eksekusi.
+ Perangkat gagal menyelesaikan Eksekusi dalam batas waktu.
+ Perangkat gagal melaporkan status dalam batas waktu.

Dalam hal ini, ketika status eksekusi dilaporkan dari cloud, eksekusi perintah adalah non-terminal. `TIMED_OUT` Perangkat Anda dapat mempublikasikan respons yang mengganti status ke salah satu status terminal:`SUCCEEDED`,, `FAILED` atau. `REJECTED` Eksekusi perintah kemudian menjadi terminal dan tidak menerima pembaruan lebih lanjut.

Perangkat Anda juga dapat memperbarui `TIMED_OUT` status yang diprakarsai oleh cloud dengan melaporkan bahwa batas waktu terjadi saat menjalankan perintah. Dalam hal ini, status eksekusi perintah tetap di`TIMED_OUT`, tetapi `statusReason` objek diperbarui berdasarkan informasi yang dilaporkan oleh perangkat. Eksekusi perintah kemudian menjadi terminal, dan tidak ada pembaruan lebih lanjut yang diterima.

#### Menggunakan sesi persisten MQTT
<a name="iot-command-execution-timeout-persistent"></a>

Anda dapat mengonfigurasi sesi persisten MQTT untuk digunakan dengan fitur perintah. AWS IoT Device Management Fitur ini sangat berguna dalam kasus-kasus seperti ketika perangkat Anda offline dan Anda ingin memastikan bahwa perangkat masih menerima perintah ketika kembali online sebelum durasi batas waktu, dan melakukan instruksi yang ditentukan.

Secara default, kedaluwarsa sesi persisten MQTT diatur ke 60 menit. Jika batas waktu eksekusi perintah Anda dikonfigurasi ke nilai yang melebihi durasi ini, eksekusi perintah yang berjalan lebih dari 60 menit dapat ditolak oleh broker pesan dan gagal. Untuk menjalankan perintah yang durasinya lebih dari 60 menit, Anda dapat meminta peningkatan waktu kedaluwarsa sesi persisten.

**catatan**  
Untuk memastikan bahwa Anda menggunakan fitur sesi persisten MQTT dengan benar, setel flag Clean Start ke nol. Untuk informasi selengkapnya, lihat [Sesi persisten MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html#mqtt-persistent-sessions).

### Mulai eksekusi perintah (konsol)
<a name="iot-remote-command-execution-start-console"></a>

Untuk mulai menjalankan perintah dari konsol, buka halaman [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) AWS IoT konsol dan lakukan langkah-langkah berikut.

1. Untuk menjalankan perintah yang telah Anda buat, pilih **Run command**.

1. Tinjau informasi tentang perintah yang Anda buat, termasuk topik yang dicadangkan MQTT, dan parameter, jika berlaku.

   Untuk perintah dinamis, masukkan nilai parameter atau biarkan dengan default. Untuk parameter yang tidak memiliki nilai default, Anda harus memberikan nilai yang akan dikirim sebagai bagian dari eksekusi ini.

1. Tentukan perangkat target untuk menerima dan menjalankan Perintah. Perangkat dapat ditentukan sebagai AWS IoT sesuatu jika telah terdaftar AWS IoT, atau menggunakan ID klien jika perangkat Anda belum terdaftar. Untuk informasi selengkapnya, lihat [Pertimbangan perangkat target](#iot-command-execution-target)

1. (Opsional) Konfigurasikan nilai batas waktu untuk perintah yang menentukan durasi yang Anda inginkan untuk menjalankan perintah sebelum waktu habis. Jika perintah Anda perlu berjalan lebih dari 60 menit, Anda mungkin harus meningkatkan waktu kedaluwarsa sesi persisten MQTT. Untuk informasi selengkapnya, lihat [Pertimbangan batas waktu eksekusi perintah](#iot-command-execution-timeout).

1. Pilih **Jalankan perintah**.

### Mulai eksekusi perintah (AWS CLI)
<a name="iot-remote-command-execution-start-cli"></a>

Gunakan operasi API bidang data [https://docs.aws.amazon.com/iot/latest/apireference/API_StartCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_StartCommandExecution.html)HTTP untuk memulai eksekusi perintah. Permintaan dan respons API dikorelasikan oleh ID eksekusi perintah. Setelah perangkat selesai menjalankan perintah, perangkat dapat melaporkan status dan hasil eksekusi ke cloud dengan menerbitkan pesan ke topik respons perintah. Untuk kode respons khusus, kode aplikasi yang Anda miliki dapat memproses pesan respons dan memposting hasilnya AWS IoT.

Jika perangkat Anda telah berlangganan topik permintaan perintah, `StartCommandExecution` API akan memublikasikan pesan payload ke topik tersebut. Muatan dapat menggunakan format apa pun pilihan Anda. Untuk informasi selengkapnya, lihat [Muatan perintah](iot-remote-command-create-manage.md#iot-commands-payload).

```
$aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>
```

Jika format payload bukan JSON atau CBOR, berikut ini menunjukkan format topik permintaan perintah.

```
$aws/commands/<devices>/<DeviceID>/executions/+/request
```

#### Contoh kebijakan IAM
<a name="iot-remote-command-execution-start-policy"></a>

Sebelum Anda menggunakan operasi API ini, pastikan bahwa kebijakan IAM Anda mengizinkan Anda untuk melakukan tindakan ini pada perangkat. Contoh berikut menunjukkan kebijakan IAM yang memungkinkan izin pengguna untuk melakukan `StartCommandExecution` tindakan.

Dalam contoh ini, ganti:
+ `region`dengan Anda Wilayah AWS, seperti`us-east-1`.
+ `account-id`dengan Akun AWS nomor Anda, seperti`123456789012`.
+ `command-id`dengan pengenal unik untuk AWS IoT perintah Anda, seperti`LockDoor`. Jika Anda ingin mengirim lebih dari satu perintah, Anda dapat menentukan perintah ini dalam kebijakan IAM.
+ `devices`dengan salah satu `thing` atau `client` tergantung pada apakah perangkat Anda telah terdaftar sebagai AWS IoT sesuatu, atau ditentukan sebagai klien MQTT.
+ `device-id`dengan Anda AWS IoT `thing-name` atau`client-id`.

```
{
  "Effect": "Allow",
  "Action": [
      "iot:StartCommandExecution"
  ],
  "Resource": [
      "arn:aws:iot:region:account-id:command/command-id",
      "arn:aws:iot:region:account-id:devices/device-id"
  ]
}
```

Untuk melihat daftar kunci kondisi yang didukung`StartCommandExecution`, lihat [Kunci Kondisi untuk AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-policy-keys) di *Panduan Pengguna IAM*.

#### Dapatkan titik akhir bidang data khusus akun
<a name="iot-remote-command-execution-start-endpoint"></a>

Sebelum menjalankan perintah API, Anda harus mendapatkan URL endpoint khusus akun untuk endpoint. Jika Anda menggunakan titik akhir dual-stack (IPv4dan IPv6), gunakan. `iot:Data-ATS` `iot:Jobs`Titik akhir IPv4 hanya untuk. Misalnya, jika Anda menjalankan perintah ini:

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

Ini mengembalikan URL endpoint khusus akun seperti yang ditunjukkan dalam respons sampel di bawah ini.

```
{
    "endpointAddress":
    "<account-specific-prefix>-ats.iot.<region>.api.com"
}
```

#### Mulai contoh eksekusi perintah (AWS CLI)
<a name="iot-remote-command-execution-start-example"></a>

Contoh berikut menampilkan bagaimana untuk mulai menjalankan perintah menggunakan `start-command-execution` AWS CLI perintah.

Dalam contoh ini, ganti:
+ *`<command-arn>`*dengan ARN untuk perintah yang ingin Anda jalankan. Anda dapat memperoleh informasi ini dari respons perintah `create-command` CLI. Misalnya, jika Anda menjalankan perintah untuk mengubah mode roda kemudi, gunakan`arn:aws:iot:region:account-id:command/SetComfortSteeringMode`.
+ *`<target-arn>`*dengan Thing ARN untuk perangkat target, yang bisa berupa IoT atau klien MQTT, yang ingin Anda jalankan perintahnya. Misalnya, jika Anda menjalankan perintah untuk perangkat target`myRegisteredThing`, gunakan`arn:aws:iot:region:account-id:thing/myRegisteredThing`.
+ *`<endpoint-url>`*dengan titik akhir khusus akun yang Anda peroleh[Dapatkan titik akhir bidang data khusus akun](#iot-remote-command-execution-start-endpoint), diawali oleh. `https://` Misalnya, `https://123456789012abcd.jobs.iot.us-east-1.amazonaws.com`.
+ (Opsional) Anda juga dapat menentukan parameter tambahan`executionTimeoutSeconds`,, saat melakukan operasi `StartCommandExecution` API. Bidang opsional ini menentukan waktu dalam detik di mana perangkat harus menyelesaikan menjalankan perintah. Secara default, nilainya adalah 10 detik. Ketika status eksekusi perintah`CREATED`, timer dimulai. Jika hasil eksekusi perintah tidak diterima sebelum timer kedaluwarsa, maka status secara otomatis berubah menjadi`TIMED_OUT`.
+ 

  ```
  aws iot-jobs-data start-command-execution \
      --command-arn <command-arn>  \
      --target-arn <target-arn> \  
      --endpoint <endpoint-url> \ 
      --execution-timeout-seconds 900
  ```
+ (Opsional) Untuk perintah dinamis, tentukan parameter dan nilainya yang akan digunakan untuk substitusi. Anda harus memberikan nilai untuk parameter yang tidak memiliki defaultValue yang ditetapkan pada pembuatan perintah. Jika parameter memiliki defaultValue, nilai parameter yang disediakan di sini diutamakan. Untuk parameter yang memiliki ValueConditions ditetapkan, nilai parameter yang disediakan di sini harus memenuhi kondisi.

  Berdasarkan contoh perintah `Light_Power_Status` dinamis:
+ 

  ```
  aws iot-jobs-data start-command-execution \
      --command-arn arn:aws:iot:us-east-1:123456789012:command/Light_Power_Status  \
      --target-arn arn:aws:iot:us-east-1:123456789012:thing/exampleThing \
      --endpoint <endpoint-url> \
      --execution-timeout-seconds 900 \
      --parameters "powerStatus={S=ON}"
  ```

Menjalankan perintah ini mengembalikan ID eksekusi perintah. Anda dapat menggunakan ID ini untuk menanyakan status eksekusi perintah, detail, dan riwayat eksekusi perintah.

**catatan**  
Jika perintah telah usang, maka permintaan `StartCommandExecution` API akan gagal dengan pengecualian validasi. Untuk memperbaiki kesalahan ini, pertama-tama pulihkan perintah menggunakan `UpdateCommand` API, lalu lakukan `StartCommandExecution` permintaan.

```
{
    "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542"
}
```

## Memperbarui hasil pelaksanaan perintah
<a name="iot-remote-command-execution-update"></a>

Gunakan operasi API bidang data `UpdateCommandExecution` MQTT untuk memperbarui status atau hasil eksekusi perintah.

**catatan**  
Sebelum Anda menggunakan API ini:  
Perangkat Anda harus telah membuat koneksi MQTT dan berlangganan topik permintaan perintah dan respons. Untuk informasi selengkapnya, lihat [Alur kerja perintah tingkat tinggi](iot-remote-command-workflow.md).
Anda harus sudah menjalankan perintah ini menggunakan operasi `StartCommandExecution` API.

### Contoh kebijakan IAM
<a name="iot-remote-command-execution-update-policy"></a>

Sebelum Anda menggunakan operasi API ini, pastikan bahwa kebijakan IAM Anda mengotorisasi perangkat Anda untuk melakukan tindakan ini. Berikut ini menunjukkan contoh kebijakan yang mengizinkan perangkat Anda untuk melakukan tindakan. Untuk contoh kebijakan IAM tambahan yang memungkinkan izin pengguna untuk melakukan tindakan `UpdateCommandExecution` MQTT, lihat. [Connect dan publikasikan contoh kebijakan](connect-and-pub.md)

Dalam contoh ini, ganti:
+ `Region`dengan Anda Wilayah AWS, seperti`us-east-1`.
+ `AccountID`dengan Akun AWS nomor Anda, seperti*`123456789012`*.
+ `ThingName`dengan nama AWS IoT barang Anda yang Anda targetkan eksekusi perintah, seperti*`myRegisteredThing`*.
+ `commands-request-topic`dan `commands-response-topic` dengan nama-nama permintaan AWS IoT perintah dan topik tanggapan Anda. Untuk informasi selengkapnya, lihat [Alur kerja perintah tingkat tinggi](iot-remote-command-workflow.md).

#### Contoh kebijakan IAM untuk ID klien MQTT
<a name="iot-remote-command-execution-update-policy-client"></a>

Kode berikut menunjukkan contoh kebijakan perangkat saat menggunakan ID klien MQTT.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/json"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request/json",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted/json",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected/json"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request/json",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted/json",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected/json"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}"
    }
  ]
}
```

#### Contoh kebijakan IAM untuk hal IoT
<a name="iot-remote-command-execution-update-policy-thing"></a>

Kode berikut menunjukkan contoh kebijakan perangkat saat menggunakan AWS IoT sesuatu.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request/json",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted/json",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected/json"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request/json",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted/json",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected/json"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}"
    }
  ]
}
```

### Cara menggunakan `UpdateCommandExecution` API
<a name="iot-remote-command-execution-update-works"></a>

Setelah eksekusi perintah diterima pada topik permintaan, perangkat memproses perintah. Kemudian menggunakan `UpdateCommandExecution` API untuk memperbarui status dan hasil eksekusi perintah ke topik respons berikut.

```
$aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>
```

Dalam contoh ini, *`<DeviceID>`* adalah pengenal unik perangkat target Anda, dan *`<execution-id>`* merupakan pengidentifikasi eksekusi perintah pada perangkat target. *<PayloadFormat>*Bisa JSON atau CBOR.

**catatan**  
Jika Anda belum mendaftarkan perangkat AWS IoT, Anda dapat menggunakan ID klien sebagai pengenal, bukan nama benda.

```
$aws/commands/clients/<ClientID>/executions/<ExecutionId>/response/<PayloadFormat>
```

#### Perangkat melaporkan pembaruan ke status eksekusi
<a name="iot-command-execution-reported"></a>

Perangkat Anda dapat menggunakan API untuk melaporkan salah satu pembaruan status berikut ke eksekusi perintah. Untuk informasi lebih lanjut tentang status ini, lihat[Status pelaksanaan perintah](iot-remote-command-concepts.md#iot-command-execution-status).
+ `IN_PROGRESS`: Ketika perangkat mulai menjalankan perintah, itu dapat memperbarui status ke`IN_PROGRESS`.
+ `SUCCEEDED`: Ketika perangkat berhasil memproses perintah dan menyelesaikan menjalankannya, perangkat dapat mempublikasikan pesan ke topik respons sebagai. `SUCCEEDED`
+ `FAILED`: Jika perangkat gagal menjalankan perintah, perangkat dapat mempublikasikan pesan ke topik respons sebagai`FAILED`.
+ `REJECTED`: Jika perangkat gagal menerima perintah, perangkat dapat mempublikasikan pesan ke topik respons sebagai`REJECTED`.
+ `TIMED_OUT`: Status eksekusi perintah dapat berubah `TIMED_OUT` karena salah satu alasan berikut.
  + Hasil eksekusi perintah tidak diterima. Hal ini dapat terjadi karena eksekusi tidak selesai dalam durasi yang ditentukan, atau jika perangkat gagal mempublikasikan informasi status ke topik respons.
  + Perangkat melaporkan bahwa waktu habis terjadi ketika mencoba menjalankan perintah.

Untuk informasi selengkapnya tentang `TIMED_OUT` status, lihat[Nilai waktu habis dan status `TIMED_OUT` eksekusi](#iot-command-execution-timeout-status).

#### Pertimbangan saat menggunakan API `UpdateCommandExecution`
<a name="iot-remote-command-execution-update-considerations"></a>

Berikut ini adalah beberapa pertimbangan penting saat menggunakan `UpdateCommandExecution` API.
+ Perangkat Anda dapat menggunakan `statusReason` objek opsional untuk memberikan informasi tambahan tentang eksekusi. Jika perangkat Anda menyediakan objek ini, `reasonCode` bidang objek diperlukan, tetapi `reasonDescription` bidangnya opsional.
+ Ketika perangkat Anda menggunakan `statusReason` objek, `reasonCode` harus menggunakan pola `[A-Z0-9_-]+` dan tidak melebihi 64 karakter panjangnya. Jika Anda memberikan`reasonDescription`, pastikan bahwa itu tidak melebihi 1.024 karakter panjangnya. Itu dapat menggunakan karakter apa pun kecuali karakter kontrol seperti baris baru.
+ Perangkat Anda dapat menggunakan `result` objek opsional untuk memberikan informasi tentang hasil eksekusi perintah, seperti nilai pengembalian panggilan fungsi jarak jauh. Jika Anda memberikan`result`, itu harus memerlukan setidaknya satu entri.
+ Di `result` bidang, Anda menentukan entri sebagai pasangan nilai kunci. Untuk setiap entri, Anda harus menentukan informasi tipe data sebagai string, boolean, atau biner. Tipe data string harus menggunakan kunci`s`, tipe data boolean menggunakan kunci`b`, dan tipe data biner harus menggunakan kunci`bin`. Pastikan bahwa kunci ini huruf kecil.
+ Jika Anda mengalami kesalahan saat menjalankan `UpdateCommandExecution` API, Anda dapat melihat kesalahan di grup `AWSIoTLogsV2` log di Amazon CloudWatch. Untuk informasi tentang mengaktifkan logging dan melihat log, lihat[Konfigurasikan AWS IoT logging](configure-logging.md).

#### `UpdateCommandExecution`Contoh API
<a name="iot-remote-command-execution-update-example"></a>

Kode berikut menunjukkan contoh bagaimana perangkat Anda dapat menggunakan `UpdateCommandExecution` API untuk melaporkan status eksekusi, `statusReason` bidang untuk memberikan informasi tambahan tentang status, dan bidang hasil untuk memberikan informasi tentang hasil eksekusi, seperti persentase baterai mobil dalam kasus ini.

```
{
  "status": "IN_PROGRESS",
  "statusReason": {
    "reasonCode": "200",
    "reasonDescription": "Execution_in_progress"
  },
  "result": {
        "car_battery": {
            "s": "car battery at 50 percent"
        }
    }
}
```

## Ambil eksekusi perintah
<a name="iot-remote-command-execution-get"></a>

Setelah Anda menjalankan perintah, Anda dapat mengambil informasi tentang eksekusi perintah dari AWS IoT konsol dan menggunakan. AWS CLI Anda dapat memperoleh informasi berikut.

**catatan**  
Untuk mengambil status eksekusi perintah terbaru, perangkat Anda harus mempublikasikan informasi status ke topik respons menggunakan `UpdateCommandExecution` MQTT API, seperti yang dijelaskan di bawah ini. Sampai perangkat memublikasikan topik ini, `GetCommandExecution` API akan melaporkan status sebagai `CREATED` atau`TIMED_OUT`.

Setiap pelaksanaan perintah yang Anda buat akan memiliki:
+ **ID Pelaksanaan**, yang merupakan pengidentifikasi unik pelaksanaan perintah.
+ **Status** pelaksanaan perintah. Ketika Anda menjalankan perintah di perangkat target, pelaksanaan perintah memasuki status `CREATED`. Kemudian perintah dapat beralih ke status pelaksanaan perintah lain seperti yang dijelaskan di bawah ini.
+ **Hasil** eksekusi perintah.
+ **ID Perintah** unik dan perangkat target yang telah dibuatkan pelaksanaan.
+ **Tanggal mulai**, yang menunjukkan waktu ketika pelaksanaan perintah dibuat.

### Mengambil eksekusi perintah (konsol)
<a name="iot-remote-command-execution-get-console"></a>

Anda dapat mengambil eksekusi perintah dari konsol menggunakan salah satu metode berikut.
+ 

**Dari halaman Command hub**  
Buka halaman [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) AWS IoT konsol dan lakukan langkah-langkah ini.

  1. Pilih perintah yang Anda buat eksekusi pada perangkat target.

  1. Di halaman detail perintah, pada tab **Riwayat perintah**, Anda akan melihat eksekusi yang Anda buat. Pilih eksekusi yang ingin Anda ambil informasinya.

  1. Jika perangkat Anda menggunakan `UpdateCommandExecution` API untuk memberikan informasi hasil, Anda dapat menemukan informasi ini di tab **Hasil** di halaman ini.
+ 

**Dari halaman Thing hub**  
Jika Anda memilih AWS IoT sesuatu sebagai perangkat target saat menjalankan perintah, Anda dapat melihat detail eksekusi dari halaman Thing hub.

  1. Buka halaman [Thing Hub](https://console.aws.amazon.com/iot/home#/thinghub) di AWS IoT konsol dan pilih hal yang Anda buat eksekusi perintah.

  1. Di halaman detail hal, pada **riwayat Perintah**, Anda akan melihat eksekusi yang Anda buat. Pilih eksekusi yang ingin Anda ambil informasinya.

  1. Jika perangkat Anda menggunakan `UpdateCommandExecution` API untuk memberikan informasi hasil, Anda dapat menemukan informasi ini di tab **Hasil** di halaman ini.

### Mengambil eksekusi perintah (CLI)
<a name="iot-remote-command-execution-get-cli"></a>

Gunakan operasi API HTTP bidang [https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommandExecution.html) AWS IoT Core kontrol untuk mengambil informasi tentang eksekusi perintah. Anda harus sudah menjalankan perintah ini menggunakan operasi `StartCommandExecution` API.

#### Contoh kebijakan IAM
<a name="iot-remote-command-execution-get-policy"></a>

Sebelum Anda menggunakan operasi API ini, pastikan bahwa kebijakan IAM Anda mengizinkan Anda untuk melakukan tindakan ini pada perangkat. Contoh berikut menunjukkan kebijakan IAM yang memungkinkan izin pengguna untuk melakukan `GetCommandExecution` tindakan.

Dalam contoh ini, ganti:
+ `region`dengan Anda Wilayah AWS, seperti`us-east-1`.
+ `account-id`dengan Akun AWS nomor Anda, seperti`123456789012`.
+ `command-id`dengan pengidentifikasi AWS IoT perintah unik Anda, seperti`LockDoor`.
+ `devices`dengan salah satu `thing` atau `client` tergantung pada apakah perangkat Anda telah terdaftar sebagai AWS IoT sesuatu, atau ditentukan sebagai klien MQTT.
+ `device-id`dengan Anda AWS IoT `thing-name` atau`client-id`.

```
{
  "Effect": "Allow",
  "Action": [
      "iot:GetCommandExecution"
  ],
  "Resource": [
      "arn:aws:iot:region:account-id:command/command-id",
      "arn:aws:iot:region:account-id:devices/device-id"
  ]
}
```

#### Ambil contoh eksekusi perintah
<a name="iot-remote-command-execution-get-example"></a>

Contoh berikut menunjukkan kepada Anda bagaimana untuk mengambil informasi tentang perintah yang dijalankan menggunakan `start-command-execution` AWS CLI perintah. Contoh berikut menunjukkan bagaimana Anda dapat mengambil informasi tentang perintah yang dijalankan untuk mematikan mode roda kemudi.

Dalam contoh ini, ganti:
+ *`<execution-id>`*dengan pengidentifikasi untuk eksekusi perintah yang ingin Anda ambil informasinya.
+ *`<target-arn>`*dengan Amazon Resource Number (ARN) perangkat yang Anda targetkan eksekusi. Anda dapat memperoleh informasi ini dari respons perintah `start-command-execution` CLI.
+ Secara opsional, jika perangkat Anda menggunakan `UpdateCommandExection` API untuk memberikan hasil eksekusi, Anda dapat menentukan apakah akan menyertakan hasil eksekusi perintah dalam respons `GetCommandExecution` API menggunakan `GetCommandExecution` API.

```
aws iot get-command-execution  
    --execution-id <execution-id> \ 
    --target-arn <target-arn> \
    --include-result
```

Menjalankan perintah ini menghasilkan respons yang berisi informasi tentang ARN dari eksekusi perintah, status eksekusi, dan waktu ketika mulai mengeksekusi, dan ketika selesai. Ini juga menyediakan `statusReason` objek yang berisi informasi tambahan tentang status. Untuk informasi selengkapnya tentang status dan alasan status yang berbeda, lihat[Status pelaksanaan perintah](iot-remote-command-concepts.md#iot-command-execution-status). 

Kode berikut menunjukkan respons sampel dari permintaan API.

**catatan**  
`completedAt`Bidang dalam respons eksekusi sesuai dengan waktu ketika perangkat melaporkan status terminal ke cloud. Dalam hal `TIMED_OUT` status, bidang ini akan disetel hanya ketika perangkat melaporkan waktu habis. Ketika `TIMED_OUT` status diatur oleh cloud, `TIMED_OUT` status tidak diperbarui. Untuk informasi lebih lanjut tentang perilaku time out, lihat[Pertimbangan batas waktu eksekusi perintah](#iot-command-execution-timeout).

```
{
    "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542",
    "commandArn": "arn:aws:iot:us-east-1:123456789012:command/LockDoor",
    "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/myRegisteredThing",
    "status": "SUCCEEDED",
    "statusReason": {
        "reasonCode": "DEVICE_SUCCESSFULLY_EXECUTED",
        "reasonDescription": "SUCCESS"
    },
    "result": {
        "sn": { "s": "ABC-001" },
        "digital": { "b": true }        
    },
    "createdAt": "2024-03-23T00:50:10.095000-07:00",
    "completedAt": "2024-03-23T00:50:10.095000-07:00"    
}
```

## Melihat pembaruan perintah menggunakan klien pengujian MQTT
<a name="iot-remote-command-execution-update-mqtt"></a>

Anda dapat menggunakan klien pengujian MQTT untuk melihat pertukaran pesan melalui MQTT saat menggunakan fitur perintah. Setelah perangkat Anda membuat koneksi MQTT dengan AWS IoT, Anda dapat membuat perintah, menentukan payload, dan kemudian menjalankannya di perangkat. Saat Anda menjalankan perintah, jika perangkat Anda berlangganan topik permintaan cadangan MQTT untuk perintah, ia akan melihat pesan payload yang dipublikasikan ke topik ini.

Perangkat kemudian menerima instruksi muatan dan melakukan operasi yang ditentukan pada AWS IoT perangkat. Kemudian menggunakan `UpdateCommandExecution` API untuk mempublikasikan hasil eksekusi perintah dan informasi status ke topik respons cadangan MQTT untuk perintah. AWS IoT Device Management mendengarkan pembaruan tentang topik respons dan menyimpan informasi yang diperbarui dan menerbitkan log ke dan AWS CloudTrail Amazon. CloudWatch Anda kemudian dapat mengambil informasi eksekusi perintah terbaru dari konsol atau dengan menggunakan `GetCommandExecution` API.

Langkah-langkah berikut menunjukkan cara menggunakan klien pengujian MQTT untuk mengamati pesan.

1. Buka [klien pengujian MQTT di konsol](https://console.aws.amazon.com/iot/home#/test). AWS IoT 

1. Pada tab **Berlangganan**, masukkan topik berikut lalu pilih **Berlangganan**, di mana *<thingId>* nama perangkat yang telah Anda daftarkan AWS IoT.
**catatan**  
Anda dapat menemukan nama benda untuk perangkat Anda dari halaman [Thing Hub](https://console.aws.amazon.com/iot/home#/thinghub) AWS IoT konsol. Jika Anda belum mendaftarkan perangkat sebagai sesuatu, Anda dapat mendaftarkan perangkat saat menyambungkan ke AWS IoT dari [halaman Connect device](https://console.aws.amazon.com/iot/home#/connect-overview).

   ```
   $aws/commands/things/<thingId>/executions/+/request
   ```

1. (Opsional) Pada tab **Berlangganan**, Anda juga dapat memasukkan topik berikut dan memilih **Berlangganan**.

   ```
   $aws/commands/things/+/executions/+/response/accepted/json
   $aws/commands/things/+/executions/+/response/rejected/json
   ```

1. Saat Anda memulai eksekusi perintah, payload pesan akan dikirim ke perangkat menggunakan topik permintaan yang telah dilanggani perangkat,. `$aws/commands/things/<thingId>/executions/+/request` Di klien pengujian MQTT, Anda akan melihat payload perintah yang berisi instruksi untuk perangkat untuk memproses perintah.

1. Setelah perangkat mulai menjalankan perintah, perangkat dapat mempublikasikan pembaruan status ke topik respons cadangan MQTT berikut untuk perintah.

   ```
   $aws/commands/<devices>/<device-id>/executions/<executionId>/response/json
   ```

   Misalnya, pertimbangkan perintah yang Anda jalankan untuk menyalakan AC mobil Anda untuk mengurangi suhu ke nilai yang diinginkan. JSON berikut menunjukkan contoh pesan bahwa kendaraan dipublikasikan ke topik respons yang menunjukkan bahwa ia gagal menjalankan perintah.

   ```
   {
     "deviceId": "My_Car",
     "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542",
     "status": "FAILED",
     "statusReason": {
       "reasonCode": "CAR_LOW_ON_BATTERY",
       "reasonDescription": "Car battery is lower than 5 percent"
     }
   }
   ```

   Dalam hal ini, Anda dapat mengisi baterai mobil Anda dan kemudian menjalankan perintah lagi.

## Daftar eksekusi perintah di Akun AWS
<a name="iot-remote-command-execution-list"></a>

Setelah Anda menjalankan perintah, Anda dapat mengambil informasi tentang eksekusi perintah dari AWS IoT konsol dan menggunakan. AWS CLI Anda dapat memperoleh informasi berikut.
+ **ID Pelaksanaan**, yang merupakan pengidentifikasi unik pelaksanaan perintah.
+ **Status** pelaksanaan perintah. Ketika Anda menjalankan perintah di perangkat target, pelaksanaan perintah memasuki status `CREATED`. Kemudian perintah dapat beralih ke status pelaksanaan perintah lain seperti yang dijelaskan di bawah ini.
+ **ID Perintah** unik dan perangkat target yang telah dibuatkan pelaksanaan.
+ **Tanggal mulai**, yang menunjukkan waktu ketika pelaksanaan perintah dibuat.

### Daftar eksekusi perintah di akun Anda (konsol)
<a name="iot-remote-command-execution-list-console"></a>

Anda dapat melihat semua eksekusi perintah dari konsol menggunakan salah satu metode berikut.
+ 

**Dari halaman Command hub**  
Buka halaman [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) AWS IoT konsol dan lakukan langkah-langkah ini.

  1. Pilih perintah yang Anda buat eksekusi pada perangkat target.

  1. Di halaman detail perintah, buka tab **Riwayat perintah**, dan Anda akan melihat daftar eksekusi yang Anda buat.
+ 

**Dari halaman Thing hub**  
Jika Anda memilih AWS IoT sesuatu sebagai perangkat target saat menjalankan perintah, dan membuat beberapa eksekusi perintah untuk satu perangkat, Anda dapat melihat eksekusi perangkat dari halaman Thing hub.

  1. Buka halaman [Thing Hub](https://console.aws.amazon.com/iot/home#/thinghub) di AWS IoT konsol dan pilih hal yang Anda buat eksekusi.

  1. Di halaman detail hal, pada **riwayat Perintah**, Anda akan melihat daftar eksekusi yang Anda buat untuk perangkat.

### Daftar eksekusi perintah di akun Anda (CLI)
<a name="iot-remote-command-execution-list-cli"></a>

Gunakan operasi API HTTP bidang [https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommandExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommandExecutions.html) AWS IoT Core kontrol untuk mencantumkan semua eksekusi perintah di akun Anda.

#### Contoh kebijakan IAM
<a name="iot-remote-command-execution-list-policy"></a>

Sebelum Anda menggunakan operasi API ini, pastikan bahwa kebijakan IAM Anda mengizinkan Anda untuk melakukan tindakan ini pada perangkat. Contoh berikut menunjukkan kebijakan IAM yang memungkinkan izin pengguna untuk melakukan `ListCommandExecutions` tindakan.

Dalam contoh ini, ganti:
+ `region`dengan Anda Wilayah AWS, seperti`us-east-1`.
+ `account-id`dengan Akun AWS nomor Anda, seperti`123456789012`.
+ `command-id`dengan pengidentifikasi AWS IoT perintah unik Anda, seperti`LockDoor`.

```
{
  "Effect": "Allow",
  "Action": "iot:ListCommandExecutions",
  "Resource": *
}
```

#### Contoh eksekusi perintah daftar
<a name="iot-remote-command-execution-list-example"></a>

Contoh berikut menunjukkan kepada Anda cara membuat daftar eksekusi perintah di file Anda Akun AWS.

Saat menjalankan perintah, Anda harus menentukan apakah akan memfilter daftar untuk menampilkan hanya eksekusi perintah yang dibuat untuk perangkat tertentu menggunakan`targetArn`, atau eksekusi untuk perintah tertentu yang ditentukan menggunakan perintah. `commandArn`

Dalam contoh ini, ganti:
+ *`<target-arn>`*dengan Amazon Resource Number (ARN) perangkat yang Anda targetkan eksekusi, seperti. `arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f`
+ *`<target-arn>`*dengan Amazon Resource Number (ARN) perangkat yang Anda targetkan eksekusi, seperti. `arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f`
+ *`<after>`*dengan waktu setelah itu Anda ingin membuat daftar eksekusi yang dibuat, misalnya,`2024-11-01T03:00`.

```
aws iot list-command-executions \ 
--target-arn <target-arn> \ 
--started-time-filter '{after=<after>}' \
--sort-order "ASCENDING"
```

Menjalankan perintah ini menghasilkan respons yang berisi daftar eksekusi perintah yang Anda buat, dan waktu ketika eksekusi mulai dijalankan, dan ketika selesai. Ini juga menyediakan informasi status, dan `statusReason` objek yang berisi informasi tambahan tentang status.

```
{
    "commandExecutions": [
        {
            "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002",
            "executionId": "b2b654ca-1a71-427f-9669-e74ae9d92d24",
            "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f",
            "status": "TIMED_OUT",
            "createdAt": "2024-11-24T14:39:25.791000-08:00",
            "startedAt": "2024-11-24T14:39:25.791000-08:00"
        },
        {
            "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002",
            "executionId": "34bf015f-ef0f-4453-acd0-9cca2d42a48f",
            "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f",
            "status": "IN_PROGRESS",
            "createdAt": "2024-11-24T14:05:36.021000-08:00",
            "startedAt": "2024-11-24T14:05:36.021000-08:00"
        }
    ]
}
```

Untuk informasi selengkapnya tentang status dan alasan status yang berbeda, lihat[Status pelaksanaan perintah](iot-remote-command-concepts.md#iot-command-execution-status).

## Hapus eksekusi perintah
<a name="iot-remote-command-execution-delete"></a>

Jika Anda tidak lagi ingin menggunakan eksekusi perintah, Anda dapat menghapusnya secara permanen dari akun Anda.

**catatan**  
Eksekusi perintah dapat dihapus hanya jika telah memasuki status terminal, seperti`SUCCEEDED`,`FAILED`, atau`REJECTED`.
Operasi ini dapat dilakukan hanya dengan menggunakan AWS IoT Core API atau AWS CLI. Ini tidak tersedia dari konsol.

### Contoh kebijakan IAM
<a name="iot-remote-command-execution-delete-policy"></a>

Sebelum Anda menggunakan operasi API ini, pastikan bahwa kebijakan IAM Anda mengotorisasi perangkat Anda untuk melakukan tindakan ini. Berikut ini menunjukkan contoh kebijakan yang mengizinkan perangkat Anda untuk melakukan tindakan.

Dalam contoh ini, ganti:
+ `Region`dengan Anda Wilayah AWS, seperti`us-east-1`.
+ `AccountID`dengan Akun AWS nomor Anda, seperti*`123456789012`*.
+ `CommandID`dengan pengidentifikasi perintah yang ingin Anda hapus eksekusi.
+ `devices`dengan salah satu `thing` atau `client` tergantung pada apakah perangkat Anda telah terdaftar sebagai AWS IoT sesuatu, atau ditentukan sebagai klien MQTT.
+ `device-id`dengan Anda AWS IoT `thing-name` atau`client-id`.

```
{
  "Effect": "Allow",
  "Action": [
      "iot:DeleteCommandExecution"
  ],
  "Resource": [
      "arn:aws:iot:region:account-id:command/command-id",
      "arn:aws:iot:region:account-id:devices/device-id"
  ]
}
```

### Hapus contoh eksekusi perintah
<a name="iot-remote-command-execution-delete-example"></a>

Contoh berikut menunjukkan cara menghapus perintah menggunakan `delete-command` AWS CLI perintah. Bergantung pada aplikasi Anda, ganti *`<execution-id>`* dengan pengenal untuk eksekusi perintah yang Anda hapus, dan *`<target-arn>`* dengan ARN perangkat target Anda. 

```
aws iot delete-command-execution \ 
--execution-id <execution-id> \ 
--target-arn <target-arn>
```

Jika permintaan API berhasil, maka eksekusi perintah menghasilkan kode status 200. Anda dapat menggunakan `GetCommandExecution` API untuk memverifikasi bahwa eksekusi perintah tidak ada lagi di akun Anda.

# Menghentikan sumber daya perintah
<a name="iot-remote-command-deprecate"></a>

Usang perintah untuk menunjukkan bahwa perintah tersebut sudah usang dan tidak boleh digunakan. Misalnya, perintah usang tidak lagi dipertahankan secara aktif atau saat membuat perintah yang lebih baru dengan ID yang sama tetapi muatan yang berbeda.

## Pertimbangan utama
<a name="iot-remote-command-deprecate-considerations"></a>

Pertimbangan penting saat menghentikan perintah:
+ Menolak perintah tidak menghapusnya. Anda dapat mengambil perintah menggunakan ID dan mengembalikannya untuk digunakan kembali.
+ Mencoba untuk memulai eksekusi baru pada perintah usang menghasilkan kesalahan, mencegah penggunaan perintah usang.
+ Untuk menjalankan perintah usang, pertama-tama pulihkan. Setelah restorasi, perintah menjadi tersedia untuk penggunaan reguler dan eksekusi pada perangkat target.
+ Jika Anda menghentikan perintah saat eksekusi sedang berlangsung, perintah tersebut akan terus berjalan hingga selesai. Anda masih dapat mengambil status eksekusi.

## Menghilangkan sumber daya perintah (konsol)
<a name="iot-remote-command-deprecate-console"></a>

Untuk menghentikan perintah dari konsol, buka [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) AWS IoT konsol dan lakukan langkah-langkah berikut.

1. **Pilih perintah yang ingin Anda hentikan, lalu di bawah **Actions**, pilih Deprecate.**

1. **Konfirmasikan bahwa Anda ingin menghentikan perintah dan kemudian pilih Deprecate.**

## Menghilangkan sumber daya perintah (CLI)
<a name="iot-remote-command-deprecate-cli"></a>

Tandai perintah sebagai usang menggunakan CLI. `update-command` Anda harus menghentikan perintah sebelum penghapusan. Untuk menggunakan perintah usang, pulihkan terlebih dahulu.

```
aws iot update-command \ 
    --command-id <command-id> \ 
    --deprecated
```

Misalnya, jika Anda menghentikan `ACSwitch` perintah yang Anda perbarui dalam contoh di atas, kode berikut menunjukkan contoh keluaran menjalankan perintah.

```
{
    "commandId": "turnOffAc",
    "deprecated": true,
    "lastUpdatedAt": "2024-05-09T23:16:51.370000-07:00"
}
```

## Periksa waktu dan status penghentian
<a name="iot-remote-command-deprecate-check"></a>

Gunakan `GetCommand` API untuk menentukan apakah perintah tidak digunakan lagi dan kapan terakhir kali tidak digunakan lagi.

```
aws iot get-command --command-id <turnOffAC>
```

Perintah ini menghasilkan respons yang berisi informasi perintah, termasuk cap waktu pembuatan dan penghentian dari bidang yang terakhir diperbarui. Ini membantu menentukan masa pakai perintah dan apakah akan menghapus atau menggunakannya kembali. Berikut ini menunjukkan respon sampel untuk `turnOffAc` perintah:

```
{
    "commandId": "turnOffAC",
    "commandArn": "arn:aws:iot:us-east-1:123456789012:command/turnOffAC",
    "namespace": "AWS-IoT",
    "payload": {
        "content": "testPayload.json",
        "contentType": "application/json"
    },
    "createdAt": "2024-03-23T00:50:10.095000-07:00",
    "lastUpdatedAt": "2024-05-09T23:16:51.370000-07:00",
    "deprecated": false
}
```

## Kembalikan sumber daya perintah
<a name="iot-remote-command-undeprecate"></a>

Untuk menggunakan atau mengirim `ACSwitch` perintah ke perangkat Anda, pulihkan terlebih dahulu.

Untuk memulihkan perintah dari konsol, buka [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) AWS IoT konsol, pilih perintah yang ingin Anda pulihkan, lalu di bawah **Tindakan**, pilih **Pulihkan**.

Untuk memulihkan perintah menggunakan AWS IoT Core API atau AWS CLI, gunakan operasi `UpdateCommand` API atau `update-command` CLI. Kode berikut menunjukkan contoh permintaan dan respon.

```
aws iot update-command \ 
    --command-id <command-id> 
    --no-deprecated
```

Kode berikut menunjukkan output sampel.

```
{
    "commandId": "ACSwitch",
    "deprecated": false,
    "lastUpdatedAt": "2024-05-09T23:17:21.954000-07:00"
}
```