Menunjukkan berlangganan pesan dengan Klien AWS IoT Perangkat - AWS IoT Core

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

Menunjukkan berlangganan pesan dengan Klien AWS IoT Perangkat

Di bagian ini, Anda akan mendemonstrasikan dua jenis langganan pesan:

  • Langganan topik tunggal

  • Langganan topik Wild-card

Pernyataan kebijakan ini dalam kebijakan yang dibuat untuk latihan ini memberikan izin kepada Raspberry Pi untuk melakukan tindakan ini:

  • iot:Receive

    Memberikan izin kepada Klien AWS IoT Perangkat untuk menerima MQTT topik yang cocok dengan topik yang disebutkan dalam Resource objek.

    { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic" ] }
  • iot:Subscribe

    Memberikan izin Klien AWS IoT Perangkat untuk berlangganan filter MQTT topik yang cocok dengan yang disebutkan dalam Resource objek.

    { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic" ] }

Berlangganan satu topik MQTT pesan

Prosedur ini menunjukkan bagaimana Klien AWS IoT Perangkat dapat berlangganan dan mencatat MQTT pesan.

Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, daftar konten ~/dc-configs/dc-pubsub-custom-config.json atau buka file di editor teks untuk meninjau isinya. Temukan samples objek, yang seharusnya terlihat seperti ini.

"samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "~/messages/sample-ws-message.json", "subscribe-topic": "test/dc/subtopic", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"

Perhatikan bahwa subscribe-topic nilainya adalah MQTT topik di mana Klien AWS IoT Perangkat akan berlangganan saat dijalankan. Klien AWS IoT Perangkat menulis muatan pesan yang diterimanya dari langganan ini ke file yang diberi nama dalam subscribe-file nilai.

Untuk berlangganan topik MQTT pesan dari Klien AWS IoT Perangkat
  1. Pastikan jendela terminal dan jendela dengan klien MQTT pengujian terlihat saat Anda melakukan prosedur ini. Selain itu, pastikan klien MQTT pengujian Anda masih berlangganan filter topik #. Jika tidak, berlangganan filter # topik lagi.

  2. Di jendela terminal, masukkan perintah ini untuk menjalankan AWS IoT Device Client menggunakan file konfigurasi yang dibuat diBuat file konfigurasi.

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json

    Di jendela terminal, Klien AWS IoT Perangkat menampilkan pesan informasi dan kesalahan apa pun yang terjadi saat dijalankan.

    Jika tidak ada kesalahan yang ditampilkan di jendela terminal, lanjutkan di AWS IoT konsol.

  3. Di AWS IoT konsol, di klien MQTT pengujian, pilih tab Publikasikan ke topik.

  4. Dalam nama Topik, masukkan test/dc/subtopic

  5. Di Payload pesan, tinjau isi pesan.

  6. Pilih Publikasikan untuk mempublikasikan MQTT pesan.

  7. Di jendela terminal, perhatikan entri pesan yang diterima dari AWS IoT Device Client yang terlihat seperti ini.

    2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
  8. Setelah Anda melihat entri pesan yang diterima yang menunjukkan pesan diterima, masukkan ^C (Ctrl-C) untuk menghentikan Klien Perangkat AWS IoT .

  9. Masukkan perintah ini untuk melihat akhir file log pesan dan melihat pesan yang Anda terbitkan dari klien MQTT pengujian.

    tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log

Dengan melihat pesan di file log, Anda telah menunjukkan bahwa Klien AWS IoT Perangkat menerima pesan yang Anda terbitkan dari klien MQTT pengujian.

Berlangganan beberapa topik MQTT pesan menggunakan karakter wildcard

Prosedur ini menunjukkan bagaimana Klien AWS IoT Perangkat dapat berlangganan dan mencatat MQTT pesan menggunakan karakter wildcard. Untuk melakukan ini, Anda akan:

  1. Perbarui filter topik yang digunakan Klien AWS IoT Perangkat untuk berlangganan MQTT topik.

  2. Perbarui kebijakan yang digunakan oleh perangkat untuk mengizinkan langganan baru.

  3. Jalankan AWS IoT Device Client dan publikasikan pesan dari konsol MQTT uji.

Untuk membuat file konfigurasi untuk berlangganan beberapa topik MQTT pesan dengan menggunakan filter topik wildcard MQTT
  1. Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, buka ~/dc-configs/dc-pubsub-custom-config.json untuk mengedit dan menemukan samples objek.

  2. Di editor teks, cari samples objek dan perbarui subscribe-topic nilainya agar terlihat seperti ini.

    "samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "~/messages/sample-ws-message.json", "subscribe-topic": "test/dc/#", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"

    subscribe-topicNilai baru adalah filter MQTT topik dengan karakter MQTT wild card di akhir. Ini menjelaskan langganan untuk semua MQTT topik yang dimulai dengantest/dc/. Klien AWS IoT Perangkat menulis muatan pesan yang diterimanya dari langganan ini ke file yang diberi nama. subscribe-file

  3. Simpan file konfigurasi yang dimodifikasi sebagai~/dc-configs/dc-pubsub-wild-config.json, dan keluar dari editor.

Untuk mengubah kebijakan yang digunakan oleh Raspberry Pi Anda untuk mengizinkan berlangganan dan menerima beberapa topik MQTT pesan
  1. Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, di editor teks favorit Anda, buka ~/policies/pubsub_test_thing_policy.json untuk diedit, iot::Subscribe dan kemudian temukan pernyataan dan iot::Receive kebijakan dalam file.

  2. Dalam pernyataan iot::Subscribe kebijakan, perbarui string di objek Resource untuk diganti subtopic*, sehingga terlihat seperti ini.

    { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*" ] }
    catatan

    Karakter wild card filter MQTT topik adalah + (tanda plus) dan # (tanda pound). Permintaan berlangganan dengan # di akhir berlangganan semua topik yang dimulai dengan string yang mendahului # karakter (misalnya, test/dc/ dalam hal ini).

    Nilai sumber daya dalam pernyataan kebijakan yang mengotorisasi langganan ini, bagaimanapun, harus menggunakan * (tanda bintang) sebagai pengganti # (tanda pound) di filter topik. ARN Ini karena prosesor kebijakan menggunakan karakter wild card yang berbeda dari MQTT penggunaan.

    Untuk informasi selengkapnya tentang penggunaan karakter wild card untuk topik dan filter topik dalam kebijakan, lihatMenggunakan karakter wildcard dalam MQTT dan kebijakan AWS IoT Core.

  3. Dalam pernyataan iot::Receive kebijakan, perbarui string di objek Resource untuk diganti subtopic*, sehingga terlihat seperti ini.

    { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*" ] }
  4. Simpan dokumen kebijakan yang diperbarui sebagai~/policies/pubsub_wild_test_thing_policy.json, dan keluar dari editor.

  5. Masukkan perintah ini untuk memperbarui kebijakan tutorial ini untuk menggunakan definisi sumber daya baru.

    aws iot create-policy-version \ --set-as-default \ --policy-name "PubSubTestThingPolicy" \ --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"

    Jika perintah berhasil, ia mengembalikan respons seperti ini. Perhatikan bahwa policyVersionId sekarang2, menunjukkan ini adalah versi kedua dari kebijakan ini.

    Jika Anda berhasil memperbarui kebijakan, Anda dapat melanjutkan ke prosedur berikutnya.

    { "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy", "policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Connect\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Publish\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Subscribe\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Receive\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n ]\n }\n ]\n}\n", "policyVersionId": "2", "isDefaultVersion": true }

    Jika Anda mendapatkan kesalahan bahwa ada terlalu banyak versi kebijakan untuk menyimpan yang baru, masukkan perintah ini untuk mencantumkan versi kebijakan saat ini. Tinjau daftar yang dikembalikan perintah ini untuk menemukan versi kebijakan yang dapat Anda hapus.

    aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"

    Masukkan perintah ini untuk menghapus versi yang tidak lagi Anda butuhkan. Perhatikan bahwa Anda tidak dapat menghapus versi kebijakan default. Versi kebijakan default adalah versi dengan isDefaultVersion nilaitrue.

    aws iot delete-policy-version \ --policy-name "PubSubTestThingPolicy" \ --policy-version-id policyId

    Setelah menghapus versi kebijakan, coba lagi langkah ini.

Dengan file konfigurasi dan kebijakan yang diperbarui, Anda siap mendemonstrasikan langganan wild card dengan AWS IoT Device Client.

Untuk mendemonstrasikan bagaimana Klien AWS IoT Perangkat berlangganan dan menerima beberapa topik MQTT pesan
  1. Di klien MQTT uji, periksa langganan. Jika klien MQTT pengujian berlangganan ke ke dalam filter # topik, lanjutkan ke langkah berikutnya. Jika tidak, di klien MQTT pengujian, di Berlangganan ke tab topik, di Filter topik, masukkan # (karakter tanda pound), lalu pilih Berlangganan untuk berlangganan.

  2. Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, masukkan perintah ini untuk memulai AWS IoT Device Client.

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
  3. Saat menonton output AWS IoT Device Client di jendela terminal di komputer host lokal, kembali ke klien MQTT pengujian. Di tab Publikasikan ke topik, di Nama topik, masukkantest/dc/subtopic, lalu pilih Publikasikan.

  4. Di jendela terminal, konfirmasikan bahwa pesan diterima dengan mencari pesan seperti:

    2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
  5. Saat menonton output AWS IoT Device Client di jendela terminal komputer host lokal, kembali ke klien MQTT pengujian. Di tab Publikasikan ke topik, di Nama topik, masukkantest/dc/subtopic2, lalu pilih Publikasikan.

  6. Di jendela terminal, konfirmasikan bahwa pesan diterima dengan mencari pesan seperti:

    2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
  7. Setelah Anda melihat pesan yang mengonfirmasi kedua pesan diterima, masukkan ^C (Ctrl-C) untuk menghentikan Klien Perangkat AWS IoT .

  8. Masukkan perintah ini untuk melihat akhir file log pesan dan melihat pesan yang Anda terbitkan dari klien MQTT pengujian.

    tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
    catatan

    File log hanya berisi muatan pesan. Topik pesan tidak direkam dalam file log pesan yang diterima.

    Anda mungkin juga melihat pesan yang diterbitkan oleh Klien AWS IoT Perangkat di log yang diterima. Ini karena filter topik wild card mencakup topik pesan itu dan, terkadang, permintaan berlangganan dapat diproses oleh broker pesan sebelum pesan yang dipublikasikan dikirim ke pelanggan.

Entri dalam file log menunjukkan bahwa pesan diterima. Anda dapat mengulangi prosedur ini menggunakan nama topik lain. Semua pesan yang memiliki nama topik yang dimulai dengan test/dc/ harus diterima dan dicatat. Pesan dengan nama topik yang dimulai dengan teks lain diabaikan.

Setelah mendemonstrasikan bagaimana Klien AWS IoT Perangkat dapat mempublikasikan dan berlangganan MQTT pesan, lanjutkan keTutorial: Menunjukkan tindakan jarak jauh (pekerjaan) dengan AWS IoT Device Client.