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 MQTT pesan ketika MQTT pesan 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 MQTT pesan lainnya.

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

  • Cara menggunakan MQTT klien untuk menguji AWS IoT aturan

Tutorial ini membutuhkan waktu sekitar 30 menit untuk menyelesaikannya.

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

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

  • Diulas Lihat MQTT pesan dengan AWS IoT MQTT klien

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

Tinjau MQTT topik dan AWS IoT aturan

Sebelum berbicara tentang AWS IoT aturan, ada baiknya untuk memahami MQTT protokol. Dalam solusi IoT, MQTT protokol ini menawarkan beberapa keunggulan dibandingkan protokol komunikasi jaringan lainnya, sepertiHTTP, yang menjadikannya pilihan populer untuk digunakan oleh perangkat IoT. Bagian ini mengulas aspek-aspek kunci MQTT yang diterapkan pada tutorial ini. Untuk informasi tentang MQTT perbandingannyaHTTP, lihatMemilih protokol aplikasi untuk komunikasi perangkat Anda.

MQTTprotokol

MQTTProtokol menggunakan model komunikasi terbitkan/berlangganan dengan host-nya. 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 MQTT pesan 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 MQTT pesan, elemen-elemen ini bertindak atas pesan sebagai berikut.

  • Pernyataan kueri aturan

    Pernyataan kueri aturan menjelaskan MQTT topik yang akan digunakan, menafsirkan data dari muatan pesan, dan memformat data seperti yang dijelaskan oleh SQL pernyataan yang mirip dengan pernyataan yang digunakan oleh database populerSQL. 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. Namun, dalam tutorial ini, Anda akan berkonsentrasi pada tindakan Publikasikan ulang aturan, yang menerbitkan hasil pernyataan kueri sebagai MQTT pesan dengan topik tertentu.

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

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

Misalnya, muatan MQTT pesan 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 MQTT pesan 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 hanya menerima informasi itu.

Untuk membuat aturan yang menerbitkan kembali pesan MQTT
  1. Buka hub AturanAWS 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.

      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.

    2. 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.

  4. Dalam pernyataan kueri Aturan Buat aturan:

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

    2. Dalam kotak edit pernyataan kueri aturan, masukkan pernyataan:

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

      Pernyataan ini:

      • Mendengarkan MQTT pesan dengan topik yang cocok dengan filter device/+/data topik.

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

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

  5. Di Tetapkan satu atau lebih tindakan:

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

    2. Di Pilih tindakan, pilih Menerbitkan 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 MQTT topik pesan yang akan dipublikasikan oleh aturan ini.

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

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

      1. Pilih Buat Peran. Kotak 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 guna mengotorisasi topik atau tindakan baru. Untuk memperbarui peran yang ada, pilih Perbarui peran di bagian ini.

      3. Pilih Buat Peran untuk membuat peran dan menutup kotak dialog.

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

  7. 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.

  8. 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

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

Buka MQTTklien di AWS IoT konsol di jendela baru. Ini akan memungkinkan Anda mengedit aturan tanpa kehilangan konfigurasi MQTT klien Anda. MQTTKlien tidak menyimpan langganan atau log pesan apa pun jika Anda membiarkannya pergi ke halaman lain di konsol.

Untuk menggunakan MQTT klien untuk menguji aturan Anda
  1. Di MQTTklien di AWS IoT konsol, berlangganan topik input, dalam hal ini,device/+/data.

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

    2. Dalam topik Langganan, masukkan topik filter topik masukan,device/+/data.

    3. Simpan sisa bidang di pengaturan defaultnya.

    4. Pilih Berlangganan topik.

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

  2. 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

    2. Simpan sisa bidang di pengaturan defaultnya.

    3. Pilih Berlangganan topik.

      Di kolom Langganan, 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 MQTT topik yang berisi karakter wildcard.

    1. Di MQTT klien, di bawah Langganan, pilih Publikasikan 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 MQTT pesan, pilih Publikasikan ke topik.

  4. Tinjau pesan yang dikirim.

    1. Di MQTT klien, 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.

    2. Di bawah Langganan, pilih perangkat/+/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 } }
    3. Di bawah Langganan, pilih perangkat/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 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.

  5. Jika Anda melihat bahwa pesan yang benar telah dipublikasikan ke topik perangkat/data/temp, 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 topik perangkat/+/data atau perangkat/data/temp, periksa tips pemecahan masalah.

Memecahkan masalah aturan pesan Republish

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 input di MQTT klien

    Setiap kali Anda mempublikasikan pesan masukan Anda ke device/22/data topik, pesan itu akan muncul di MQTT klien 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 MQTT klien, di bawah Langganan, pilih perangkat/+/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 MQTT klien Anda dan aturan yang Anda buat Wilayah AWS

      Konsol tempat Anda menjalankan MQTT klien 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 FROM klausa pernyataan kueri aturan.

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

    • Periksa isi muatan pesan masukan

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

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

      Pastikan bahwa JSON dokumen 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 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 mempublikasikan 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

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

  • Anda membuat aturan yang menerbitkan ulang pesan baru itu.

  • Anda menggunakan MQTT klien 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 Anda mulai.

  • Ubah device_id dalam topik pesan masukan 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 SNS pemberitahuan Amazon.

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.