

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

# Tutorial: Menunjukkan komunikasi pesan MQTT dengan Device Client AWS IoT
<a name="iot-dc-testconn"></a>

Tutorial ini menunjukkan bagaimana Klien AWS IoT Perangkat dapat berlangganan dan menerbitkan pesan MQTT, yang biasanya digunakan dalam solusi IoT.

**Untuk memulai tutorial ini:**
+ Minta komputer host lokal Anda dan Raspberry Pi dikonfigurasi seperti yang digunakan [di bagian sebelumnya](iot-dc-install-dc.md).

  Jika Anda menyimpan gambar kartu microSD setelah menginstal AWS IoT Device Client, Anda dapat menggunakan kartu microSD dengan gambar itu dengan Raspberry Pi Anda.
+ Jika Anda telah menjalankan demo ini sebelumnya, tinjau [Langkah 2: Membersihkan demo Akun AWS setelah membangun Anda dengan AWS IoT Device Client](iot-dc-cleanup.md#iot-dc-cleanup-cloud) untuk menghapus semua AWS IoT sumber daya yang Anda buat di proses sebelumnya untuk menghindari kesalahan sumber daya duplikat.

Tutorial ini membutuhkan waktu sekitar 45 menit untuk menyelesaikannya.

**Setelah Anda selesai dengan topik ini:**
+ Anda akan menunjukkan berbagai cara agar perangkat IoT Anda dapat berlangganan pesan MQTT AWS IoT dan memublikasikan pesan MQTT. AWS IoT

**Peralatan yang dibutuhkan:**
+ Lingkungan pengembangan dan pengujian lokal Anda [dari bagian sebelumnya](iot-dc-install-dc.md)
+ Raspberry Pi yang Anda gunakan [di bagian sebelumnya](iot-dc-install-dc.md)
+ Kartu memori microSD dari Raspberry Pi yang Anda gunakan di [bagian sebelumnya](iot-dc-install-dc.md)

**Topics**
+ [Siapkan Raspberry Pi untuk mendemonstrasikan komunikasi pesan MQTT](iot-dc-testconn-provision.md)
+ [Menunjukkan pesan penerbitan dengan Klien AWS IoT Perangkat](iot-dc-testconn-publish.md)
+ [Menunjukkan berlangganan pesan dengan Klien AWS IoT Perangkat](iot-dc-testconn-subscribe.md)

# Siapkan Raspberry Pi untuk mendemonstrasikan komunikasi pesan MQTT
<a name="iot-dc-testconn-provision"></a>

Prosedur ini menciptakan sumber daya di dalam AWS IoT dan di Raspberry Pi untuk menunjukkan komunikasi pesan MQTT menggunakan Device Client. AWS IoT 

**Topics**
+ [Buat file sertifikat untuk menunjukkan komunikasi MQTT](#iot-dc-testconn-provision-certs)
+ [Menyediakan perangkat Anda untuk mendemonstrasikan komunikasi MQTT](#iot-dc-testconn-provision-aws)
+ [Konfigurasikan file konfigurasi AWS IoT Device Client dan klien pengujian MQTT untuk mendemonstrasikan komunikasi MQTT](#iot-dc-testconn-provision-dc-config)

## Buat file sertifikat untuk menunjukkan komunikasi MQTT
<a name="iot-dc-testconn-provision-certs"></a>

Prosedur ini membuat file sertifikat perangkat untuk demo ini.

**Untuk membuat dan mengunduh file sertifikat perangkat untuk Raspberry Pi Anda**



1. Di jendela terminal di komputer host lokal Anda, masukkan perintah berikut untuk membuat file sertifikat perangkat untuk perangkat Anda.

   ```
   mkdir ~/certs/pubsub
   aws iot create-keys-and-certificate \
   --set-as-active \
   --certificate-pem-outfile "~/certs/pubsub/device.pem.crt" \
   --public-key-outfile "~/certs/pubsub/public.pem.key" \
   --private-key-outfile "~/certs/pubsub/private.pem.key"
   ```

   Perintah mengembalikan respon seperti berikut ini. Simpan `certificateArn` nilai untuk digunakan nanti.

   ```
   {
   "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
   "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
   }
   }
   ```

1. Masukkan perintah berikut untuk mengatur izin pada direktori sertifikat dan file-file-nya.

   ```
   chmod 700 ~/certs/pubsub
   chmod 644 ~/certs/pubsub/*
   chmod 600 ~/certs/pubsub/private.pem.key
   ```

1. Jalankan perintah ini untuk meninjau izin pada direktori dan file sertifikat Anda.

   ```
   ls -l ~/certs/pubsub
   ```

   Output dari perintah harus sama dengan apa yang Anda lihat di sini, kecuali tanggal dan waktu file akan berbeda.

   ```
   -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt
   -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key
   -rw-r--r-- 1 pi pi  451 Oct 28 13:02 public.pem.key
   ```

1. Masukkan perintah ini untuk membuat direktori untuk file log.

   ```
   mkdir ~/.aws-iot-device-client
   mkdir ~/.aws-iot-device-client/log
   chmod 745 ~/.aws-iot-device-client/log
   echo " " > ~/.aws-iot-device-client/log/aws-iot-device-client.log
   echo " " > ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   chmod 600 ~/.aws-iot-device-client/log/*
   ```

## Menyediakan perangkat Anda untuk mendemonstrasikan komunikasi MQTT
<a name="iot-dc-testconn-provision-aws"></a>

Bagian ini membuat AWS IoT sumber daya yang menyediakan Raspberry Pi Anda AWS IoT. 

**Untuk menyediakan perangkat Anda di AWS IoT:**

1. Di jendela terminal di komputer host lokal Anda, masukkan perintah berikut untuk mendapatkan alamat titik akhir data perangkat untuk Anda Akun AWS.

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

   Nilai endpoint tidak berubah sejak saat Anda menjalankan perintah ini untuk tutorial sebelumnya. Menjalankan perintah lagi di sini dilakukan untuk memudahkan menemukan dan menempelkan nilai endpoint data ke dalam file konfigurasi yang digunakan dalam tutorial ini.

   Perintah dari langkah sebelumnya mengembalikan respons seperti berikut ini. Catat `endpointAddress` nilai untuk digunakan nanti.

   ```
   {
   "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Masukkan perintah ini untuk membuat sumber daya AWS IoT hal baru untuk Raspberry Pi Anda.

   ```
   aws iot create-thing --thing-name "PubSubTestThing"
   ```

   Karena sumber daya AWS IoT benda adalah representasi *virtual* perangkat Anda di cloud, kami dapat membuat beberapa sumber daya AWS IoT untuk digunakan untuk tujuan yang berbeda. Mereka semua dapat digunakan oleh perangkat IoT fisik yang sama untuk mewakili berbagai aspek perangkat.

   Tutorial ini hanya akan menggunakan sumber daya satu hal pada satu waktu untuk mewakili Raspberry Pi. Dengan cara ini, dalam tutorial ini, mereka mewakili demo yang berbeda sehingga setelah Anda membuat AWS IoT sumber daya untuk demo, Anda dapat kembali dan mengulangi demo menggunakan sumber daya yang Anda buat khusus untuk masing-masing.

   Jika AWS IoT sumber daya Anda dibuat, perintah mengembalikan respons seperti ini.

   ```
   {
   "thingName": "PubSubTestThing",
   "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/PubSubTestThing",
   "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
   }
   ```

1. Di jendela terminal:

   1. Buka editor teks, seperti`nano`.

   1. Salin dokumen JSON ini dan tempelkan ke editor teks terbuka Anda.  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Connect"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:client/PubSubTestThing"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic"
                  ]
              }
          ]
      }
      ```

   1. Di editor, di setiap `Resource` bagian dokumen kebijakan, ganti *us-west-2:57EXAMPLE833* dengan Anda Wilayah AWS, karakter titik dua (:), dan Akun AWS nomor 12 digit Anda.

   1. Simpan file di editor teks Anda sebagai**\$1/policies/pubsub\$1test\$1thing\$1policy.json**. 

1. Jalankan perintah ini untuk menggunakan dokumen kebijakan dari langkah sebelumnya untuk membuat AWS IoT kebijakan.

   ```
   aws iot create-policy \
   --policy-name "PubSubTestThingPolicy" \
   --policy-document "file://~/policies/pubsub_test_thing_policy.json"
   ```

   Jika kebijakan dibuat, perintah akan menampilkan respons seperti ini.

   ```
   {
                                       "policyName": "PubSubTestThingPolicy",
                                       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
                                       "policyDocument": "{\n\"Version\": \"2012-10-17\",		 	 	 \n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Connect\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Publish\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Subscribe\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Receive\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n]\n}\n]\n}\n",
                                       "policyVersionId": "1"
                                       }
   ```

1. Jalankan perintah ini untuk melampirkan kebijakan ke sertifikat perangkat. Ganti `certificateArn` dengan `certificateArn` nilai yang Anda simpan sebelumnya di bagian ini.

   ```
   aws iot attach-policy \
   --policy-name "PubSubTestThingPolicy" \
   --target "certificateArn"
   ```

   Jika berhasil, perintah ini tidak mengembalikan apa pun.

1. Jalankan perintah ini untuk melampirkan sertifikat perangkat ke sumber daya AWS IoT benda. Ganti `certificateArn` dengan `certificateArn` nilai yang Anda simpan sebelumnya di bagian ini.

   ```
   aws iot attach-thing-principal \
   --thing-name "PubSubTestThing" \
   --principal "certificateArn"
   ```

   Jika berhasil, perintah ini tidak mengembalikan apa pun.

Setelah berhasil menyediakan perangkat AWS IoT, Anda siap untuk melanjutkan[Konfigurasikan file konfigurasi AWS IoT Device Client dan klien pengujian MQTT untuk mendemonstrasikan komunikasi MQTT](#iot-dc-testconn-provision-dc-config).

## Konfigurasikan file konfigurasi AWS IoT Device Client dan klien pengujian MQTT untuk mendemonstrasikan komunikasi MQTT
<a name="iot-dc-testconn-provision-dc-config"></a>

Prosedur ini membuat file konfigurasi untuk menguji AWS IoT Device Client.

**Untuk membuat file konfigurasi untuk menguji AWS IoT Device Client**

1. Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda:

   1. Buka editor teks, seperti`nano`.

   1. Salin dokumen JSON ini dan tempelkan ke editor teks terbuka Anda.

      ```
      {
        "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
        "cert": "~/certs/pubsub/device.pem.crt",
        "key": "~/certs/pubsub/private.pem.key",
        "root-ca": "~/certs/AmazonRootCA1.pem",
        "thing-name": "PubSubTestThing",
        "logging": {
          "enable-sdk-logging": true,
          "level": "DEBUG",
          "type": "STDOUT",
          "file": ""
        },
        "jobs": {
          "enabled": false,
          "handler-directory": ""
        },
        "tunneling": {
          "enabled": false
        },
        "device-defender": {
          "enabled": false,
          "interval": 300
        },
        "fleet-provisioning": {
          "enabled": false,
          "template-name": "",
          "template-parameters": "",
          "csr-file": "",
          "device-key": ""
        },
        "samples": {
          "pub-sub": {
            "enabled": true,
            "publish-topic": "test/dc/pubtopic",
            "publish-file": "",
            "subscribe-topic": "test/dc/subtopic",
            "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
          }
        },
        "config-shadow": {
          "enabled": false
        },
        "sample-shadow": {
          "enabled": false,
          "shadow-name": "",
          "shadow-input-file": "",
          "shadow-output-file": ""
        }
      }
      ```

   1. Ganti *endpoint* nilai dengan titik akhir data perangkat untuk Akun AWS yang Anda temukan. [Menyediakan perangkat Anda di AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision)

   1. Simpan file di editor teks Anda sebagai**\$1/dc-configs/dc-pubsub-config.json**.

   1. Jalankan perintah ini untuk mengatur izin pada file konfigurasi baru.

      ```
      chmod 644 ~/dc-configs/dc-pubsub-config.json
      ```

1. Untuk mempersiapkan **klien uji MQTT** untuk berlangganan semua pesan MQTT:

   1. Di komputer host lokal Anda, di [AWS IoT konsol](https://console.aws.amazon.com//iot/home#/test), pilih klien pengujian **MQTT**.

   1. Di tab **Berlangganan topik**, di **Filter topik**, masukkan **\$1** (satu tanda pound), dan pilih **Berlangganan**.

   1. Di bawah label **Langganan**, konfirmasikan bahwa Anda melihat **\$1** (satu tanda pound).

   Biarkan jendela dengan **klien pengujian MQTT** terbuka saat Anda melanjutkan tutorial ini.

Setelah Anda menyimpan file dan mengkonfigurasi **klien pengujian MQTT**, Anda siap untuk melanjutkan. [Menunjukkan pesan penerbitan dengan Klien AWS IoT Perangkat](iot-dc-testconn-publish.md)

# Menunjukkan pesan penerbitan dengan Klien AWS IoT Perangkat
<a name="iot-dc-testconn-publish"></a>

Prosedur di bagian ini menunjukkan bagaimana Klien AWS IoT Perangkat dapat mengirim pesan MQTT default dan kustom.

Pernyataan kebijakan ini dalam kebijakan yang Anda buat pada langkah sebelumnya untuk latihan ini memberikan izin kepada Raspberry Pi untuk melakukan tindakan ini:
+ 

**`iot:Connect`**  
Memberikan klien bernama`PubSubTestThing`, Raspberry Pi Anda menjalankan AWS IoT Device Client, untuk terhubung.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing"
        ]
      }
  ```
+ 

**`iot:Publish`**  
Memberikan izin Raspberry Pi untuk mempublikasikan pesan dengan topik MQTT. `test/dc/pubtopic`

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Publish"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic"
        ]
      }
  ```

  `iot:Publish`Tindakan memberikan izin untuk mempublikasikan ke topik MQTT yang tercantum dalam larik Sumber Daya. *Isi* pesan tersebut tidak dikontrol oleh pernyataan kebijakan.

## Publikasikan pesan default menggunakan AWS IoT Device Client
<a name="iot-dc-testconn-publish-default"></a>

Prosedur ini menjalankan AWS IoT Device Client sehingga menerbitkan pesan MQTT default tunggal yang diterima dan ditampilkan oleh klien pengujian **MQTT**.

**Untuk mengirim pesan MQTT default dari Device Client AWS IoT**

1. Pastikan bahwa kedua jendela terminal pada komputer host lokal Anda yang terhubung ke Raspberry Pi Anda dan jendela dengan **klien pengujian MQTT** terlihat saat Anda melakukan prosedur ini.

1. Di jendela terminal, masukkan perintah ini untuk menjalankan AWS IoT Device Client menggunakan file konfigurasi yang dibuat di[Buat file konfigurasi](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1).

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-config.json
   ```

   Di jendela terminal, Klien AWS IoT Perangkat menampilkan pesan informasi dan kesalahan apa pun yang terjadi saat dijalankan.

   Jika tidak ada kesalahan yang ditampilkan di jendela terminal, tinjau klien **pengujian MQTT**.

1. *Di **klien pengujian MQTT**, di jendela **Langganan**, lihat Hello World\$1* pesan dikirim ke topik `test/dc/pubtopic` pesan.

1. Jika Klien AWS IoT Perangkat tidak menampilkan kesalahan dan Anda melihat *Hello World\$1* dikirim ke `test/dc/pubtopic` pesan di **klien pengujian MQTT**, Anda telah menunjukkan koneksi yang berhasil.

1. Di jendela terminal, masukkan **^C** (Ctrl-C) untuk menghentikan Device Client. AWS IoT 

Setelah mendemonstrasikan bahwa AWS IoT Device Client menerbitkan pesan MQTT default, Anda dapat melanjutkan ke pesan MQTT default. [Mempublikasikan pesan kustom menggunakan AWS IoT Device Client](#iot-dc-testconn-publish-custom)

## Mempublikasikan pesan kustom menggunakan AWS IoT Device Client
<a name="iot-dc-testconn-publish-custom"></a>

**Prosedur di bagian ini membuat pesan MQTT kustom dan kemudian menjalankan AWS IoT Device Client sehingga menerbitkan pesan MQTT kustom satu kali untuk klien pengujian MQTT untuk menerima dan menampilkan.**

### Buat pesan MQTT khusus untuk Klien Perangkat AWS IoT
<a name="iot-dc-testconn-publish-custom-create"></a>

Lakukan langkah-langkah ini di jendela terminal pada komputer host lokal yang terhubung ke Raspberry Pi Anda.

**Untuk membuat pesan kustom untuk Klien AWS IoT Perangkat untuk memublikasikan**

1. Di jendela terminal, buka editor teks, seperti`nano`.

1. Ke editor teks, salin dan tempel dokumen JSON berikut. Ini akan menjadi payload pesan MQTT yang diterbitkan oleh Device Client. AWS IoT 

   ```
   {
     "temperature": 28,
     "humidity": 80,
     "barometer": 1013,
     "wind": {
       "velocity": 22,
       "bearing": 255
     }
   }
   ```

1. Simpan konten editor teks sebagai**\$1/messages/sample-ws-message.json**. 

1. Masukkan perintah berikut untuk mengatur izin file pesan yang baru saja Anda buat.

   ```
   chmod 600 ~/messages/*
   ```

**Untuk membuat file konfigurasi untuk Klien AWS IoT Perangkat yang akan digunakan untuk mengirim pesan kustom**

1. Di jendela terminal, di editor teks seperti`nano`, buka file konfigurasi AWS IoT Device Client yang ada:**\$1/dc-configs/dc-pubsub-config.json**. 

1. Edit `samples` objek agar terlihat seperti ini. Tidak ada bagian lain dari file ini yang perlu diubah.

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/subtopic",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

1. Simpan konten editor teks sebagai**\$1/dc-configs/dc-pubsub-custom-config.json**. 

1. Jalankan perintah ini untuk mengatur izin pada file konfigurasi baru.

   ```
   chmod 644 ~/dc-configs/dc-pubsub-custom-config.json
   ```

### Publikasikan pesan MQTT kustom dengan menggunakan Device Client AWS IoT
<a name="iot-dc-testconn-publish-custom-publish"></a>

Perubahan ini hanya memengaruhi *isi* muatan pesan MQTT, sehingga kebijakan saat ini akan terus berfungsi. Namun, jika *topik MQTT* (seperti yang didefinisikan oleh `publish-topic` nilai dalam`~/dc-configs/dc-pubsub-custom-config.json`) diubah, pernyataan `iot::Publish` kebijakan juga perlu dimodifikasi untuk memungkinkan Raspberry Pi mempublikasikan ke topik MQTT baru.

**Untuk mengirim pesan MQTT dari Device Client AWS IoT**

1. Pastikan jendela terminal dan jendela dengan **klien pengujian MQTT** terlihat saat Anda melakukan prosedur ini. **Selain itu, pastikan **klien pengujian MQTT** Anda masih berlangganan filter topik \$1.** Jika tidak, berlangganan filter **\$1** topik lagi.

1. Di jendela terminal, masukkan perintah ini untuk menjalankan AWS IoT Device Client menggunakan file konfigurasi yang dibuat di[Buat file konfigurasi](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1).

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
   ```

   Di jendela terminal, Klien AWS IoT Perangkat menampilkan pesan informasi dan kesalahan apa pun yang terjadi saat dijalankan.

   Jika tidak ada kesalahan yang ditampilkan di jendela terminal, tinjau klien pengujian MQTT.

1. Di **klien pengujian MQTT**, di jendela **Langganan**, lihat payload pesan kustom yang dikirim ke topik pesan. `test/dc/pubtopic`

1. Jika Klien AWS IoT Perangkat tidak menampilkan kesalahan dan Anda melihat payload pesan kustom yang dipublikasikan ke `test/dc/pubtopic` pesan di **klien pengujian MQTT**, Anda telah berhasil menerbitkan pesan kustom.

1. Di jendela terminal, masukkan **^C** (Ctrl-C) untuk menghentikan Device Client. AWS IoT 

Setelah mendemonstrasikan bahwa Klien AWS IoT Perangkat menerbitkan payload pesan khusus, Anda dapat melanjutkan[Menunjukkan berlangganan pesan dengan Klien AWS IoT Perangkat](iot-dc-testconn-subscribe.md).

# Menunjukkan berlangganan pesan dengan Klien AWS IoT Perangkat
<a name="iot-dc-testconn-subscribe"></a>

Di bagian ini, Anda akan mendemonstrasikan dua jenis langganan pesan:
+ Langganan topik tunggal
+ Langganan topik Wild-card

Pernyataan kebijakan ini dalam kebijakan yang dibuat untuk latihan ini memberikan izin kepada Raspberry Pi untuk melakukan tindakan ini:
+ 

**`iot:Receive`**  
Memberikan izin kepada Klien AWS IoT Perangkat untuk menerima topik MQTT yang cocok dengan topik yang disebutkan dalam objek. `Resource`

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Receive"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic"
        ]
      }
  ```
+ 

**`iot:Subscribe`**  
Memberikan izin Klien AWS IoT Perangkat untuk berlangganan filter topik MQTT yang cocok dengan yang disebutkan dalam objek. `Resource`

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Subscribe"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic"
        ]
      }
  ```

## Berlangganan satu topik pesan MQTT
<a name="iot-dc-testconn-subscribe-simple-topic"></a>

Prosedur ini menunjukkan bagaimana Klien AWS IoT Perangkat dapat berlangganan dan mencatat pesan MQTT.

Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, daftar konten **\$1/dc-configs/dc-pubsub-custom-config.json** atau buka file di editor teks untuk meninjau isinya. Temukan `samples` objek, yang seharusnya terlihat seperti ini.

```
  "samples": {
    "pub-sub": {
      "enabled": true,
      "publish-topic": "test/dc/pubtopic",
      "publish-file": "~/messages/sample-ws-message.json",
      "subscribe-topic": "test/dc/subtopic",
      "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
```

Perhatikan `subscribe-topic` nilainya adalah topik MQTT tempat Klien AWS IoT Perangkat akan berlangganan saat dijalankan. Klien AWS IoT Perangkat menulis muatan pesan yang diterimanya dari langganan ini ke file yang diberi nama dalam `subscribe-file` nilai.

**Untuk berlangganan topik pesan MQTT dari Device Client AWS IoT**

1. Pastikan jendela terminal dan jendela dengan klien pengujian MQTT terlihat saat Anda melakukan prosedur ini. **Selain itu, pastikan **klien pengujian MQTT** Anda masih berlangganan filter topik \$1.** Jika tidak, berlangganan filter **\$1** topik lagi.

1. Di jendela terminal, masukkan perintah ini untuk menjalankan AWS IoT Device Client menggunakan file konfigurasi yang dibuat di[Buat file konfigurasi](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1).

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
   ```

   Di jendela terminal, Klien AWS IoT Perangkat menampilkan pesan informasi dan kesalahan apa pun yang terjadi saat dijalankan.

   Jika tidak ada kesalahan yang ditampilkan di jendela terminal, lanjutkan di AWS IoT konsol.

1. Di AWS IoT konsol, di **klien pengujian MQTT**, pilih tab **Publikasikan ke topik**.

1. Dalam **nama Topik**, masukkan **test/dc/subtopic**

1. Di **Payload pesan**, tinjau isi pesan.

1. Pilih **Publikasikan** untuk mempublikasikan pesan MQTT.

1. Di jendela terminal, perhatikan entri *pesan yang diterima* dari AWS IoT Device Client yang terlihat seperti ini.

   ```
   2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
   ```

1. Setelah Anda melihat entri *pesan yang diterima* yang menunjukkan pesan diterima, masukkan **^C** (Ctrl-C) untuk menghentikan Klien Perangkat AWS IoT .

1. Masukkan perintah ini untuk melihat akhir file log pesan dan melihat pesan yang Anda terbitkan dari klien pengujian **MQTT**.

   ```
   tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```

Dengan melihat pesan di file log, Anda telah menunjukkan bahwa Klien AWS IoT Perangkat menerima pesan yang Anda terbitkan dari klien pengujian MQTT.

## Berlangganan beberapa topik pesan MQTT menggunakan karakter wildcard
<a name="iot-dc-testconn-subscribe-wild-topic"></a>

Prosedur ini menunjukkan bagaimana Klien AWS IoT Perangkat dapat berlangganan dan mencatat pesan MQTT menggunakan karakter wildcard. Untuk melakukan ini, Anda akan:

1. Perbarui filter topik yang digunakan Klien AWS IoT Perangkat untuk berlangganan topik MQTT.

1. Perbarui kebijakan yang digunakan oleh perangkat untuk mengizinkan langganan baru.

1. Jalankan AWS IoT Device Client dan publikasikan pesan dari konsol uji MQTT.

**Untuk membuat file konfigurasi untuk berlangganan beberapa topik pesan MQTT dengan menggunakan filter topik MQTT wildcard**

1. Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, buka **\$1/dc-configs/dc-pubsub-custom-config.json** untuk mengedit dan menemukan `samples` objek.

1. Di editor teks, cari `samples` objek dan perbarui `subscribe-topic` nilainya agar terlihat seperti ini. 

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/#",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

   `subscribe-topic`Nilai baru adalah [filter topik MQTT](topics.md#topicfilters) dengan karakter wild card MQTT di bagian akhir. Ini menjelaskan langganan ke semua topik MQTT yang dimulai dengan. `test/dc/` Klien AWS IoT Perangkat menulis muatan pesan yang diterimanya dari langganan ini ke file yang diberi nama. `subscribe-file`

1. Simpan file konfigurasi yang dimodifikasi sebagai**\$1/dc-configs/dc-pubsub-wild-config.json**, dan keluar dari editor.

**Untuk mengubah kebijakan yang digunakan oleh Raspberry Pi Anda untuk mengizinkan berlangganan dan menerima beberapa topik pesan MQTT**

1. Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, di editor teks favorit Anda, buka **\$1/policies/pubsub\$1test\$1thing\$1policy.json** untuk diedit, `iot::Subscribe` dan kemudian temukan pernyataan dan `iot::Receive` kebijakan dalam file.

1. Dalam pernyataan `iot::Subscribe` kebijakan, perbarui string di objek Resource untuk diganti `subtopic``*`, sehingga terlihat seperti ini.

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Subscribe"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*"
         ]
       }
   ```
**catatan**  
[Karakter wild card filter topik MQTT](topics.md#topicfilters) adalah `+` (tanda plus) dan `#` (tanda pound). Permintaan berlangganan dengan `#` di akhir berlangganan semua topik yang dimulai dengan string yang mendahului `#` karakter (misalnya, `test/dc/` dalam hal ini).   
Nilai sumber daya dalam pernyataan kebijakan yang mengotorisasi langganan ini, bagaimanapun, harus menggunakan `*` (tanda bintang) sebagai pengganti `#` (tanda pound) di filter topik ARN. Ini karena prosesor kebijakan menggunakan karakter wild card yang berbeda dari yang digunakan MQTT.  
Untuk informasi selengkapnya tentang penggunaan karakter wild card untuk topik dan filter topik dalam kebijakan, lihat[Menggunakan karakter wildcard di MQTT dan kebijakan AWS IoT Core](pub-sub-policy.md#pub-sub-policy-cert).

1. Dalam pernyataan `iot::Receive` kebijakan, perbarui string di objek Resource untuk diganti `subtopic``*`, sehingga terlihat seperti ini.

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Receive"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*"
         ]
       }
   ```

1. Simpan dokumen kebijakan yang diperbarui sebagai**\$1/policies/pubsub\$1wild\$1test\$1thing\$1policy.json**, dan keluar dari editor.

1. Masukkan perintah ini untuk memperbarui kebijakan tutorial ini untuk menggunakan definisi sumber daya baru.

   ```
   aws iot create-policy-version \
   --set-as-default \
   --policy-name "PubSubTestThingPolicy" \
   --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"
   ```

   Jika perintah berhasil, ia mengembalikan respons seperti ini. Perhatikan bahwa `policyVersionId` sekarang`2`, menunjukkan ini adalah versi kedua dari kebijakan ini. 

   Jika Anda berhasil memperbarui kebijakan, Anda dapat melanjutkan ke prosedur berikutnya.

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
       "policyDocument": "{\n  \"Version\": \"2012-10-17\",		 	 	 \n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Connect\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Publish\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Subscribe\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Receive\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n      ]\n    }\n  ]\n}\n",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

   Jika Anda mendapatkan kesalahan bahwa ada terlalu banyak versi kebijakan untuk menyimpan yang baru, masukkan perintah ini untuk mencantumkan versi kebijakan saat ini. Tinjau daftar yang dikembalikan perintah ini untuk menemukan versi kebijakan yang dapat Anda hapus.

   ```
   aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"
   ```

   Masukkan perintah ini untuk menghapus versi yang tidak lagi Anda butuhkan. Perhatikan bahwa Anda tidak dapat menghapus versi kebijakan default. Versi kebijakan default adalah versi dengan `isDefaultVersion` nilai`true`.

   ```
   aws iot delete-policy-version \
   --policy-name "PubSubTestThingPolicy" \
   --policy-version-id policyId
   ```

   Setelah menghapus versi kebijakan, coba lagi langkah ini.

Dengan file konfigurasi dan kebijakan yang diperbarui, Anda siap mendemonstrasikan langganan wild card dengan AWS IoT Device Client.

**Untuk mendemonstrasikan bagaimana Klien AWS IoT Perangkat berlangganan dan menerima beberapa topik pesan MQTT**

1. Di **klien uji MQTT**, periksa langganan. Jika **klien pengujian MQTT** berlangganan ke dalam filter **\$1** topik, lanjutkan ke langkah berikutnya. Jika tidak, di **klien pengujian MQTT**, di **Berlangganan ke tab topik**, di **Filter topik**, masukkan **\$1** (karakter tanda pound), lalu pilih **Berlangganan untuk berlangganan**.

1. Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, masukkan perintah ini untuk memulai AWS IoT Device Client.

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
   ```

1. Saat menonton output AWS IoT Device Client di jendela terminal di komputer host lokal, kembali ke klien pengujian **MQTT**. Di tab **Publikasikan ke topik**, di **Nama topik**, masukkan**test/dc/subtopic**, lalu pilih **Publikasikan**. 

1. Di jendela terminal, konfirmasikan bahwa pesan diterima dengan mencari pesan seperti:

   ```
   2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
   ```

1. Saat menonton output AWS IoT Device Client di jendela terminal komputer host lokal, kembali ke klien pengujian **MQTT**. Di tab **Publikasikan ke topik**, di **Nama topik**, masukkan**test/dc/subtopic2**, lalu pilih **Publikasikan**. 

1. Di jendela terminal, konfirmasikan bahwa pesan diterima dengan mencari pesan seperti:

   ```
   2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
   ```

1. Setelah Anda melihat pesan yang mengonfirmasi kedua pesan diterima, masukkan **^C** (Ctrl-C) untuk menghentikan Klien Perangkat AWS IoT .

1. Masukkan perintah ini untuk melihat akhir file log pesan dan melihat pesan yang Anda terbitkan dari klien pengujian **MQTT**.

   ```
   tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```
**catatan**  
File log hanya berisi muatan pesan. Topik pesan tidak direkam dalam file log pesan yang diterima.  
Anda mungkin juga melihat pesan yang diterbitkan oleh Klien AWS IoT Perangkat di log yang diterima. Ini karena filter topik wild card mencakup topik pesan itu dan, terkadang, permintaan berlangganan dapat diproses oleh broker pesan sebelum pesan yang dipublikasikan dikirim ke pelanggan.

Entri dalam file log menunjukkan bahwa pesan diterima. Anda dapat mengulangi prosedur ini menggunakan nama topik lain. Semua pesan yang memiliki nama topik yang dimulai dengan `test/dc/` harus diterima dan dicatat. Pesan dengan nama topik yang dimulai dengan teks lain diabaikan.

Setelah mendemonstrasikan bagaimana Klien AWS IoT Perangkat dapat mempublikasikan dan berlangganan pesan MQTT, lanjutkan ke. [Tutorial: Menunjukkan tindakan jarak jauh (pekerjaan) dengan AWS IoT Device Client](iot-dc-runjobs.md)