

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

# Simulasi komunikasi layanan Device Shadow
<a name="using-device-shadows"></a>

Topik ini menunjukkan bagaimana layanan Device Shadow bertindak sebagai perantara dan memungkinkan perangkat dan aplikasi menggunakan bayangan untuk memperbarui, menyimpan, dan mengambil status perangkat.

Untuk mendemonstrasikan interaksi yang dijelaskan dalam topik ini, dan untuk menjelajahinya lebih lanjut, Anda memerlukan Akun AWS dan sistem tempat Anda dapat menjalankannya AWS CLI. Jika Anda tidak memilikinya, Anda masih dapat melihat interaksi dalam contoh kode.

Dalam contoh ini, AWS IoT konsol mewakili perangkat. AWS CLI Ini mewakili aplikasi atau layanan yang mengakses perangkat melalui bayangan. AWS CLI Antarmukanya sangat mirip dengan API yang mungkin digunakan aplikasi untuk berkomunikasi AWS IoT. Perangkat dalam contoh ini adalah bola lampu pintar dan aplikasi menampilkan status bola lampu dan dapat mengubah status bola lampu.

## Menyiapkan simulasi
<a name="using-device-shadows-setup"></a>

Prosedur ini menginisialisasi simulasi dengan membuka [AWS IoT konsol](https://console.aws.amazon.com/iot/home), yang mensimulasikan perangkat Anda, dan jendela baris perintah yang mensimulasikan aplikasi Anda.

**Untuk mengatur lingkungan simulasi Anda**

1. Anda akan perlu Akun AWS untuk menjalankan contoh dari topik ini sendiri. Jika Anda tidak memiliki Akun AWS, buat satu, seperti yang dijelaskan dalam[Mengatur Akun AWS](setting-up.md).

1. Buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home), dan di menu sebelah kiri, pilih **Uji** untuk membuka klien **MQTT**.

1. Di jendela lain, buka jendela terminal pada sistem yang telah AWS CLI diinstal di atasnya.

Anda harus membuka dua jendela: satu dengan AWS IoT konsol di halaman **Uji**, dan satu dengan prompt baris perintah.

## Inisialisasi perangkat
<a name="using-device-shadows-init-device"></a>

Dalam simulasi ini, kita akan bekerja dengan benda bernama objek,, dan bayangannya bernama *mySimulatedThing*, *SimShadow1*. 

**Buat objek benda dan kebijakan IoT-nya**  
Untuk membuat objek benda, di **AWS IoT Konsol**:

1. Pilih **Kelola** dan kemudian pilih **Things**. 

1. Klik tombol **Create** jika hal-hal tercantum jika tidak, klik **Daftarkan satu hal** untuk membuat satu AWS IoT hal. 

1. Masukkan nama`mySimulatedThing`, biarkan pengaturan lain menjadi default, lalu klik **Berikutnya**.

1. Gunakan pembuatan sertifikat sekali klik untuk menghasilkan sertifikat yang akan mengautentikasi koneksi perangkat. AWS IoT Klik **Aktifkan** untuk mengaktifkan sertifikat.

1. Anda dapat melampirkan kebijakan `My_IoT_Policy` yang akan memberikan izin perangkat untuk mempublikasikan dan berlangganan topik yang dicadangkan MQTT. Untuk langkah-langkah lebih rinci tentang cara membuat AWS IoT sesuatu dan cara membuat kebijakan ini, lihat[Buat objek benda](create-iot-resources.md#create-aws-thing).

**Buat bayangan bernama untuk objek benda**  
Anda dapat membuat bayangan bernama untuk sesuatu dengan menerbitkan permintaan pembaruan ke topik `$aws/things/mySimulatedThing/shadow/name/simShadow1/update` seperti yang dijelaskan di bawah ini.

Atau, untuk membuat bayangan bernama:

1. Di **AWS IoT Console**, pilih objek benda Anda dalam daftar hal-hal yang ditampilkan dan kemudian pilih **Shadows**.

1. Pilih **Tambahkan bayangan**, masukkan nama`simShadow1`, lalu pilih **Buat** untuk menambahkan bayangan bernama.

**Berlangganan dan publikasikan ke topik MQTT yang dipesan**  
Di konsol, berlangganan topik bayangan MQTT yang dipesan. Topik-topik ini adalah tanggapan terhadap `get``update`,, dan `delete` tindakan sehingga perangkat Anda akan siap menerima tanggapan setelah menerbitkan tindakan. 

****Untuk berlangganan topik MQTT di klien MQTT****

1. Di **klien MQTT**, pilih **Berlangganan topik**.

1. Masukkan`get`,`update`, dan `delete` topik untuk berlangganan. Salin satu topik pada satu waktu dari daftar berikut, tempelkan di bidang **Filter topik**, lalu klik **Berlangganan**. Anda akan melihat topik muncul di bawah **Langganan**.
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/delete/accepted`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/delete/rejected`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/documents`

   Pada titik ini, perangkat simulasi Anda siap menerima topik saat dipublikasikan oleh AWS IoT.

****Untuk mempublikasikan ke topik MQTT di klien MQTT****  
Setelah perangkat menginisialisasi dirinya sendiri dan berlangganan topik respons, perangkat harus meminta bayangan yang didukungnya. Simulasi ini hanya mendukung satu bayangan, bayangan yang mendukung objek benda bernama, bernama *mySimulatedThing*, *SimShadow1*.

**Untuk mendapatkan status bayangan saat ini dari klien **MQTT****

1. Di **klien MQTT**, pilih **Publikasikan ke topik**.

1. Di bawah **Publikasikan**, masukkan topik berikut dan hapus konten apa pun dari jendela isi pesan di bawah tempat Anda memasukkan topik yang akan didapatkan. Anda kemudian dapat memilih **Publikasikan ke topik** untuk mempublikasikan permintaan. `$aws/things/mySimulatedThing/shadow/name/simShadow1/get`.

   Jika Anda belum membuat bayangan bernama`simShadow1`, Anda menerima pesan dalam `$aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected` topik dan `code` adalah`404`, seperti dalam contoh ini sebagai bayangan belum dibuat, jadi kita akan membuatnya berikutnya.

   ```
   {
     "code": 404,
     "message": "No shadow exists with name: 'simShadow1'"
   }
   ```

**Untuk membuat bayangan dengan status perangkat saat ini**

1. Di **klien MQTT**, pilih **Publikasikan ke topik dan masukkan topik ini**:

   ```
   $aws/things/mySimulatedThing/shadow/name/simShadow1/update
   ```

1. Di jendela isi pesan di bawah tempat Anda memasukkan topik, masukkan dokumen bayangan ini untuk menunjukkan perangkat melaporkan ID dan warnanya saat ini dalam nilai RGB. Pilih **Publikasikan** untuk mempublikasikan permintaan.

   ```
   {
     "state": {
       "reported": {
         "ID": "SmartLamp21",
         "ColorRGB": [
           128,
           128,
           128
         ]
       }
     },
     "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6"
   }
   ```

Jika Anda menerima pesan dalam topik: 
+ `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted`: Ini berarti bayangan telah dibuat dan badan pesan berisi dokumen bayangan saat ini.
+ `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected`: Tinjau kesalahan di badan pesan.
+ `$aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted`: Bayangan sudah ada dan badan pesan memiliki status bayangan saat ini, seperti dalam contoh ini. Dengan ini, Anda dapat mengatur perangkat Anda atau mengonfirmasi bahwa itu cocok dengan status bayangan.

  ```
  {
    "state": {
      "reported": {
        "ID": "SmartLamp21",
        "ColorRGB": [
          128,
          128,
          128
        ]
      }
    },
    "metadata": {
      "reported": {
        "ID": {
          "timestamp": 1591140517
        },
        "ColorRGB": [
          {
            "timestamp": 1591140517
          },
          {
            "timestamp": 1591140517
          },
          {
            "timestamp": 1591140517
          }
        ]
      }
    },
    "version": 3,
    "timestamp": 1591140517,
    "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6"
  }
  ```

## Kirim pembaruan dari aplikasi
<a name="using-device-shadows-app-update"></a>

Bagian ini menggunakan AWS CLI untuk menunjukkan bagaimana aplikasi dapat berinteraksi dengan bayangan.

**Untuk mendapatkan status bayangan saat ini menggunakan AWS CLI**  
Dari baris perintah, masukkan perintah ini.

```
aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout
```

Pada platform Windows, Anda dapat menggunakan `con` sebagai pengganti`/dev/stdout`.

```
aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
```

Karena bayangan ada dan telah diinisialisasi oleh perangkat untuk mencerminkan keadaan saat ini, itu harus mengembalikan dokumen bayangan berikut.

```
{
  "state": {
    "reported": {
      "ID": "SmartLamp21",
      "ColorRGB": [
        128,
        128,
        128
      ]
    }
  },
  "metadata": {
    "reported": {
      "ID": {
        "timestamp": 1591140517
      },
      "ColorRGB": [
        {
          "timestamp": 1591140517
        },
        {
          "timestamp": 1591140517
        },
        {
          "timestamp": 1591140517
        }
      ]
    }
  },
  "version": 3,
  "timestamp": 1591141111
}
```

Aplikasi dapat menggunakan respons ini untuk menginisialisasi representasi status perangkat.

Jika aplikasi memperbarui status, seperti ketika pengguna akhir mengubah warna bola lampu pintar kami menjadi kuning, aplikasi akan mengirim **update-thing-shadow** perintah. Perintah ini sesuai dengan `UpdateThingShadow` REST API.

**Untuk memperbarui bayangan dari aplikasi**  
Dari baris perintah, masukkan perintah ini.

------
#### [ AWS CLI v2.x ]

```
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \
    --cli-binary-format raw-in-base64-out \
    --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout
```

------
#### [ AWS CLI v1.x ]

```
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \
    --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout
```

------

Jika berhasil, perintah ini harus mengembalikan dokumen bayangan berikut.

```
{
  "state": {
    "desired": {
      "ColorRGB": [
        255,
        255,
        0
      ]
    }
  },
  "metadata": {
    "desired": {
      "ColorRGB": [
        {
          "timestamp": 1591141596
        },
        {
          "timestamp": 1591141596
        },
        {
          "timestamp": 1591141596
        }
      ]
    }
  },
  "version": 4,
  "timestamp": 1591141596,
  "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab"
}
```

## Menanggapi pembaruan di perangkat
<a name="using-device-shadows-device-update"></a>

Kembali ke **klien MQTT** di AWS konsol, Anda akan melihat pesan yang AWS IoT diterbitkan untuk mencerminkan perintah pembaruan yang dikeluarkan di bagian sebelumnya.

**Untuk melihat pesan pembaruan di klien **MQTT****  
**Di **klien MQTT**, pilih **\$1 aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta** di kolom Langganan.** Jika nama topik terpotong, Anda dapat menjeda untuk melihat topik lengkapnya. Dalam log topik topik ini, Anda akan melihat `/delta` pesan yang mirip dengan yang ini.

```
{
  "version": 4,
  "timestamp": 1591141596,
  "state": {
    "ColorRGB": [
      255,
      255,
      0
    ]
  },
  "metadata": {
    "ColorRGB": [
      {
        "timestamp": 1591141596
      },
      {
        "timestamp": 1591141596
      },
      {
        "timestamp": 1591141596
      }
    ]
  },
  "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab"
}
```

Perangkat Anda akan memproses konten pesan ini untuk menyetel status perangkat agar sesuai dengan `desired` status dalam pesan.

Setelah perangkat memperbarui status agar sesuai dengan `desired` status dalam pesan, perangkat harus mengirim status baru yang dilaporkan kembali AWS IoT dengan menerbitkan pesan pembaruan. Prosedur ini mensimulasikan ini di klien **MQTT**.

**Untuk memperbarui bayangan dari perangkat**

1. Di **klien MQTT**, pilih **Publikasikan ke topik**.

1. Di jendela isi pesan, di bidang topik di atas jendela isi pesan, masukkan topik bayangan diikuti dengan `/update` tindakan: `$aws/things/mySimulatedThing/shadow/name/simShadow1/update` dan di badan pesan, masukkan dokumen bayangan yang diperbarui ini, yang menjelaskan keadaan perangkat saat ini. Klik **Publikasikan** untuk mempublikasikan status perangkat yang diperbarui.

   ```
   {
     "state": {
       "reported": {
         "ColorRGB": [255,255,0]
         }
     },
     "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258"
   }
   ```

   Jika pesan berhasil diterima oleh AWS IoT, Anda akan melihat respons baru di log aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted pesan **\$1** di **klien MQTT** dengan status bayangan saat ini, seperti contoh ini.

   ```
   {
     "state": {
       "reported": {
         "ColorRGB": [
           255,
           255,
           0
         ]
       }
     },
     "metadata": {
       "reported": {
         "ColorRGB": [
           {
             "timestamp": 1591142747
           },
           {
             "timestamp": 1591142747
           },
           {
             "timestamp": 1591142747
           }
         ]
       }
     },
     "version": 5,
     "timestamp": 1591142747,
     "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258"
   }
   ```

Pembaruan yang berhasil ke status perangkat yang dilaporkan juga AWS IoT menyebabkan pengiriman deskripsi komprehensif tentang status bayangan dalam pesan ke `update/documents` topik, seperti badan pesan ini yang dihasilkan dari pembaruan bayangan yang dilakukan oleh perangkat dalam prosedur sebelumnya.

```
{
  "previous": {
    "state": {
      "desired": {
        "ColorRGB": [
          255,
          255,
          0
        ]
      },
      "reported": {
        "ID": "SmartLamp21",
        "ColorRGB": [
          128,
          128,
          128
        ]
      }
    },
    "metadata": {
      "desired": {
        "ColorRGB": [
          {
            "timestamp": 1591141596
          },
          {
            "timestamp": 1591141596
          },
          {
            "timestamp": 1591141596
          }
        ]
      },
      "reported": {
        "ID": {
          "timestamp": 1591140517
        },
        "ColorRGB": [
          {
            "timestamp": 1591140517
          },
          {
            "timestamp": 1591140517
          },
          {
            "timestamp": 1591140517
          }
        ]
      }
    },
    "version": 4
  },
  "current": {
    "state": {
      "desired": {
        "ColorRGB": [
          255,
          255,
          0
        ]
      },
      "reported": {
        "ID": "SmartLamp21",
        "ColorRGB": [
          255,
          255,
          0
        ]
      }
    },
    "metadata": {
      "desired": {
        "ColorRGB": [
          {
            "timestamp": 1591141596
          },
          {
            "timestamp": 1591141596
          },
          {
            "timestamp": 1591141596
          }
        ]
      },
      "reported": {
        "ID": {
          "timestamp": 1591140517
        },
        "ColorRGB": [
          {
            "timestamp": 1591142747
          },
          {
            "timestamp": 1591142747
          },
          {
            "timestamp": 1591142747
          }
        ]
      }
    },
    "version": 5
  },
  "timestamp": 1591142747,
  "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258"
}
```

## Amati pembaruan di aplikasi
<a name="using-device-shadows-view-result"></a>

Aplikasi sekarang dapat menanyakan bayangan untuk status saat ini seperti yang dilaporkan oleh perangkat.

**Untuk mendapatkan status bayangan saat ini menggunakan AWS CLI**

1. Dari baris perintah, masukkan perintah ini.

   ```
   aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout
   ```

   Pada platform Windows, Anda dapat menggunakan `con` sebagai pengganti`/dev/stdout`.

   ```
   aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
   ```

1. Karena bayangan baru saja diperbarui oleh perangkat untuk mencerminkan keadaan saat ini, itu harus mengembalikan dokumen bayangan berikut.

   ```
   {
     "state": {
       "desired": {
         "ColorRGB": [
           255,
           255,
           0
         ]
       },
       "reported": {
         "ID": "SmartLamp21",
         "ColorRGB": [
           255,
           255,
           0
         ]
       }
     },
     "metadata": {
       "desired": {
         "ColorRGB": [
           {
             "timestamp": 1591141596
           },
           {
             "timestamp": 1591141596
           },
           {
             "timestamp": 1591141596
           }
         ]
       },
       "reported": {
         "ID": {
           "timestamp": 1591140517
         },
         "ColorRGB": [
           {
             "timestamp": 1591142747
           },
           {
             "timestamp": 1591142747
           },
           {
             "timestamp": 1591142747
           }
         ]
       }
     },
     "version": 5,
     "timestamp": 1591143269
   }
   ```

## Melampaui simulasi
<a name="using-device-shadows-next-steps"></a>

Bereksperimenlah dengan interaksi antara AWS CLI (mewakili aplikasi) dan konsol (mewakili perangkat) untuk memodelkan solusi IoT Anda.