View a markdown version of this page

Tutorial: Menerbitkan ulang pesan MQTT - AWS IoT Core

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

Tutorial ini menunjukkan cara membuat AWS IoT aturan yang menerbitkan pesan MQTT ketika pesan MQTT tertentu diterima. Payload pesan 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 menerbitkan 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 mereka dapat berlangganan topik pesan MQTT lainnya.

Apa yang akan Anda pelajari dalam tutorial ini:
  • Cara menggunakan kueri dan fungsi SQL sederhana dalam pernyataan kueri aturan

  • Cara menggunakan klien MQTT untuk menguji aturan AWS IoT

Tutorial ini membutuhkan waktu sekitar 30 menit untuk menyelesaikannya.

Sebelum memulai tutorial ini, pastikan Anda memiliki:
  • Penyiapan Akun AWS

    Anda akan membutuhkan AWS IoT konsol Anda Akun AWS untuk menyelesaikan tutorial ini.

  • Diulas Lihat pesan MQTT dengan AWS IoT Klien MQTT

    Pastikan Anda dapat menggunakan klien MQTT untuk berlangganan dan mempublikasikan topik. Anda akan menggunakan klien MQTT untuk menguji aturan baru Anda dalam prosedur ini.

Tinjau topik MQTT dan AWS IoT aturan

Sebelum berbicara tentang AWS IoT aturan, ada baiknya 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 yang berlaku untuk tutorial ini. Untuk informasi tentang bagaimana MQTT dibandingkan dengan HTTP, lihatMemilih protokol aplikasi untuk komunikasi perangkat Anda.

Protokol MQTT

Protokol MQTT menggunakan model publish/subscribe komunikasi dengan hostnya. Untuk mengirim data, perangkat menerbitkan 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 payload pesan, dan memformat data seperti yang dijelaskan oleh pernyataan SQL yang mirip dengan pernyataan yang digunakan oleh database SQL populer. Hasil dari pernyataan kueri 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. Dalam tutorial ini, bagaimanapun, Anda akan berkonsentrasi pada tindakan Publikasikan ulang aturan, yang menerbitkan hasil pernyataan kueri sebagai pesan MQTT dengan topik tertentu.

Langkah 1: Buat AWS IoT aturan untuk menerbitkan ulang pesan MQTT

A AWS IoT turan yang akan Anda buat dalam tutorial ini berlangganan topik device/device_id/data MQTT di mana device_id adalah ID perangkat yang mengirim pesan. Topik ini dijelaskan oleh filter topik sebagaidevice/+/data, di mana 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 meneruskan temperature nilai device_id dan sebagai pesan MQTT baru dengan topik tersebutdevice/data/temp.

Misalnya, payload 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 merepublikasikannya sebagai pesan MQTT dengan device/data/temp topik dan payload 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 menerima hanya informasi itu.

Untuk membuat aturan yang meneruskan pesan MQTT
  1. Buka hub A turan AWS IoT konsol.

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

  3. Di bagian atas Buat aturan:

    1. Di Nama, masukkan nama aturan. Untuk tutorial ini, beri namarepublish_temp.

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

    2. Dalam Deskripsi, jelaskan aturannya.

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

  4. Dalam pernyataan kueri aturan Buat aturan:

    1. Di Menggunakan versi SQL, pilih2016-03-23.

    2. Di 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 device/+/data topik.

      • Memilih elemen kedua dari string topik dan menetapkannya ke device_id bidang.

      • Memilih temperature bidang nilai dari payload pesan dan menetapkannya ke bidang. temperature

  5. Dalam Mengatur satu atau lebih tindakan:

    1. Untuk membuka daftar tindakan aturan untuk aturan ini, pilih Tam bah tindakan.

    2. Di Pilih tindakan, pilih Publi kasikan ulang pesan ke AWS IoT topik.

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

  6. Dalam tindakan Konfigurasi:

    1. Di Topik, masukkandevice/data/temp. Ini adalah topik MQTT dari pesan yang akan diterbitkan aturan ini.

    2. Di Kualitas Layanan, pilih 0 - Pesan dikirimkan nol kali atau lebih.

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

      1. Pilih Buat Peran. Ko tak dialog Buat peran baru terbuka.

      2. Masukkan nama yang menggambarkan peran baru. Dalam tutorial ini, gunakanrepublish_role.

        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 untuk mengotorisasi topik atau tindakan baru. Untuk memperbarui peran yang ada, pilih Per barui peran di bagian ini.

      3. Pilih Buat Per an untuk membuat peran dan menutup kotak dialog.

    4. Pilih Tam bah tindakan untuk menambahkan tindakan ke aturan dan kembali ke halaman Buat aturan.

  7. Tind akan Publikasikan ulang pesan ke AWS IoT topik sekarang tercantum di Tet apkan satu atau beberapa tindakan.

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

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

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

Langkah 2: Uji aturan baru Anda

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 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, berlangganan topik input, dalam hal ini,device/+/data.

    1. Di klien MQTT, di bawah Lang ganan, pilih Berlangganan ke topik.

    2. Di Topik berlangganan, masukkan topik filter topik masukan,device/+/data.

    3. Simpan sisa bidang pada pengaturan defaultnya.

    4. Pilih Berlangganan topik.

      Di kolom Langganan, di bawah Publikasikan ke topik, device/+/data muncul.

  2. Berlangganan topik yang akan diterbitkan aturan Anda:device/data/temp.

    1. Di bawah Lang ganan, pilih Ber langganan ke topik lagi, dan di Topik langganan, masukkan topik pesan yang diterbitkan ulang,device/data/temp.

    2. Simpan sisa bidang pada pengaturan defaultnya.

    3. Pilih Berlangganan topik.

      Di kolom Lang ganan, di bawah perangkat /+/data, muncul. device/data/temp

  3. 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 Lang ganan, pilih Publi kasikan ke topik.

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

    3. 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 } }
    4. Untuk mengirim pesan MQTT Anda, pilih Publi kasikan ke topik.

  4. Tinjau pesan yang dikirim.

    1. Di klien MQTT, di bawah Lang ganan, 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.

    2. Di bawah Langganan, pilih perangkat/+/data untuk memeriksa apakah payload pesan cocok dengan apa yang baru saja Anda publikasikan dan terlihat seperti ini:

      { "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    3. Di bawah Langganan, pilih device/data /temp untuk memeriksa apakah payload pesan yang diterbitkan ulang terlihat seperti ini:

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

      Perhatikan bahwa nil device_id ainya adalah string yang dikutip dan nil temperature ainya numerik. Ini karena topic() fungsi mengekstrak string dari nama topik pesan input sementara nilainya menggunakan temperature nilai numerik dari payload pesan input.

      Jika Anda ingin menjadikan nilai device_id sebagai nilai numerik, ganti topic(2) pernyataan kueri aturan dengan:

      cast(topic(2) AS DECIMAL)

      Perhatikan bahwa memasukkan topic(2) nilai ke nilai numerik hanya akan berfungsi jika bagian topik itu hanya berisi karakter numerik.

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

    Jika Anda tidak melihat bahwa pesan yang benar telah dipublikasikan ke topik perangkat /+/data atau device/data /temp, periksa kiat pemecahan masalah.

Memecahkan masalah aturan Publikasikan ulang pesan

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

  • Anda mendapat spanduk kesalahan

    Jika kesalahan muncul saat Anda menerbitkan pesan input, perbaiki kesalahan itu terlebih dahulu. Langkah-langkah berikut dapat membantu Anda memperbaiki kesalahan itu.

  • Anda tidak melihat pesan input di klien MQTT

    Setiap kali Anda mempublikasikan pesan input Anda 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 berlangganan

      Jika Anda berlangganan topik pesan masukan 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 berlangganan dan bandingkan dengan topik yang Anda publikasikan. Nama topik peka huruf besar/kecil dan topik yang Anda berlangganan harus identik dengan topik tempat Anda menerbitkan payload pesan.

    • Periksa fungsi penerbitan pesan

      Di klien MQTT, di bawah Lang ganan, pilih per angkat/+/data, periksa topik pesan publikasi, lalu pilih Publikasikan ke topik. Anda akan melihat payload pesan dari kotak edit di bawah topik muncul di daftar pesan.

  • Anda tidak melihat pesan yang diterbitkan ulang di klien MQTT

    Agar aturan Anda berfungsi, aturan harus memiliki kebijakan yang benar yang mengizinkannya untuk menerima dan menerbitkan ulang pesan dan harus menerima pesan tersebut.

    Hal-hal yang harus diperiksa
    • Periksa Wilayah AWS dari klien MQTT Anda dan aturan yang Anda buat

      Konsol tempat Anda menjalankan klien MQTT harus berada di Wilayah yang sama AWS 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 ejaan topik di klien MQTT. Nama topik peka huruf besar/kecil dan topik pesan harus cocok dengan filter topik dalam pernyataan kueri aturan.

    • Periksa isi muatan pesan input

      Agar aturan berfungsi, ia harus menemukan bidang data dalam 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 dalam payload pesan.

      Pastikan dokumen JSON dalam 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 tempat tindakan penerbitan aturan Ulang 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 menerbitkan topik baru.

      Kebijakan yang mengotorisasi aturan untuk menerima data pesan dan menerbitkannya kembali khusus untuk topik yang digunakan. Jika Anda mengubah topik yang digunakan untuk menerbitkan ulang data pesan, Anda harus memperbarui peran tindakan aturan untuk memperbarui kebijakannya agar sesuai dengan topik saat ini.

      Jika Anda menduga ini masalahnya, edit tindakan Publikasikan ulang aturan 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

Dalam tutorial ini
  • Anda menggunakan kueri SQL sederhana dan beberapa fungsi dalam pernyataan kueri aturan untuk menghasilkan pesan MQTT baru.

  • Anda membuat aturan yang menerbitkan ulang pesan baru itu.

  • Anda menggunakan klien MQTT untuk menguji AWS IoT aturan Anda.

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 membantu Anda memulai.

  • Ubah device_id topik pesan input dan amati efeknya dalam payload pesan yang diterbitkan ulang.

  • 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 caranyaTutorial: Mengirim pemberitahuan Amazon SNS.

Tindakan Republish aturan 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 aturan memformat data yang digunakan oleh tindakan aturannya.