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 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 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 Anda memulai tutorial ini, pastikan Anda memiliki:
  • Mengatur Akun AWS

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

  • Diulas Lihat pesan MQTT dengan klien MQTT AWS IoT

    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

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

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. Namun, dalam tutorial ini, 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

AWS IoT Aturan yang akan Anda buat dalam tutorial ini berlangganan topik device/device_id/data MQTT di device_id mana 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 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 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. Dalam Menggunakan versi SQL, 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 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

  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 topik MQTT dari 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 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 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 topik MQTT yang berisi karakter wildcard.

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

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

    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 device/data/tempuntuk 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 dipublikasikan ke device/data/temptopik, 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/+/data atau device/data/temptopik, 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 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/+/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

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_id

  • 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 notifikasi Amazon SNS.

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.