

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

# Tutorial: Menerbitkan ulang pesan MQTT
<a name="iot-repub-rule"></a>

Tutorial ini menunjukkan cara membuat AWS IoT aturan yang menerbitkan pesan MQTT ketika pesan MQTT tertentu diterima. Payload pesan yang masuk dapat dimodifikasi oleh aturan sebelum dipublikasikan. Ini memungkinkan untuk membuat pesan yang disesuaikan dengan aplikasi tertentu tanpa perlu mengubah perangkat Anda atau firmware-nya. Anda juga dapat menggunakan aspek pemfilteran aturan untuk mempublikasikan pesan hanya ketika kondisi tertentu terpenuhi.

Pesan yang diterbitkan ulang oleh aturan bertindak seperti pesan yang dikirim oleh AWS IoT perangkat atau klien lain. Perangkat dapat berlangganan pesan yang diterbitkan ulang dengan cara yang sama seperti mereka dapat berlangganan topik pesan MQTT lainnya.

**Apa yang akan Anda pelajari dalam tutorial ini:**
+ Cara menggunakan query SQL sederhana dan fungsi dalam pernyataan query aturan
+ Cara menggunakan klien MQTT untuk menguji aturan AWS IoT 

Tutorial ini membutuhkan waktu sekitar 30 menit untuk menyelesaikannya.

**Topics**
+ [Tinjau topik dan aturan MQTT AWS IoT](#iot-repub-rule-mqtt)
+ [Langkah 1: Buat AWS IoT aturan untuk menerbitkan ulang pesan MQTT](#iot-repub-rule-define)
+ [Langkah 2: Uji aturan baru Anda](#iot-repub-rule-test)
+ [Langkah 3: Tinjau hasil dan langkah selanjutnya](#iot-repub-rule-review)

**Sebelum Anda memulai tutorial ini, pastikan Anda memiliki:**
+ 

**[Mengatur Akun AWS](setting-up.md)**  
Anda akan membutuhkan Akun AWS dan AWS IoT konsol Anda untuk menyelesaikan tutorial ini.
+ 

**Diulas [Lihat pesan MQTT dengan klien MQTT AWS IoT](view-mqtt-messages.md)**  
Pastikan Anda dapat menggunakan klien MQTT untuk berlangganan dan mempublikasikan ke suatu topik. Anda akan menggunakan klien MQTT untuk menguji aturan baru Anda dalam prosedur ini.

## Tinjau topik dan aturan MQTT AWS IoT
<a name="iot-repub-rule-mqtt"></a>

Sebelum berbicara tentang AWS IoT aturan, ada baiknya untuk memahami protokol MQTT. Dalam solusi IoT, protokol MQTT menawarkan beberapa keunggulan dibandingkan protokol komunikasi jaringan lainnya, seperti HTTP, yang menjadikannya pilihan populer untuk digunakan oleh perangkat IoT. Bagian ini mengulas aspek-aspek kunci dari MQTT karena mereka berlaku untuk tutorial ini. Untuk informasi tentang bagaimana MQTT dibandingkan dengan HTTP, lihat. [Memilih protokol aplikasi untuk komunikasi perangkat Anda](protocols.md#protocol-selection)

**Protokol MQTT**  
Protokol MQTT menggunakan model publish/subscribe komunikasi dengan hostnya. Untuk mengirim data, perangkat mempublikasikan pesan yang diidentifikasi berdasarkan topik ke broker AWS IoT pesan. Untuk menerima pesan dari broker pesan, perangkat berlangganan topik yang akan mereka terima dengan mengirimkan filter topik dalam permintaan berlangganan ke broker pesan. Mesin AWS IoT aturan menerima pesan MQTT dari broker pesan.

**AWS IoT aturan**  
AWS IoT aturan terdiri dari pernyataan kueri aturan dan satu atau lebih tindakan aturan. Ketika mesin AWS IoT aturan menerima pesan MQTT, elemen-elemen ini bertindak pada pesan sebagai berikut.
+ 

**Pernyataan kueri aturan**  
Pernyataan kueri aturan menjelaskan topik MQTT yang akan digunakan, menafsirkan data dari muatan pesan, dan memformat data seperti yang dijelaskan oleh pernyataan SQL yang mirip dengan pernyataan yang digunakan oleh database SQL populer. Hasil dari pernyataan query adalah data yang dikirim ke tindakan aturan.
+ 

**Tindakan aturan**  
Setiap tindakan aturan dalam aturan bertindak pada data yang dihasilkan dari pernyataan kueri aturan. AWS IoT mendukung [banyak tindakan aturan](iot-rule-actions.md). Namun, dalam tutorial ini, Anda akan berkonsentrasi pada tindakan [Publikasikan ulang](republish-rule-action.md) aturan, yang menerbitkan hasil pernyataan kueri sebagai pesan MQTT dengan topik tertentu.

## Langkah 1: Buat AWS IoT aturan untuk menerbitkan ulang pesan MQTT
<a name="iot-repub-rule-define"></a>

 AWS IoT Aturan yang akan Anda buat dalam tutorial ini berlangganan topik `device/device_id/data` MQTT di *device\$1id* mana ID perangkat yang mengirim pesan. Topik-topik ini dijelaskan oleh [filter topik](topics.md#topicfilters) sebagai`device/+/data`, di mana `+` adalah karakter wildcard yang cocok dengan string apa pun di antara dua karakter garis miring ke depan.

Ketika aturan menerima pesan dari topik yang cocok, aturan akan menerbitkan kembali `device_id` dan `temperature` nilai sebagai pesan MQTT baru dengan topik tersebut. `device/data/temp` 

Misalnya, muatan pesan MQTT dengan `device/22/data` topik terlihat seperti ini:

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

Aturan mengambil `temperature` nilai dari payload pesan, dan `device_id` dari topik, dan menerbitkannya kembali sebagai pesan MQTT dengan `device/data/temp` topik dan muatan pesan yang terlihat seperti ini:

```
{
  "device_id": "22",
  "temperature": 28
}
```

Dengan aturan ini, perangkat yang hanya memerlukan ID perangkat dan data suhu berlangganan `device/data/temp` topik untuk hanya menerima informasi itu.

**Untuk membuat aturan yang menerbitkan kembali pesan MQTT**

1. Buka [hub **Aturan**AWS IoT konsol](https://console.aws.amazon.com//iot/home#/rulehub).

1. Di **Aturan**, pilih **Buat** dan mulai membuat aturan baru Anda.

1. Di bagian atas **Buat aturan**:

   1. Di **Nama**, masukkan nama aturan. Untuk tutorial ini, beri nama**republish\$1temp**.

      Ingat bahwa nama aturan harus unik dalam Akun dan Wilayah Anda, dan tidak dapat memiliki spasi apa pun. Kami telah menggunakan karakter garis bawah dalam nama ini untuk memisahkan dua kata dalam nama aturan.

   1.  Dalam **Deskripsi**, jelaskan aturannya. 

      Deskripsi yang bermakna membantu Anda mengingat apa yang dilakukan aturan ini dan mengapa Anda membuatnya. Deskripsi bisa selama dibutuhkan, jadi sedetail mungkin. 

1. Dalam **pernyataan kueri Aturan** **Buat aturan**:

   1.  Dalam **Menggunakan versi SQL**, pilih**2016-03-23**. 

   1. Dalam kotak edit **pernyataan kueri aturan**, masukkan pernyataan: 

      ```
      SELECT topic(2) as device_id, temperature FROM 'device/+/data'
      ```

      Pernyataan ini:
      + Mendengarkan pesan MQTT dengan topik yang cocok dengan filter topik. `device/+/data`
      + Memilih elemen kedua dari string topik dan menugaskannya ke bidang. `device_id`
      + Memilih `temperature` bidang nilai dari payload pesan dan menetapkannya ke bidang. `temperature`

1. Di **Tetapkan satu atau lebih tindakan**:

   1. Untuk membuka daftar tindakan aturan untuk aturan ini, pilih **Tambah tindakan**.

   1. Di **Pilih tindakan**, pilih **Menerbitkan ulang pesan ke AWS IoT topik**.

   1. Di bagian bawah daftar tindakan, pilih **Konfigurasi tindakan** untuk membuka halaman konfigurasi tindakan yang dipilih.

1. Dalam **tindakan Konfigurasi**:

   1.  Di **Topik**, masukkan**device/data/temp**. Ini adalah topik MQTT dari pesan yang akan dipublikasikan oleh aturan ini. 

   1.  Di **Quality of Service**, pilih **0 - Pesan dikirim nol kali atau lebih**. 

   1.  Di **Pilih atau buat peran untuk memberikan AWS IoT akses untuk melakukan tindakan ini**:

      1.  Pilih **Buat Peran**. Kotak dialog **Buat peran baru** terbuka. 

      1. Masukkan nama yang menggambarkan peran baru. Dalam tutorial ini, gunakan**republish\$1role**. 

         Saat Anda membuat peran baru, kebijakan yang benar untuk melakukan tindakan aturan dibuat dan dilampirkan ke peran baru. Jika Anda mengubah topik tindakan aturan ini atau menggunakan peran ini dalam tindakan aturan lain, Anda harus memperbarui kebijakan untuk peran tersebut guna mengotorisasi topik atau tindakan baru. Untuk memperbarui peran yang ada, pilih **Perbarui peran** di bagian ini.

      1. Pilih **Buat Peran** untuk membuat peran dan menutup kotak dialog. 

   1. Pilih **Tambahkan tindakan** untuk menambahkan tindakan ke aturan dan kembali ke halaman **Buat aturan**. 

1. **Menerbitkan ulang pesan ke tindakan AWS IoT topik** sekarang tercantum dalam **Tetapkan satu atau beberapa tindakan**.

   Di ubin tindakan baru, di bawah **Publikasikan ulang pesan ke suatu AWS IoT topik**, Anda dapat melihat topik yang akan dipublikasikan oleh tindakan penerbitan ulang Anda.

   Ini adalah satu-satunya tindakan aturan yang akan Anda tambahkan ke aturan ini.

1. Di **Buat aturan**, gulir ke bawah ke bawah dan pilih **Buat aturan** untuk membuat aturan dan selesaikan langkah ini.

## Langkah 2: Uji aturan baru Anda
<a name="iot-repub-rule-test"></a>

Untuk menguji aturan baru Anda, Anda akan menggunakan klien MQTT untuk mempublikasikan dan berlangganan pesan MQTT yang digunakan oleh aturan ini.

Buka [klien MQTT di AWS IoT konsol di jendela](https://console.aws.amazon.com//iot/home#/test) baru. Ini akan memungkinkan Anda mengedit aturan tanpa kehilangan konfigurasi klien MQTT Anda. Klien MQTT tidak menyimpan langganan atau log pesan apa pun jika Anda membiarkannya pergi ke halaman lain di konsol.

**Untuk menggunakan klien MQTT untuk menguji aturan Anda**

1. Di [klien MQTT di AWS IoT konsol](https://console.aws.amazon.com//iot/home#/test), berlangganan topik input, dalam hal ini,. `device/+/data`

   1. Di klien MQTT, di bawah **Langganan, pilih **Berlangganan**** topik.

   1. Dalam **topik Langganan**, masukkan topik filter topik masukan,**device/\$1/data**.

   1. Simpan sisa bidang di pengaturan defaultnya.

   1. Pilih **Berlangganan topik**.

      Di kolom **Langganan**, di bawah **Publikasikan ke topik**, **device/\$1/data** muncul. 

1. Berlangganan topik yang akan diterbitkan oleh aturan Anda:`device/data/temp`.

   1. Di bawah **Langganan****, pilih Berlangganan topik** lagi, dan dalam **topik Langganan**, masukkan topik pesan yang diterbitkan ulang,. **device/data/temp**

   1. Simpan sisa bidang di pengaturan defaultnya.

   1. Pilih **Berlangganan topik**.

      Di kolom **Langganan**, di bawah **perangkat/\$1/data, muncul**. **device/data/temp** 

1. Publikasikan pesan ke topik input dengan ID perangkat tertentu,**device/22/data**. Anda tidak dapat mempublikasikan ke topik MQTT yang berisi karakter wildcard.

   1. **Di klien MQTT, di bawah **Langganan**, pilih Publikasikan ke topik.**

   1. Di bidang **Publikasikan**, masukkan nama topik masukan,**device/22/data**.

   1. Salin data sampel yang ditampilkan di sini dan, di kotak edit di bawah nama topik, tempel data sampel.

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

   1. Untuk mengirim pesan MQTT Anda, pilih **Publikasikan** ke topik.

1. Tinjau pesan yang dikirim.

   1. Di klien MQTT, di bawah **Langganan**, ada titik hijau di sebelah dua topik yang Anda berlangganan sebelumnya.

      Titik-titik hijau menunjukkan bahwa satu atau lebih pesan baru telah diterima sejak terakhir kali Anda melihatnya.

   1. Di bawah **Langganan**, pilih **perangkat/\$1/data** untuk memeriksa apakah muatan pesan cocok dengan apa yang baru saja Anda terbitkan dan terlihat seperti ini:

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

   1. Di bawah **Langganan**, pilih **device/data/temp**untuk memeriksa apakah payload pesan yang dipublikasikan ulang terlihat seperti ini:

      ```
      {
        "device_id": "22",  
        "temperature": 28
      }
      ```

      Perhatikan bahwa `device_id` nilainya adalah string yang dikutip dan `temperature` nilainya numerik. Hal ini karena [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic)fungsi mengekstrak string dari nama topik pesan masukan sementara `temperature` nilai menggunakan nilai numerik dari payload pesan masukan.

      Jika Anda ingin membuat nilai `device_id` nilai numerik, ganti `topic(2)` dalam pernyataan kueri aturan dengan:

      ```
      cast(topic(2) AS DECIMAL)
      ```

      Perhatikan bahwa `topic(2)` mentransmisikan nilai ke nilai numerik hanya akan berfungsi jika bagian topik tersebut hanya berisi karakter numerik.

1. Jika Anda melihat bahwa pesan yang benar dipublikasikan ke **device/data/temp**topik, maka aturan Anda berfungsi. Lihat apa lagi yang dapat Anda pelajari tentang tindakan aturan Publikasikan ulang di bagian berikutnya.

   Jika Anda tidak melihat bahwa pesan yang benar telah dipublikasikan ke **perangkat/\$1/data** atau **device/data/temp**topik, periksa tips pemecahan masalah.

### Memecahkan masalah aturan pesan Republish
<a name="iot-repub-rule-trouble"></a>

Berikut adalah beberapa hal untuk diperiksa jika Anda tidak melihat hasil yang Anda harapkan.
+ 

**Anda mendapat spanduk kesalahan**  
Jika kesalahan muncul saat Anda mempublikasikan pesan input, perbaiki kesalahan itu terlebih dahulu. Langkah-langkah berikut dapat membantu Anda memperbaiki kesalahan itu.
+ 

**Anda tidak melihat pesan masukan di klien MQTT**  
Setiap kali Anda mempublikasikan pesan masukan ke `device/22/data` topik, pesan itu akan muncul di klien MQTT jika Anda berlangganan filter `device/+/data` topik seperti yang dijelaskan dalam prosedur.

**Hal-hal yang harus diperiksa**
  + 

**Periksa filter topik yang Anda langgani**  
Jika Anda berlangganan topik pesan input seperti yang dijelaskan dalam prosedur, Anda akan melihat salinan pesan input setiap kali Anda mempublikasikannya.

    Jika Anda tidak melihat pesan, periksa nama topik yang Anda langgani dan bandingkan dengan topik yang Anda terbitkan. Nama topik peka huruf besar/kecil dan topik yang Anda langgani harus identik dengan topik yang Anda publikasikan payload pesan.
  + 

**Periksa fungsi publikasi pesan**  
**Di klien MQTT, di bawah **Langganan**, pilih **perangkat/\$1/data**, periksa topik pesan terbitkan, lalu pilih Publikasikan ke topik.** Anda akan melihat payload pesan dari kotak edit di bawah topik yang muncul di daftar pesan. 
+ 

**Anda tidak melihat pesan yang diterbitkan ulang di klien MQTT**  
Agar aturan Anda berfungsi, ia harus memiliki kebijakan yang benar yang mengizinkannya untuk menerima dan menerbitkan ulang pesan dan harus menerima pesan.

**Hal-hal yang harus diperiksa**
  + 

**Periksa klien MQTT Anda dan aturan yang Anda buat Wilayah AWS**  
Konsol tempat Anda menjalankan klien MQTT harus berada di AWS Wilayah yang sama dengan aturan yang Anda buat. 
  + 

**Periksa topik pesan masukan dalam pernyataan kueri aturan**  
Agar aturan berfungsi, aturan harus menerima pesan dengan nama topik yang cocok dengan filter topik dalam klausa FROM dari pernyataan kueri aturan.

    Periksa ejaan filter topik dalam pernyataan kueri aturan dengan topik di klien MQTT. Nama topik peka huruf besar/kecil dan topik pesan harus cocok dengan filter topik dalam pernyataan kueri aturan.
  + 

**Periksa isi payload pesan masukan**  
Agar aturan berfungsi, ia harus menemukan bidang data di payload pesan yang dideklarasikan dalam pernyataan SELECT.

    Periksa ejaan `temperature` bidang dalam pernyataan kueri aturan dengan payload pesan di klien MQTT. Nama bidang peka huruf besar/kecil dan `temperature` bidang dalam pernyataan kueri aturan harus identik dengan `temperature` bidang di payload pesan.

    Pastikan dokumen JSON di payload pesan diformat dengan benar. Jika JSON memiliki kesalahan, seperti koma yang hilang, aturan tidak akan dapat membacanya. 
  + 

**Periksa topik pesan yang diterbitkan ulang dalam tindakan aturan**  
Topik di mana tindakan aturan Republish menerbitkan pesan baru harus sesuai dengan topik yang Anda berlangganan di klien MQTT.

    Buka aturan yang Anda buat di konsol dan periksa topik di mana tindakan aturan akan menerbitkan ulang pesan.
  + 

**Periksa peran yang digunakan oleh aturan**  
Tindakan aturan harus memiliki izin untuk menerima topik asli dan mempublikasikan topik baru. 

    Kebijakan yang mengizinkan aturan untuk menerima data pesan dan mempublikasikannya khusus untuk topik yang digunakan. Jika mengubah topik yang digunakan untuk memublikasikan ulang data pesan, Anda harus memperbarui peran tindakan aturan untuk memperbarui kebijakannya agar sesuai dengan topik saat ini.

    Jika Anda mencurigai ini masalahnya, edit tindakan aturan Republish dan buat peran baru. Peran baru yang dibuat oleh tindakan aturan menerima otorisasi yang diperlukan untuk melakukan tindakan ini.

## Langkah 3: Tinjau hasil dan langkah selanjutnya
<a name="iot-repub-rule-review"></a>

**Dalam tutorial ini**
+ Anda menggunakan query SQL sederhana dan beberapa fungsi dalam pernyataan query aturan untuk menghasilkan pesan MQTT baru.
+ Anda membuat aturan yang menerbitkan ulang pesan baru itu.
+ Anda menggunakan klien MQTT untuk menguji aturan Anda. AWS IoT 

**Langkah selanjutnya**  
Setelah Anda menerbitkan ulang beberapa pesan dengan aturan ini, cobalah bereksperimen dengannya untuk melihat bagaimana mengubah beberapa aspek tutorial memengaruhi pesan yang diterbitkan ulang. Berikut adalah beberapa ide untuk Anda mulai.
+ Ubah topik pesan masukan dan amati efeknya dalam payload pesan yang diterbitkan ulang. *device\$1id*
+ Ubah bidang yang dipilih dalam pernyataan kueri aturan dan amati efeknya dalam payload pesan yang diterbitkan ulang.
+ Coba tutorial berikutnya dalam seri ini dan pelajari caranya[Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md).

Tindakan aturan Republish yang digunakan dalam tutorial ini juga dapat membantu Anda men-debug pernyataan kueri aturan. Misalnya, Anda dapat menambahkan tindakan ini ke aturan untuk melihat bagaimana pernyataan kueri aturannya memformat data yang digunakan oleh tindakan aturannya.