

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

# Tutorial: Berinteraksi dengan Device Shadow menggunakan aplikasi sampel dan klien pengujian MQTT
<a name="interact-lights-device-shadows"></a>

Untuk berinteraksi dengan aplikasi `shadow.py` sampel, masukkan nilai di terminal untuk `desired` nilai tersebut. Misalnya, Anda dapat menentukan warna yang menyerupai lampu lalu lintas dan AWS IoT merespons permintaan dan memperbarui nilai yang dilaporkan.

**Dalam tutorial ini, Anda akan belajar cara:**
+ Gunakan aplikasi `shadow.py` sampel untuk menentukan status yang diinginkan dan memperbarui status bayangan saat ini.
+ Edit dokumen Shadow untuk mengamati peristiwa delta dan bagaimana aplikasi `shadow.py` sampel meresponsnya.
+ Gunakan klien pengujian MQTT untuk berlangganan topik bayangan dan mengamati pembaruan saat Anda menjalankan program sampel.

**Sebelum Anda menjalankan tutorial ini, Anda harus memiliki:**  
Siapkan Akun AWS, konfigurasikan perangkat Raspberry Pi Anda, dan buat AWS IoT sesuatu dan kebijakan. Anda juga harus menginstal perangkat lunak yang diperlukan, SDK Perangkat, file sertifikat, dan menjalankan program sampel di terminal. Untuk informasi lebih lanjut, lihat tutorial sebelumnya [Tutorial: Mempersiapkan Raspberry Pi Anda untuk menjalankan aplikasi bayangan](create-resources-shadow.md) dan[Langkah 1: Jalankan aplikasi sampel shadow.py](lightbulb-shadow-application.md#run-sample-application-shadows). Anda harus menyelesaikan tutorial ini jika Anda belum melakukannya.

**Topics**
+ [Langkah 1: Perbarui nilai yang diinginkan dan dilaporkan menggunakan aplikasi `shadow.py` sampel](#update-desired-shadow-sample)
+ [Langkah 2: Lihat pesan dari aplikasi `shadow.py` sampel di klien pengujian MQTT](#shadow-sample-view-msg)
+ [Langkah 3: Memecahkan masalah kesalahan dengan interaksi Device Shadow](#shadow-observe-messages-troubleshoot)
+ [Langkah 4: Tinjau hasil dan langkah selanjutnya](#sample-shadow-review)

Tutorial ini membutuhkan waktu sekitar 45 menit untuk menyelesaikannya.

## Langkah 1: Perbarui nilai yang diinginkan dan dilaporkan menggunakan aplikasi `shadow.py` sampel
<a name="update-desired-shadow-sample"></a>

Dalam tutorial sebelumnya[Langkah 1: Jalankan aplikasi sampel shadow.py](lightbulb-shadow-application.md#run-sample-application-shadows), Anda belajar cara mengamati pesan yang dipublikasikan ke dokumen Shadow di AWS IoT konsol saat Anda memasukkan nilai yang diinginkan seperti yang dijelaskan di bagian[Tutorial: Menginstal Device SDK dan menjalankan aplikasi sampel untuk Device Shadows](lightbulb-shadow-application.md).

Pada contoh sebelumnya, kami mengatur warna yang diinginkan ke`yellow`. Setelah Anda memasukkan setiap nilai, terminal meminta Anda untuk memasukkan `desired` nilai lain. Jika Anda memasukkan nilai (`yellow`) yang sama lagi, aplikasi akan mengenali ini dan meminta Anda untuk memasukkan nilai baru`desired`.

```
Enter desired value:
yellow
Local value is already 'yellow'.
Enter desired value:
```

Sekarang, katakan bahwa Anda memasukkan warna`green`. AWS IoT menanggapi permintaan dan memperbarui `reported` nilainya. `green` Ini adalah bagaimana pembaruan terjadi ketika `desired` status berbeda dari `reported` status, menyebabkan delta.

**Cara aplikasi `shadow.py` sampel mensimulasikan interaksi Device Shadow:**

1. Masukkan `desired` nilai (katakanlah`yellow`) di terminal untuk mempublikasikan status yang diinginkan.

1. Karena `desired` statusnya berbeda dari `reported` status (katakanlah warnanya`green`), delta terjadi, dan aplikasi yang berlangganan delta menerima pesan ini.

1. Aplikasi merespons pesan dan memperbarui statusnya ke `desired` nilainya,`yellow`.

1. Aplikasi kemudian menerbitkan pesan pembaruan dengan nilai status perangkat yang dilaporkan baru,`yellow`.

Berikut ini menunjukkan pesan yang ditampilkan di terminal yang menunjukkan bagaimana permintaan pembaruan diterbitkan.

```
Enter desired value:
green
Changed local shadow value to 'green'.
Updating reported shadow value to 'green'...
Update request published.
Finished updating reported shadow value to 'green'.
```

Di AWS IoT konsol, dokumen Shadow mencerminkan nilai yang diperbarui `green` untuk kedua `desired` bidang `reported` dan, dan nomor versi bertambah 1. Misalnya, jika nomor versi sebelumnya ditampilkan sebagai 10, nomor versi saat ini akan ditampilkan sebagai 11.

**catatan**  
Menghapus bayangan tidak mengatur ulang nomor versi ke 0. Anda akan melihat bahwa versi bayangan bertambah 1 saat Anda mempublikasikan permintaan pembaruan atau membuat bayangan lain dengan nama yang sama.

**Edit dokumen Shadow untuk mengamati peristiwa delta**  
Aplikasi `shadow.py` sampel juga berlangganan `delta` acara, dan merespons ketika ada perubahan pada `desired` nilai. Misalnya, Anda dapat mengubah `desired` nilai menjadi warna`red`. Untuk melakukan ini, di AWS IoT konsol, edit dokumen Shadow dengan mengklik **Edit** dan kemudian atur `desired` nilainya `red` di JSON, sambil mempertahankan `reported` nilainya. `green` Sebelum Anda menyimpan perubahan, biarkan terminal pada Raspberry Pi terbuka karena Anda akan melihat pesan ditampilkan di terminal ketika perubahan terjadi.

```
{
"desired": {
  "welcome": "aws-iot",
  "color": "red"
},
"reported": {
  "welcome": "aws-iot",
  "color": "green"
}
}
```

Setelah Anda menyimpan nilai baru, aplikasi `shadow.py` sampel merespons perubahan ini dan menampilkan pesan di terminal yang menunjukkan delta. Anda kemudian akan melihat pesan berikut muncul di bawah prompt untuk memasukkan `desired` nilai.

```
Enter desired value:
Received shadow delta event.
Delta reports that desired value is 'red'. Changing local value...
Changed local shadow value to 'red'.
Updating reported shadow value to 'red'...
Finished updating reported shadow value to 'red'.
Enter desired value:
Update request published.
Finished updating reported shadow value to 'red'.
```

## Langkah 2: Lihat pesan dari aplikasi `shadow.py` sampel di klien pengujian MQTT
<a name="shadow-sample-view-msg"></a>

Anda dapat menggunakan **klien pengujian MQTT** di **AWS IoT konsol** untuk memantau pesan MQTT yang diteruskan di konsol Anda. Akun AWS Dengan berlangganan topik MQTT cadangan yang digunakan oleh layanan Device Shadow, Anda dapat mengamati pesan yang diterima oleh topik saat menjalankan aplikasi sampel.

Jika Anda belum menggunakan klien pengujian MQTT, Anda dapat meninjau. [Lihat pesan MQTT dengan klien MQTT AWS IoT](view-mqtt-messages.md) Ini membantu Anda mempelajari cara menggunakan **klien pengujian MQTT** di **AWS IoT konsol** untuk melihat pesan MQTT saat mereka melewati broker pesan.

1. 

**Buka klien uji MQTT**

   Buka [klien pengujian MQTT di AWS IoT konsol di](https://console.aws.amazon.com//iot/home#/test) jendela baru sehingga Anda dapat mengamati pesan yang diterima oleh topik MQTT tanpa kehilangan konfigurasi klien pengujian MQTT Anda. Klien pengujian MQTT tidak menyimpan langganan atau log pesan apa pun jika Anda membiarkannya masuk ke halaman lain di konsol. Untuk bagian tutorial ini, Anda dapat memiliki dokumen Shadow dari AWS IoT barang Anda dan klien pengujian MQTT terbuka di jendela terpisah untuk lebih mudah mengamati interaksi dengan Device Shadows.

1. 

**Berlangganan topik Shadow yang dipesan MQTT**

   Anda dapat menggunakan klien pengujian MQTT untuk memasukkan nama topik yang dicadangkan MQTT Device Shadow dan berlangganan untuk menerima pembaruan saat menjalankan aplikasi sampel. `shadow.py` Untuk berlangganan topik:

   1. Di **klien pengujian MQTT** di **AWS IoT konsol**, pilih **Berlangganan topik**.

   1.  Di bagian **filter Topik**, masukkan: **\$1aws/things/ /shadow/update/ \$1 *thingname***. Di sini, `thingname` adalah nama sumber daya benda yang Anda buat sebelumnya (misalnya,`My_light_bulb`).

   1. Simpan nilai default untuk pengaturan konfigurasi tambahan, lalu pilih **Berlangganan**.

   Dengan menggunakan wildcard **\$1** dalam langganan topik, Anda dapat berlangganan beberapa topik MQTT secara bersamaan dan mengamati semua pesan yang dipertukarkan antara perangkat dan Bayangannya dalam satu jendela. Untuk informasi selengkapnya tentang karakter wildcard dan penggunaannya, lihat[Topik MQTT](topics.md).

1. 

**Jalankan program `shadow.py` sampel dan amati pesan**

   **Di jendela baris perintah Raspberry Pi Anda, jika Anda telah memutus program, jalankan aplikasi sampel lagi dan tonton pesan di **klien pengujian MQTT** di konsol.AWS IoT **

   1. Jalankan perintah berikut untuk memulai ulang program sampel. Ganti *your-iot-thing-name* dan *your-iot-endpoint* dengan nama AWS IoT benda yang Anda buat sebelumnya (misalnya,`My_light_bulb`), dan titik akhir untuk berinteraksi dengan perangkat. 

      ```
      cd ~/aws-iot-device-sdk-python-v2/samples/service-clients
      python3 shadow.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint --thing_name your-iot-thing-name
      ```

      Aplikasi `shadow.py` sampel kemudian berjalan dan mengambil status bayangan saat ini. Jika Anda telah menghapus bayangan atau menghapus status saat ini, program menetapkan nilai saat ini `off` dan kemudian meminta Anda untuk memasukkan nilai. `desired`

      ```
      Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'...
      Connected!
      Subscribing to Delta events...
      Subscribing to Update responses...
      Subscribing to Get responses...
      Requesting current shadow state...
      Launching thread to read user input...
      Finished getting initial shadow state.
      Shadow document lacks 'color' property. Setting defaults...
      Changed local shadow value to 'off'.
      Updating reported shadow value to 'off'...
      Update request published.
      Finished updating reported shadow value to 'off'...
      Enter desired value:
      ```

      Di sisi lain, jika program berjalan dan Anda memulai ulang, Anda akan melihat nilai warna terbaru yang dilaporkan di terminal. **Di klien pengujian MQTT, Anda akan melihat pembaruan ke topik **\$1aws/things/ /shadow/get dan *thingname* \$1aws/things/**/. *thingname* shadow/get/accepted**

      Misalkan warna terbaru yang dilaporkan adalah`green`. Berikut ini menunjukkan isi dari ***thingname*\$1aws/things/** JSON file. shadow/get/accepted

      ```
      {
      "state": {
        "desired": {
          "welcome": "aws-iot",
          "color": "green"
        },
        "reported": {
          "welcome": "aws-iot",
          "color": "green"
        }
      },
      "metadata": {
        "desired": {
          "welcome": {
            "timestamp": 1620156892
          },
          "color": {
            "timestamp": 1620161643
          }
        },
        "reported": {
          "welcome": {
            "timestamp": 1620156892
          },
          "color": {
            "timestamp": 1620161643
          }
        }
      },
      "version": 10,
      "timestamp": 1620173908
      }
      ```

   1. Masukkan `desired` nilai di terminal, seperti`yellow`. Aplikasi `shadow.py` sampel merespons dan menampilkan pesan berikut di terminal yang menunjukkan perubahan `reported` nilai ke`yellow`.

      ```
      Enter desired value:
      yellow
      Changed local shadow value to 'yellow'.
      Updating reported shadow value to 'yellow'...
      Update request published.
      Finished updating reported shadow value to 'yellow'.
      ```

      Di **klien pengujian MQTT** di **AWS IoT konsol**, di bawah **Langganan**, Anda melihat bahwa topik berikut menerima pesan:
      + **\$1aws/things/ *thingname* /shadow/update**: menunjukkan bahwa keduanya dan nilai berubah menjadi warna. `desired` `updated` `yellow`
      + **\$1aws/things/*thingname*/shadow/update/accepted**: menunjukkan nilai saat ini dari `reported` status `desired` dan metadata dan informasi versinya.
      + **\$1aws/things/*thingname*/shadow/update/documents**: menunjukkan nilai sebelumnya dan saat ini dari `reported` status dan metadata `desired` dan informasi versinya.

      Karena dokumen **\$1aws/things/*thingname*/shadow/update/documents**juga berisi informasi yang terkandung dalam dua topik lainnya, kita dapat memeriksanya untuk melihat informasi negara. Status sebelumnya menunjukkan nilai yang dilaporkan disetel ke`green`, metadata dan informasi versinya, dan status saat ini yang menunjukkan nilai yang dilaporkan diperbarui ke. `yellow`

      ```
      {
      "previous": {
        "state": {
          "desired": {
            "welcome": "aws-iot",
            "color": "green"
          },
          "reported": {
            "welcome": "aws-iot",
            "color": "green"
          }
        },
        "metadata": {
          "desired": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297898
            }
          },
          "reported": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297898
            }
          }
        },
        "version": 10
      },
      "current": {
        "state": {
          "desired": {
            "welcome": "aws-iot",
            "color": "yellow"
          },
          "reported": {
            "welcome": "aws-iot",
            "color": "yellow"
          }
        },
        "metadata": {
          "desired": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297904
            }
          },
          "reported": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297904
            }
          }
        },
        "version": 11
      },
      "timestamp": 1617297904
      }
      ```

   1. Sekarang, jika Anda memasukkan `desired` nilai lain, Anda melihat perubahan lebih lanjut pada `reported` nilai dan pembaruan pesan yang diterima oleh topik ini. Nomor versi juga bertambah 1. Misalnya, jika Anda memasukkan nilai`green`, status sebelumnya melaporkan nilai `yellow` dan status saat ini melaporkan nilainya`green`.

1. 

**Edit dokumen Shadow untuk mengamati peristiwa delta**

   Untuk mengamati perubahan pada topik delta, edit dokumen Shadow di AWS IoT konsol. Misalnya, Anda dapat mengubah `desired` nilai menjadi warna`red`. Untuk melakukan ini, di AWS IoT konsol, pilih **Edit** dan kemudian atur `desired` nilainya menjadi merah di JSON, sambil menjaga `reported` nilai disetel ke`green`. Sebelum Anda menyimpan perubahan, biarkan terminal tetap terbuka karena Anda akan melihat pesan delta yang dilaporkan di terminal.

   ```
   {
   "desired": {
     "welcome": "aws-iot",
     "color": "red"
   },
   "reported": {
     "welcome": "aws-iot",
     "color": "green"
   }
   }
   ```

   Aplikasi `shadow.py` sampel merespons perubahan ini dan menampilkan pesan di terminal yang menunjukkan delta. Di klien pengujian MQTT, `update` topik akan menerima pesan yang menunjukkan perubahan pada dan nilai. `desired` `reported`

   Anda juga melihat bahwa topik ***thingname*\$1aws/things/**/menerima pesan. shadow/update/delta Untuk melihat pesan, pilih topik ini, yang tercantum di bawah **Langganan**.

   ```
   {
   "version": 13,
   "timestamp": 1617318480,
   "state": {
     "color": "red"
   },
   "metadata": {
     "color": {
       "timestamp": 1617318480
     }
   }
   }
   ```

## Langkah 3: Memecahkan masalah kesalahan dengan interaksi Device Shadow
<a name="shadow-observe-messages-troubleshoot"></a>

Saat menjalankan aplikasi sampel Shadow, Anda mungkin mengalami masalah saat mengamati interaksi dengan layanan Device Shadow. 

Jika program berjalan dengan sukses dan meminta Anda untuk memasukkan `desired` nilai, Anda harus dapat mengamati interaksi Device Shadow dengan menggunakan dokumen Shadow dan klien pengujian MQTT seperti yang dijelaskan sebelumnya. Namun, jika Anda tidak dapat melihat interaksinya, berikut adalah beberapa hal yang dapat Anda periksa:
+ 

**Periksa nama benda dan bayangannya di AWS IoT konsol**  
Jika Anda tidak melihat pesan di dokumen Shadow, tinjau perintahnya dan pastikan itu cocok dengan nama benda di **AWS IoT konsol**. Anda juga dapat memeriksa apakah Anda memiliki bayangan klasik dengan memilih sumber daya barang Anda dan kemudian memilih **Shadows**. Tutorial ini berfokus terutama pada interaksi dengan bayangan klasik.

   Anda juga dapat mengonfirmasi bahwa perangkat yang Anda gunakan terhubung ke internet. Di **AWS IoT konsol**, pilih hal yang Anda buat sebelumnya, lalu pilih **Interact**. Pada halaman detail hal, Anda akan melihat pesan di sini yang mengatakan: `This thing already appears to be connected.` 
+ 

**Periksa topik cadangan MQTT yang Anda langgani**  
Jika Anda tidak melihat pesan muncul di klien pengujian MQTT, periksa apakah topik yang Anda berlangganan diformat dengan benar. Topik Device Shadow MQTT memiliki format **\$1aws/things/ *thingname* /shadow/** dan mungkin memiliki `update``get`, atau `delete` mengikutinya tergantung pada tindakan yang ingin Anda lakukan pada bayangan. **Tutorial ini menggunakan topik **\$1aws/things/ *thingname* /shadow/ \$1** jadi pastikan Anda memasukkannya dengan benar saat berlangganan topik di bagian filter Topik klien pengujian.**

  Saat Anda memasukkan nama topik, pastikan bahwa *thingname* itu sama dengan nama AWS IoT benda yang Anda buat sebelumnya. Anda juga dapat berlangganan topik MQTT tambahan untuk melihat apakah pembaruan telah berhasil dilakukan. Misalnya, Anda dapat berlangganan topik **\$1aws/things/*thingname*/shadow/update/rejected**untuk menerima pesan setiap kali permintaan pembaruan gagal sehingga Anda dapat men-debug masalah koneksi. Untuk informasi lebih lanjut tentang topik yang dipesan, lihat [Topik bayangan](reserved-topics.md#reserved-topics-shadow) dan[Topik MQTT Bayangan Perangkat](device-shadow-mqtt.md).

## Langkah 4: Tinjau hasil dan langkah selanjutnya
<a name="sample-shadow-review"></a>

**Dalam tutorial ini, Anda belajar cara:**
+ Gunakan aplikasi `shadow.py` sampel untuk menentukan status yang diinginkan dan memperbarui status bayangan saat ini.
+ Edit dokumen Shadow untuk mengamati peristiwa delta dan bagaimana aplikasi `shadow.py` sampel meresponsnya.
+ Gunakan klien pengujian MQTT untuk berlangganan topik bayangan dan mengamati pembaruan saat Anda menjalankan program sampel.

**Langkah selanjutnya**  
Anda dapat berlangganan topik cadangan MQTT tambahan untuk mengamati pembaruan aplikasi bayangan. Misalnya, jika Anda hanya berlangganan topik **\$1aws/things/*thingname*/shadow/update/accepted**, Anda hanya akan melihat informasi status saat ini ketika pembaruan berhasil dilakukan.

Anda juga dapat berlangganan topik bayangan tambahan untuk men-debug masalah atau mempelajari lebih lanjut tentang interaksi Device Shadow dan juga men-debug masalah apa pun dengan interaksi Device Shadow. Untuk informasi selengkapnya, lihat [Topik bayangan](reserved-topics.md#reserved-topics-shadow) dan [Topik MQTT Bayangan Perangkat](device-shadow-mqtt.md).

Anda juga dapat memilih untuk memperluas aplikasi Anda dengan menggunakan bayangan bernama atau dengan menggunakan perangkat keras tambahan yang terhubung dengan Raspberry Pi untuk LEDs dan mengamati perubahan status mereka menggunakan pesan yang dikirim dari terminal.

Untuk informasi selengkapnya tentang layanan Device Shadow dan menggunakan layanan di perangkat, aplikasi, dan layanan[AWS IoT Layanan Device Shadow](iot-device-shadows.md), lihat[Menggunakan bayangan di perangkat](device-shadow-comms-device.md), dan[Menggunakan bayangan di aplikasi dan layanan](device-shadow-comms-app.md).