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.
Dalam tutorial ini, Anda akan:
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/ MQTT di mana device_id/datadevice_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
-
Di Aturan, pilih Buat dan mulai membuat aturan baru Anda.
-
Di bagian atas Buat aturan:
-
Di Nama, masukkan nama aturan. Untuk tutorial ini, beri nama
republish_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.
-
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.
-
-
Dalam pernyataan kueri aturan Buat aturan:
-
Di Menggunakan versi SQL, pilih
2016-03-23. -
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/+/datatopik. -
Memilih elemen kedua dari string topik dan menetapkannya ke
device_idbidang. -
Memilih
temperaturebidang nilai dari payload pesan dan menetapkannya ke bidang.temperature
-
-
-
Dalam Mengatur satu atau lebih tindakan:
-
Untuk membuka daftar tindakan aturan untuk aturan ini, pilih Tam bah tindakan.
-
Di Pilih tindakan, pilih Publi kasikan ulang pesan ke AWS IoT topik.
-
Di bagian bawah daftar tindakan, pilih Konfigurasi tindakan untuk membuka halaman konfigurasi tindakan yang dipilih.
-
-
Dalam tindakan Konfigurasi:
-
Di Topik, masukkan
device/data/temp. Ini adalah topik MQTT dari pesan yang akan diterbitkan aturan ini. -
Di Kualitas Layanan, pilih 0 - Pesan dikirimkan nol kali atau lebih.
-
Di Pilih atau buat peran untuk memberikan AWS IoT akses untuk melakukan tindakan ini:
-
Pilih Buat Peran. Ko tak dialog Buat peran baru terbuka.
-
Masukkan nama yang menggambarkan peran baru. Dalam tutorial ini, gunakan
republish_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.
-
Pilih Buat Per an untuk membuat peran dan menutup kotak dialog.
-
-
Pilih Tam bah tindakan untuk menambahkan tindakan ke aturan dan kembali ke halaman Buat aturan.
-
-
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.
-
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
Untuk menggunakan klien MQTT untuk menguji aturan Anda
-
Di klien MQTT di AWS IoT konsol
, berlangganan topik input, dalam hal ini, device/+/data.-
Di klien MQTT, di bawah Lang ganan, pilih Berlangganan ke topik.
-
Di Topik berlangganan, masukkan topik filter topik masukan,
device/+/data. -
Simpan sisa bidang pada pengaturan defaultnya.
-
Pilih Berlangganan topik.
Di kolom Langganan, di bawah Publikasikan ke topik,
device/+/datamuncul.
-
-
Berlangganan topik yang akan diterbitkan aturan Anda:
device/data/temp.-
Di bawah Lang ganan, pilih Ber langganan ke topik lagi, dan di Topik langganan, masukkan topik pesan yang diterbitkan ulang,
device/data/temp. -
Simpan sisa bidang pada pengaturan defaultnya.
-
Pilih Berlangganan topik.
Di kolom Lang ganan, di bawah perangkat /+/data, muncul.
device/data/temp
-
-
Publikasikan pesan ke topik input dengan ID perangkat tertentu,
device/22/data. Anda tidak dapat mempublikasikan ke topik MQTT yang berisi karakter wildcard.-
Di klien MQTT, di bawah Lang ganan, pilih Publi kasikan ke topik.
-
Di bidang Publikasikan, masukkan nama topik masukan,
device/22/data. -
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 } } -
Untuk mengirim pesan MQTT Anda, pilih Publi kasikan ke topik.
-
-
Tinjau pesan yang dikirim.
-
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.
-
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 } } -
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_idainya adalah string yang dikutip dan niltemperatureainya numerik. Ini karenatopic()fungsi mengekstrak string dari nama topik pesan input sementara nilainya menggunakantemperaturenilai numerik dari payload pesan input.Jika Anda ingin menjadikan nilai
device_idsebagai nilai numerik, gantitopic(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.
-
-
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/datatopik, pesan itu akan muncul di klien MQTT jika Anda berlangganan filterdevice/+/datatopik 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
temperaturebidang dalam pernyataan kueri aturan dengan payload pesan di klien MQTT. Nama bidang peka huruf besar/kecil dantemperaturebidang dalam pernyataan kueri aturan harus identik dengantemperaturebidang 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_idtopik 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.