Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tutorial: Menghubungkan perangkat ke AWS IoT Core dengan menggunakan AWS IoT SDK Perangkat
Tutorial ini menunjukkan cara menghubungkan perangkat AWS IoT Core sehingga dapat mengirim dan menerima data ke dan dari AWS IoT. Setelah Anda menyelesaikan tutorial ini, perangkat Anda akan dikonfigurasi untuk terhubung AWS IoT Core dan Anda akan memahami bagaimana perangkat berkomunikasi dengannya AWS IoT.
Topik
Pre-requisites
Sebelum memulai tutorial ini, pastikan Anda memiliki:
-
Selesai Memulai dengan AWS IoT Core tutorial
Di bagian tutorial itu di mana Anda harusKonfigurasikan perangkat Anda, pilih Hubungkan Raspberry Pi atau perangkat lain opsi untuk perangkat Anda dan gunakan opsi bahasa Python untuk mengonfigurasi perangkat Anda.
catatan
Tetap buka jendela terminal yang Anda gunakan dalam tutorial itu karena Anda juga akan menggunakannya dalam tutorial ini.
-
Perangkat yang dapat menjalankan AWS IoT Perangkat SDK v2 untuk Python.
Tutorial ini menunjukkan cara menghubungkan perangkat AWS IoT Core dengan menggunakan contoh kode Python, yang memerlukan perangkat yang relatif kuat. Jika Anda bekerja dengan perangkat yang dibatasi sumber daya, contoh kode ini mungkin tidak berfungsi pada perangkat tersebut. Dalam hal ini, Anda mungkin lebih sukses dengan Tutorial: Menggunakan AWS IoT Device SDK for Embedded C tutorial.
-
Memperoleh informasi yang diperlukan untuk terhubung ke perangkat
Untuk menghubungkan perangkat Anda AWS IoT, Anda harus memiliki informasi tentang nama benda, nama host, dan nomor port.
catatan
Anda juga dapat menggunakan otentikasi khusus untuk menghubungkan perangkat ke AWS IoT Core. Data koneksi yang Anda berikan ke fungsi Lambda otorizer Anda tergantung pada protokol yang Anda gunakan.
-
Nama benda: Nama AWS IoT benda yang ingin Anda sambungkan. Anda harus terdaftar sebagai perangkat Anda sebagai AWS IoT sesuatu. Untuk informasi selengkapnya, lihat Mengelola perangkat dengan AWS IoT.
-
Nama host: Nama host untuk titik akhir IoT khusus akun.
-
Nomor port: Nomor port untuk dihubungkan.
Anda dapat menggunakan
configureEndpointmetode di AWS IoT Python SDK untuk mengkonfigurasi nama host dan nomor port.myAWSIoTMQTTClient.configureEndpoint("random.iot.region.amazonaws.com", 8883) -
Siapkan perangkat Anda untuk AWS IoT
DiMemulai dengan AWS IoT Core tutorial, Anda menyiapkan perangkat dan AWS akun Anda sehingga mereka dapat berkomunikasi. Bagian ini meninjau aspek-aspek persiapan yang berlaku untuk koneksi perangkat apa pun dengan AWS IoT Core.
Untuk perangkat untuk terhubung ke AWS IoT Core:
-
Anda harus memiliki Akun AWS.
Prosedur di dalam Penyiapan Akun AWS menjelaskan cara membuat Akun AWS jika Anda belum memilikinya.
-
Di akun itu, Anda harus memiliki AWS IoT sumber daya berikut yang ditentukan untuk perangkat di Akun AWS dan Wilayah Anda.
Prosedur dalam Buat AWS IoT sumber daya menjelaskan cara membuat sumber daya ini untuk perangkat di Akun AWS dan Wilayah Anda.
-
Sertifikat perangkat yang terdaftar AWS IoT dan diaktifkan untuk mengotentikasi perangkat.
Sertifikat sering dibuat dengan, dan dilampirkan pada, objek AWS IoT benda. Meskipun objek benda tidak diperlukan untuk terhubung ke perangkat AWS IoT, itu membuat AWS IoT fitur tambahan tersedia untuk perangkat.
-
Kebijakan yang dilampirkan ke sertifikat perangkat yang mengizinkannya untuk terhubung ke AWS IoT Core dan melakukan semua tindakan yang Anda inginkan.
-
-
Koneksi internet yang dapat mengakses titik Akun AWS akhir perangkat Anda.
Titik akhir perangkat dijelaskan di AWS IoT data perangkat dan titik akhir layanan dan dapat dilihat di halaman pengaturan AWS IoT konsol
. -
Perangkat lunak komunikasi seperti AWS IoT Device SDK menyediakan. Tutorial ini menggunakan AWS IoT Device SDK v2 untuk Python
.
Tinjau protokol MQTT
Sebelum kita berbicara tentang aplikasi sampel, ada baiknya untuk memahami protokol MQTT. Protokol MQTT menawarkan beberapa keunggulan dibandingkan protokol komunikasi jaringan lainnya, seperti HTTP, yang menjadikannya pilihan populer untuk 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.
MQTT menggunakan model publish/subscribe komunikasi
Protokol MQTT menggunakan model publish/subscribe komunikasi dengan hostnya. Model ini berbeda dari request/response model yang digunakan HTTP. Dengan MQTT, perangkat membuat sesi dengan host yang diidentifikasi oleh ID klien unik. Untuk mengirim data, perangkat menerbitkan pesan yang diidentifikasi oleh topik ke broker pesan di host. Untuk menerima pesan dari broker pesan, perangkat berlangganan topik dengan mengirimkan filter topik dalam permintaan berlangganan ke broker pesan.
MQTT mendukung sesi persisten
Broker pesan menerima pesan dari perangkat dan menerbitkan pesan ke perangkat yang telah berlangganan. Dengan sesi persisten — sesi yang tetap aktif bahkan ketika perangkat penginisial terputus — perangkat dapat mengambil pesan yang dipublikasikan saat terputus. Di sisi perangkat, MQTT mendukung tingkat Kualitas Layanan (QoS) yang memastikan host menerima pesan yang dikirim oleh perangkat.
Tinjau aplikasi contoh SDK Perangkat pubsub.py
Bagian ini meninjau pubsub.py contoh aplikasi dari AWS IoT Device SDK v2 untuk Python yang digunakan dalam tutorial ini. Di sini, kami akan meninjau bagaimana terhubung AWS IoT Core untuk menerbitkan dan berlangganan pesan MQTT. Bagian selanjutnya menyajikan beberapa latihan untuk membantu Anda menjelajahi bagaimana perangkat terhubung dan berkomunikasi dengannya AWS IoT Core.
Aplikasi pubsub.py sampel menunjukkan aspek-aspek ini dari koneksi MQTT dengan: AWS IoT Core
Protokol komunikasi
Sam pubsub.py pel menunjukkan koneksi MQTT menggunakan protokol MQTT dan MQTT melalui WSS. P AWS ustaka runtime umum (AWS CRT)
MQTT
Sam pubsub.py pel panggilan mtls_from_path (ditampilkan di sini) mqtt_connection_buildermtls_from_pathmenggunakan X.509 sertifikat dan TLS v1.2 untuk mengotentikasi perangkat. Pust AWS aka CRT menangani detail tingkat yang lebih rendah dari koneksi itu.
mqtt_connection = mqtt_connection_builder.mtls_from_path( endpoint=args.endpoint, cert_filepath=args.cert, pri_key_filepath=args.key, ca_filepath=args.ca_file, client_bootstrap=client_bootstrap, on_connection_interrupted=on_connection_interrupted, on_connection_resumed=on_connection_resumed, client_id=args.client_id, clean_session=False, keep_alive_secs=6 )
endpointT Akun AWS itik akhir perangkat IoT Anda
Dalam aplikasi sampel, nilai ini diteruskan dari baris perintah.
cert_filepathJalur ke file sertifikat perangkat
Dalam aplikasi sampel, nilai ini diteruskan dari baris perintah.
pri_key_filepathJalur ke file kunci pribadi perangkat yang dibuat dengan file sertifikatnya
Dalam aplikasi sampel, nilai ini diteruskan dari baris perintah.
ca_filepathJalur ke file CA Root. Diperlukan hanya jika server MQTT menggunakan sertifikat yang belum ada di toko kepercayaan Anda.
Dalam aplikasi sampel, nilai ini diteruskan dari baris perintah.
client_bootstrapObjek runtime umum yang menangani aktivitas komunikasi soket
Di aplikasi sampel, objek ini dibuat instansiasi sebelum panggilan ke.
mqtt_connection_builder.mtls_from_pathon_connection_interruptedon_connection_resumedFungsi panggilan balik untuk menelepon saat koneksi perangkat terputus dan dilanjutkan
client_idID yang secara unik mengidentifikasi perangkat ini di Wilayah AWS
Dalam aplikasi sampel, nilai ini diteruskan dari baris perintah.
clean_sessionApakah akan memulai sesi persisten baru, atau, jika ada, sambungkan kembali ke sesi yang sudah ada
keep_alive_secsNilai keep alive, dalam hitungan detik, untuk mengirimkan
CONNECTpermintaan. Ping akan secara otomatis dikirim pada interval ini. Jika server tidak menerima ping setelah 1,5 kali nilai ini, itu mengasumsikan bahwa koneksi terputus.
MQTT tentang WSS
Sam pubsub.py pel panggilan websockets_with_default_aws_signing (ditampilkan di sini) mqtt_connection_builderwebsockets_with_default_aws_signingmembuat koneksi MQTT melalui WSS menggunakan Signature V4 untuk mengotentikasi perangkat.
mqtt_connection = mqtt_connection_builder.websockets_with_default_aws_signing( endpoint=args.endpoint, client_bootstrap=client_bootstrap, region=args.signing_region, credentials_provider=credentials_provider, websocket_proxy_options=proxy_options, ca_filepath=args.ca_file, on_connection_interrupted=on_connection_interrupted, on_connection_resumed=on_connection_resumed, client_id=args.client_id, clean_session=False, keep_alive_secs=6 )
endpointT Akun AWS itik akhir perangkat IoT Anda
Dalam aplikasi sampel, nilai ini diteruskan dari baris perintah.
client_bootstrapObjek runtime umum yang menangani aktivitas komunikasi soket
Di aplikasi sampel, objek ini dibuat instansiasi sebelum panggilan ke.
mqtt_connection_builder.websockets_with_default_aws_signingregionWilayah pen AWS andatanganan yang digunakan oleh otentikasi Signature V4. Di
pubsub.py, ia melewati parameter yang dimasukkan di baris perintah.Dalam aplikasi sampel, nilai ini diteruskan dari baris perintah.
credentials_providerKreden AWS SIAL yang disediakan untuk digunakan untuk otentikasi
Di aplikasi sampel, objek ini dibuat instansiasi sebelum panggilan ke.
mqtt_connection_builder.websockets_with_default_aws_signingwebsocket_proxy_optionsOpsi proxy HTTP, jika menggunakan host proxy
Di aplikasi sampel, nilai ini diinisialisasi sebelum panggilan ke
mqtt_connection_builder.websockets_with_default_aws_signing.ca_filepathJalur ke file CA Root. Diperlukan hanya jika server MQTT menggunakan sertifikat yang belum ada di toko kepercayaan Anda.
Dalam aplikasi sampel, nilai ini diteruskan dari baris perintah.
on_connection_interruptedon_connection_resumedFungsi panggilan balik untuk menelepon saat koneksi perangkat terputus dan dilanjutkan
client_idID yang secara unik mengidentifikasi perangkat ini di Wilayah AWS.
Dalam aplikasi sampel, nilai ini diteruskan dari baris perintah.
clean_sessionApakah akan memulai sesi persisten baru, atau, jika ada, sambungkan kembali ke sesi yang sudah ada
keep_alive_secsNilai keep alive, dalam hitungan detik, untuk mengirimkan
CONNECTpermintaan. Ping akan secara otomatis dikirim pada interval ini. Jika server tidak menerima ping setelah 1,5 kali nilai ini, itu mengasumsikan koneksi terputus.
HTTPS
Bagaimana dengan HTTPS? AWS IoT Core mendukung perangkat yang mempublikasikan permintaan HTTPS. Dari perspektif pemrograman, perangkat mengirim permintaan HTTPS AWS IoT Core seperti halnya aplikasi lainnya. Untuk contoh program Python yang mengirim pesan HTTP dari perangkat, lihat contoh kode HTTPS menggunakan pustaka Python. requests Contoh ini mengirimkan pesan untuk AWS IoT Core menggunakan HTTPS sehingga menafsir AWS IoT Core kannya sebagai pesan MQTT.
Meskipun AWS IoT Core mendukung permintaan HTTPS dari perangkat, pastikan untuk meninjau informasi tentang Memilih protokol aplikasi untuk komunikasi perangkat Anda sehingga Anda dapat membuat keputusan berdasarkan informasi tentang protokol mana yang akan digunakan untuk komunikasi perangkat Anda.
Sesi persisten
Di aplikasi sampel, atur clean_session parameter untuk False menunjukkan bahwa koneksi harus persisten. Dalam praktiknya, ini berarti bahwa koneksi yang dibuka oleh panggilan ini terhubung kembali ke sesi persisten yang ada, jika ada. Jika tidak, itu membuat dan menghubungkan ke sesi persisten baru.
Dengan sesi persisten, pesan yang dikirim ke perangkat disimpan oleh broker pesan saat perangkat tidak terhubung. Ketika perangkat terhubung kembali ke sesi persisten, broker pesan mengirimkan ke perangkat pesan tersimpan yang telah berlangganan.
Tanpa sesi persisten, perangkat tidak akan menerima pesan yang dikirim saat perangkat tidak terhubung. Opsi mana yang akan digunakan tergantung pada aplikasi Anda dan apakah pesan yang terjadi saat perangkat tidak terhubung harus dikomunikasikan. Untuk informasi selengkapnya, lihat Sesi persisten MQTT.
Kualitas Pelayanan
Ketika perangkat menerbitkan dan berlangganan pesan, Kualitas Layanan (QoS) yang disukai dapat diatur. AWS IoT mendukung tingkat QoS 0 dan 1 untuk operasi publikasi dan berlangganan. Untuk informasi selengkapnya tentang level QoS di AWS IoT, lihatOpsi Kualitas Layanan (QoS) MQTT.
Runtime AWS CRT untuk Python mendefinisikan konstanta ini untuk level QoS yang didukungnya:
| Tingkat QoS MQTT | Nilai simbolis Python yang digunakan oleh SDK | Deskripsi |
|---|---|---|
| Tingkat QoS 0 | mqtt.QoS.AT_MOST_ONCE |
Hanya satu upaya untuk mengirim pesan yang akan dilakukan, apakah itu diterima atau tidak. Pesan mungkin tidak dikirim sama sekali, misalnya, jika perangkat tidak terhubung atau ada kesalahan jaringan. |
| Tingkat QoS 1 | mqtt.QoS.AT_LEAST_ONCE |
Pesan dikirim berulang kali sampai PUBACK konfirmasi diterima. |
Dalam aplikasi contoh, permintaan publikasi dan berlangganan dibuat dengan tingkat QoS 1 (mqtt.QoS.AT_LEAST_ONCE).
-
QoS saat dipublikasikan
Ketika perangkat menerbitkan pesan dengan QoS level 1, ia mengirim pesan berulang kali hingga menerima
PUBACKrespons dari broker pesan. Jika perangkat tidak terhubung, pesan akan diantri untuk dikirim setelah terhubung kembali. -
QoS saat berlangganan
Ketika perangkat berlangganan pesan dengan QoS level 1, broker pesan menyimpan pesan yang berlangganan perangkat hingga dapat dikirim ke perangkat. Pialang pesan mengirim ulang pesan sampai menerima
PUBACKrespons dari perangkat.
Pesan dipublikasikan
Setelah berhasil membuat koneksi ke AWS IoT Core, perangkat dapat mempublikasikan pesan. Sam pubsub.py pel melakukan ini dengan memanggil publish operasi mqtt_connection objek.
mqtt_connection.publish( topic=args.topic, payload=message, qos=mqtt.QoS.AT_LEAST_ONCE )
topicNama topik pesan yang mengidentifikasi pesan
Di aplikasi sampel, ini diteruskan dari baris perintah.
payloadPayload pesan diformat sebagai string (misalnya, dokumen JSON)
Di aplikasi sampel, ini diteruskan dari baris perintah.
Dokumen JSON adalah format payload umum, dan salah satu yang dikenali oleh AWS IoT layanan lain; Namun, format data dari payload pesan dapat berupa apa pun yang disetujui oleh penerbit dan pelanggan. AWS IoT Layanan lain, bagaimanapun, hanya mengenali JSON, dan CBOR, dalam beberapa kasus, untuk sebagian besar operasi.
qosTingkat QoS untuk pesan ini
Berlangganan pesan
Untuk menerima pesan dari AWS IoT dan layanan dan perangkat lain, perangkat berlangganan pesan tersebut dengan nama topiknya. Perangkat dapat berlangganan pesan individual dengan menentukan nama topik, dan ke grup pesan dengan menentukan filter topik, yang dapat menyertakan karakter wild card. Sam pubsub.py pel menggunakan kode yang ditunjukkan di sini untuk berlangganan pesan dan mendaftarkan fungsi panggilan balik untuk memproses pesan setelah diterima.
subscribe_future, packet_id = mqtt_connection.subscribe( topic=args.topic, qos=mqtt.QoS.AT_LEAST_ONCE, callback=on_message_received ) subscribe_result = subscribe_future.result()
topicTopik untuk berlangganan. Ini bisa berupa nama topik atau filter topik.
Di aplikasi sampel, ini diteruskan dari baris perintah.
qosApakah broker pesan harus menyimpan pesan-pesan ini saat perangkat terputus.
Nilai
mqtt.QoS.AT_LEAST_ONCE(tingkat QoS 1), memerlukan sesi persisten untuk ditentukan (clean_session=False) saat koneksi dibuat.callbackFungsi untuk memanggil untuk memproses pesan berlangganan.
mqtt_connection.subscribeFungsi mengembalikan masa depan dan ID paket. Jika permintaan langganan berhasil dimulai, ID paket yang dikembalikan lebih besar dari 0. Untuk memastikan bahwa langganan diterima dan didaftarkan oleh broker pesan, Anda harus menunggu hasil operasi asinkron kembali, seperti yang ditunjukkan pada contoh kode.
Fungsi callback
Panggilan balik dalam pubsub.py sampel memproses pesan berlangganan saat perangkat menerimanya.
def on_message_received(topic, payload, **kwargs): print("Received message from topic '{}': {}".format(topic, payload)) global received_count received_count += 1 if received_count == args.count: received_all_event.set()
topic-
Topik pesan
Ini adalah nama topik spesifik dari pesan yang diterima, bahkan jika Anda berlangganan filter topik.
payload-
Muatan pesan
Format untuk ini adalah khusus aplikasi.
kwargsKemungkinan argumen tambahan seperti yang dijelaskan dalam
mqtt.Connection.subscribe.
Dalam pubsub.py sampel, on_message_received hanya menampilkan topik dan muatannya. Ini juga menghitung pesan yang diterima untuk mengakhiri program setelah batas tercapai.
Aplikasi Anda akan mengevaluasi topik dan payload untuk menentukan tindakan apa yang harus dilakukan.
Pemutusan perangkat dan koneksi ulang
Sam pubsub.py pel mencakup fungsi panggilan balik yang dipanggil ketika perangkat terputus dan ketika koneksi dibangun kembali. Tindakan apa yang dilakukan perangkat Anda pada peristiwa ini adalah spesifik aplikasi.
Saat perangkat terhubung untuk pertama kalinya, perangkat harus berlangganan topik untuk menerima. Jika sesi perangkat hadir saat terhubung kembali, langganannya dipulihkan, dan pesan yang disimpan dari langganan tersebut dikirim ke perangkat setelah terhubung kembali.
Jika sesi perangkat tidak ada lagi saat terhubung kembali, perangkat harus berlangganan ulang ke langganannya. Sesi persisten memiliki masa pakai terbatas dan dapat kedaluwarsa ketika perangkat terputus terlalu lama.
Hubungkan perangkat Anda dan berkomunikasi dengan AWS IoT Core
Bagian ini menyajikan beberapa latihan untuk membantu Anda menjelajahi berbagai aspek menghubungkan perangkat Anda ke AWS IoT Core. Untuk latihan ini, Anda akan menggunakan klien uji MQTT pubsub.py
Di bagian ini, Anda akan:
Untuk latihan ini, Anda akan mulai dari program pubsub.py sampel.
catatan
Latihan-latihan ini mengasumsikan bahwa Anda menyelesaikan Memulai dengan AWS IoT Core tutorial tutorial dan menggunakan jendela terminal untuk perangkat Anda dari tutorial itu.
Berlangganan filter topik wild card
Dalam latihan ini, Anda akan memodifikasi baris perintah yang digunakan pubsub.py untuk memanggil untuk berlangganan filter topik wild card dan memproses pesan yang diterima berdasarkan topik pesan.
Prosedur latihan
Untuk latihan ini, bayangkan perangkat Anda berisi kontrol suhu dan kontrol cahaya. Ini menggunakan nama-nama topik ini untuk mengidentifikasi pesan tentang mereka.
-
Sebelum memulai latihan, coba jalankan perintah ini dari Memulai dengan AWS IoT Core tutorial tutorial di perangkat Anda untuk memastikan semuanya siap untuk latihan.
cd ~/aws-iot-device-sdk-python-v2/samples python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpointyour-iot-endpointAnda akan melihat output yang sama seperti yang Anda lihat di tutorial Mem ulai.
-
Untuk latihan ini, ubah parameter baris perintah ini.
Tindakan
Parameter baris perintah
Efek
tambahkan
--message
""Konfigur
pubsub.pyasikan untuk mendengarkan sajatambahkan
--count
2Akhiri program setelah menerima dua pesan
perubahan
--topic
device/+/detailsTentukan filter topik untuk berlangganan
Membuat perubahan ini pada baris perintah awal menghasilkan baris perintah ini. Masukkan perintah ini di jendela terminal untuk perangkat Anda.
python3 pubsub.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpointyour-iot-endpointProgram harus menampilkan sesuatu seperti ini:
Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-24d7cdcc-cc01-458c-8488-2d05849691e1'... Connected! Subscribing to topic 'device/+/details'... Subscribed with QoS.AT_LEAST_ONCE Waiting for all messages to be received...Jika Anda melihat sesuatu seperti ini di terminal Anda, perangkat Anda siap dan mendengarkan pesan di mana nama topik dimulai
devicedan diakhiri dengan/detail. Jadi, mari kita uji itu. -
Berikut adalah beberapa pesan yang mungkin diterima perangkat Anda.
Nama topik
Payload pesan
device/temp/details{ "desiredTemp": 20, "currentTemp": 15 }device/light/details{ "desiredLight": 100, "currentLight": 50 } -
Menggunakan klien uji MQTT di AWS IoT konsol, kirim pesan yang dijelaskan pada langkah sebelumnya ke perangkat Anda.
-
Buka klien uji MQTT
di AWS IoT konsol. -
Di Berlangganan topik, di bidang Topik langganan, masukkan filter topik:
device/+/details, lalu pilih Berlangganan topik. -
Di kolom Lang ganan klien uji MQTT, pilih perangkat/+/detail.
-
Untuk setiap topik dalam tabel sebelumnya, lakukan hal berikut di klien uji MQTT:
-
Di Publi kasikan, masukkan nilai dari kolom nama topik dalam tabel.
-
Di bidang payload pesan di bawah nama topik, masukkan nilai dari kolom payload pesan dalam tabel.
-
Perhatikan jendela terminal tempat
pubsub.pyberjalan dan, di klien uji MQTT, pilih Publikasikan ke topik.
Anda harus melihat bahwa pesan diterima
pubsub.pydi jendela terminal. -
-
Hasil latihan
Dengan ini,pubsub.py, berlangganan pesan menggunakan filter topik wild card, menerimanya, dan menampilkannya di jendela terminal. Perhatikan bagaimana Anda berlangganan filter topik tunggal, dan fungsi callback dipanggil untuk memproses pesan yang memiliki dua topik berbeda.
Memproses langganan filter topik
Berdasarkan latihan sebelumnya, ubah pubsub.py contoh aplikasi untuk mengevaluasi topik pesan dan memproses pesan berlangganan berdasarkan topik.
Prosedur latihan
Untuk mengevaluasi topik pesan
-
Salin
pubsub.pykepubsub2.py. -
Buka
pubsub2.pydi editor teks favorit Anda atau IDE. -
Di dalam
pubsub2.py, temukan fungon_message_receivedsinya. -
Di
on_message_received, masukkan kode berikut setelah baris yang dimulai denganprint("Received messagedan sebelum baris yang dimulai denganglobal received_count.topic_parsed = False if "/" in topic: parsed_topic = topic.split("/") if len(parsed_topic) == 3: # this topic has the correct format if (parsed_topic[0] == 'device') and (parsed_topic[2] == 'details'): # this is a topic we care about, so check the 2nd element if (parsed_topic[1] == 'temp'): print("Received temperature request: {}".format(payload)) topic_parsed = True if (parsed_topic[1] == 'light'): print("Received light request: {}".format(payload)) topic_parsed = True if not topic_parsed: print("Unrecognized message topic.") -
Simpan perubahan Anda dan jalankan program yang dimodifikasi dengan menggunakan baris perintah ini.
python3 pubsub2.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpointyour-iot-endpoint -
Di AWS IoT konsol, buka klien uji
MQTT. -
Di Berlangganan topik, di bidang Topik langganan, masukkan filter topik:
device/+/details, lalu pilih Berlangganan topik. -
Di kolom Lang ganan klien uji MQTT, pilih perangkat/+/detail.
-
Untuk setiap topik dalam tabel ini, lakukan hal berikut di klien uji MQTT:
Nama topik
Payload pesan
device/temp/details{ "desiredTemp": 20, "currentTemp": 15 }device/light/details{ "desiredLight": 100, "currentLight": 50 }-
Di Publi kasikan, masukkan nilai dari kolom nama topik dalam tabel.
-
Di bidang payload pesan di bawah nama topik, masukkan nilai dari kolom payload pesan dalam tabel.
-
Perhatikan jendela terminal tempat
pubsub.pyberjalan dan, di klien uji MQTT, pilih Publikasikan ke topik.
Anda harus melihat bahwa pesan diterima
pubsub.pydi jendela terminal. -
Anda akan melihat sesuatu yang mirip dengan ini di jendela terminal Anda.
Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-af794be0-7542-45a0-b0af-0b0ea7474517'... Connected! Subscribing to topic 'device/+/details'... Subscribed with QoS.AT_LEAST_ONCE Waiting for all messages to be received... Received message from topic 'device/light/details': b'{ "desiredLight": 100, "currentLight": 50 }' Received light request: b'{ "desiredLight": 100, "currentLight": 50 }' Received message from topic 'device/temp/details': b'{ "desiredTemp": 20, "currentTemp": 15 }' Received temperature request: b'{ "desiredTemp": 20, "currentTemp": 15 }' 2 message(s) received. Disconnecting... Disconnected!
Hasil latihan
Dalam latihan ini, Anda menambahkan kode sehingga aplikasi sampel akan mengenali dan memproses beberapa pesan dalam fungsi callback. Dengan ini, perangkat Anda dapat menerima pesan dan menindaklanjutinya.
Cara lain bagi perangkat Anda untuk menerima dan memproses beberapa pesan adalah dengan berlangganan pesan yang berbeda secara terpisah dan menetapkan setiap langganan ke fungsi panggilan balinya sendiri.
Publikasikan pesan dari perangkat Anda
Anda dapat menggunakan aplikasi contoh pubsub.py untuk mempublikasikan pesan dari perangkat Anda. Meskipun akan mempublikasikan pesan apa adanya, pesan tidak dapat dibaca sebagai dokumen JSON. Latihan ini memodifikasi aplikasi contoh agar dapat menerbitkan dokumen JSON dalam payload pesan yang dapat dibaca oleh. AWS IoT Core
Prosedur latihan
Dalam latihan ini, pesan berikut akan dikirim dengan device/data topik.
{ "timestamp": 1601048303, "sensorId": 28, "sensorData": [ { "sensorName": "Wind speed", "sensorValue": 34.2211224 } ] }
Untuk mempersiapkan klien uji MQTT Anda untuk memantau pesan dari latihan ini
-
Di Berlangganan topik, di bidang Topik langganan, masukkan filter topik:
device/data, lalu pilih Berlangganan topik. -
Di kolom Langganan klien uji MQTT, pilih device/data.
-
Biarkan jendela klien uji MQTT terbuka untuk menunggu pesan dari perangkat Anda.
Untuk mengirim dokumen JSON dengan aplikasi sampel pubsub.py
-
Di perangkat Anda, salin
pubsub.pykepubsub3.py. -
Edit
pubsub3.pyuntuk mengubah cara memformat pesan yang diterbitkannya.-
Buka
pubsub3.pydi editor teks. -
Temukan baris kode ini:
message = "{} [{}]".format(message_string, publish_count) -
Ubah menjadi:
message = "{}".format(message_string) -
Temukan baris kode ini:
message_json = json.dumps(message) -
Ubah menjadi:
message = "{}".json.dumps(json.loads(message)) -
Simpan perubahan Anda.
-
-
Di perangkat Anda, jalankan perintah ini untuk mengirim pesan dua kali.
python3 pubsub3.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --topic device/data --count 2 --message '{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' --endpointyour-iot-endpoint -
Di klien uji MQTT, periksa untuk melihat apakah ia telah menafsirkan dan memformat dokumen JSON dalam payload pesan, seperti ini:
Secara default, pubsub3.py juga berlangganan pesan yang dikirimkannya. Anda akan melihat bahwa ia menerima pesan dalam output aplikasi. Jendela terminal akan terlihat seperti ini.
Connecting to a3qEXAMPLEsffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-5cff18ae-1e92-4c38-a9d4-7b9771afc52f'... Connected! Subscribing to topic 'device/data'... Subscribed with QoS.AT_LEAST_ONCE Sending 2 message(s) Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]} Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]} Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' 2 message(s) received. Disconnecting... Disconnected!
Hasil latihan
Dengan ini, perangkat Anda dapat menghasilkan pesan untuk dikirim AWS IoT Core untuk menguji konektivitas dasar dan menyediakan pesan perangkat AWS IoT Core untuk diproses. Misalnya, Anda dapat menggunakan aplikasi ini untuk mengirim data pengujian dari perangkat Anda untuk menguji tindakan AWS IoT aturan.
Tinjau hasilnya
Contoh-contoh dalam tutorial ini memberi Anda pengalaman langsung dengan dasar-dasar bagaimana perangkat dapat berkomunikasi dengan AWS IoT Core—bagian mendasar dari AWS IoT solusi Anda. Ketika perangkat Anda dapat berkomunikasi AWS IoT Core, mereka dapat meneruskan pesan ke AWS layanan dan perangkat lain tempat mereka dapat bertindak. Demikian juga, AWS layanan dan perangkat lain dapat memproses informasi yang menghasilkan pesan yang dikirim kembali ke perangkat Anda.
Ketika Anda siap untuk menjelajah AWS IoT Core lebih lanjut, cobalah tutorial ini: