View a markdown version of this page

Mensimulasikan komunikasi layanan Device Shadow - AWS IoT Core

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

Mensimulasikan komunikasi layanan Device Shadow

Topik ini menunjukkan bagaimana layanan Device Shadow bertindak sebagai perantara dan memungkinkan perangkat dan aplikasi menggunakan bayangan untuk memperbarui, menyimpan, dan mengambil status perangkat.

Untuk mendemonstrasikan interaksi yang dijelaskan dalam topik ini, dan untuk menjelajahinya lebih lanjut, Anda memerlukan sistem Akun AWS dan sistem di mana Anda dapat menjalankannya AWS CLI. Jika Anda tidak memilikinya, Anda masih dapat melihat interaksi dalam contoh kode.

Dalam contoh ini, AWS IoT konsol mewakili perangkat. Ini AWS CLI mewakili aplikasi atau layanan yang mengakses perangkat melalui bayangan. AWS CLI Antarmukanya sangat mirip dengan API yang mungkin digunakan aplikasi untuk berkomunikasi dengannya AWS IoT. Perangkat dalam contoh ini adalah bola lampu pintar dan aplikasi menampilkan status bola lampu dan dapat mengubah status bola lampu.

Menyiapkan simulasi

Prosedur ini menginisialisasi simulasi dengan membuka AWS IoT konsol, yang mensimulasikan perangkat Anda, dan jendela baris perintah yang mensimulasikan aplikasi Anda.

Untuk mengatur lingkungan simulasi Anda
  1. Anda akan memerlukan Akun AWS untuk menjalankan contoh dari topik ini sendiri. Jika Anda tidak memilikinya Akun AWS, buat satu, seperti yang dijelaskan diPenyiapan Akun AWS.

  2. Buka AWS IoT konsol, dan di menu kiri, pilih U ji untuk membuka klien M QTT.

  3. Di jendela lain, buka jendela terminal pada sistem yang telah AWS CLI diinstal di atasnya.

Anda harus memiliki dua jendela terbuka: satu dengan AWS IoT konsol di halaman Tes, dan satu dengan prompt baris perintah.

Inisialisasi perangkat

Dalam simulasi ini, kita akan bekerja dengan objek benda bernama, my SimulatedThing, dan bayangannya bernama, SimShad ow1.

Buat objek benda dan kebijakan IoT-nya

Untuk membuat objek sesuatu, di Kon AWS IoT sol:

  1. Pilih Kelola dan kemudian pilih Th ings.

  2. Klik tombol Buat jika hal-hal terdaftar atau klik Daftarkan satu hal untuk membuat satu AWS IoT hal.

  3. Masukkan namamySimulatedThing, biarkan pengaturan lain menjadi default, lalu klik Ber ikutnya.

  4. Gunakan pembuatan sertifikat sekali klik untuk menghasilkan sertifikat yang akan mengotentikasi koneksi perangkat ke. AWS IoT Klik Akti fkan untuk mengaktifkan sertifikat.

  5. Anda dapat melampirkan kebijakan My_IoT_Policy yang akan memberikan izin perangkat untuk mempublikasikan dan berlangganan topik yang dicadangkan MQTT. Untuk langkah lebih rinci tentang cara membuat AWS IoT sesuatu dan cara membuat kebijakan ini, lihatBuat objek benda.

Buat bayangan bernama untuk objek benda

Anda dapat membuat bayangan bernama untuk sesuatu dengan menerbitkan permintaan pembaruan ke topik $aws/things/mySimulatedThing/shadow/name/simShadow1/update seperti yang dijelaskan di bawah ini.

Atau, untuk membuat bayangan bernama:

  1. Di Kon AWS IoT sol, pilih objek benda Anda dalam daftar hal-hal yang ditampilkan dan kemudian pilih Shadows.

  2. Pilih Tambahkan bayangan, masukkan namasimShadow1, lalu pilih Buat untuk menambahkan bayangan bernama.

Berlangganan dan publikasikan ke topik MQTT yang dipesan

Di konsol, berlangganan topik bayangan MQTT yang dipesan. Topik ini adalah tanggapan terhadap getupdate,, dan delete tindakan sehingga perangkat Anda akan siap menerima tanggapan setelah menerbitkan tindakan.

Untuk berlangganan topik MQTT di Klien MQTT
  1. Di klien MQTT, pilih Berlangganan topik.

  2. Masukkanget,update, dan delete topik untuk berlangganan. Salin satu topik pada satu waktu dari daftar berikut, tempelkan di bidang filter Topik, lalu klik Ber langganan. Anda akan melihat topik muncul di bawah Lang ganan.

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/documents

    Pada titik ini, perangkat simulasi Anda siap menerima topik saat dipublikasikan oleh AWS IoT.

Untuk menerbitkan ke topik MQTT di Klien MQTT

Setelah perangkat menginisialisasi dirinya sendiri dan berlangganan topik respons, perangkat harus menanyakan bayangan yang didukungnya. Simulasi ini hanya mendukung satu bayangan, bayangan yang mendukung objek benda bernama, my, named SimulatedThing, SimShad ow1.

Untuk mendapatkan status bayangan saat ini dari Klien MQTT
  1. Di klien MQTT, pilih Publikasikan ke topik.

  2. Di bawah Publikasikan, masukkan topik berikut dan hapus konten apa pun dari jendela isi pesan di bawah tempat Anda memasukkan topik untuk mendapatkan. Anda kemudian dapat memilih Publikasikan ke topik untuk mempublikasikan permintaan. $aws/things/mySimulatedThing/shadow/name/simShadow1/get.

    Jika Anda belum membuat bayangan bernamasimShadow1,, Anda menerima pesan di $aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected topik dan code is404, seperti dalam contoh ini karena bayangan belum dibuat, jadi kami akan membuatnya selanjutnya.

    { "code": 404, "message": "No shadow exists with name: 'simShadow1'" }
Untuk membuat bayangan dengan status perangkat saat ini
  1. Di klien MQTT, pilih Publikasikan ke topik dan masukkan topik ini:

    $aws/things/mySimulatedThing/shadow/name/simShadow1/update
  2. Di jendela isi pesan di bawah tempat Anda memasukkan topik, masukkan dokumen bayangan ini untuk menunjukkan perangkat melaporkan ID dan warnanya saat ini dalam nilai RGB. Pilih Publi kasikan untuk mempublikasikan permintaan.

    { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }

Jika Anda menerima pesan dalam topik:

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted: Ini berarti bahwa bayangan telah dibuat dan badan pesan berisi dokumen bayangan saat ini.

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected: Tinjau kesalahan di badan pesan.

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted: Bayangan sudah ada dan badan pesan memiliki status bayangan saat ini, seperti dalam contoh ini. Dengan ini, Anda dapat mengatur perangkat Anda atau mengonfirmasi bahwa itu cocok dengan status bayangan.

    { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591140517, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }

Mengirim pembaruan dari aplikasi

Bagian ini menggunakan AWS CLI untuk menunjukkan bagaimana aplikasi dapat berinteraksi dengan bayangan.

Untuk mendapatkan keadaan bayangan saat ini menggunakan AWS CLI

Dari baris perintah, masukkan perintah ini.

aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout

Pada platform Windows, Anda dapat menggunakan al con ih-alih/dev/stdout.

aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con

Karena bayangan ada dan telah diinisialisasi oleh perangkat untuk mencerminkan statusnya saat ini, ia harus mengembalikan dokumen bayangan berikut.

{ "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591141111 }

Aplikasi dapat menggunakan respons ini untuk menginisialisasi representasi status perangkat.

Jika aplikasi memperbarui status, seperti ketika pengguna akhir mengubah warna bola lampu pintar kami menjadi kuning, aplikasi akan mengirim update-thing-shadow perintah. Perintah ini sesuai dengan RES UpdateThingShadow T API.

Untuk memperbarui bayangan dari aplikasi

Dari baris perintah, masukkan perintah ini.

AWS CLI v2.x
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \ --cli-binary-format raw-in-base64-out \ --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout
AWS CLI v1.x
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \ --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout

Jika berhasil, perintah ini akan mengembalikan dokumen bayangan berikut.

{ "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] } }, "version": 4, "timestamp": 1591141596, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }

Tanggapi pembaruan di perangkat

Kembali ke klien MQTT di AWS konsol, Anda akan melihat pesan yang AWS IoT diterbitkan untuk mencerminkan perintah pembaruan yang dikeluarkan di bagian sebelumnya.

Untuk melihat pesan pembaruan di Klien MQTT

Di klien MQTT, pilih $aws/things//mySimulatedThing/shadowname/simShadow1/update/deltadi kolom Lang ganan. Jika nama topik terpotong, Anda dapat menjeda untuk melihat topik lengkap. Di log topik topik ini, Anda akan melihat /delta pesan yang mirip dengan yang ini.

{ "version": 4, "timestamp": 1591141596, "state": { "ColorRGB": [ 255, 255, 0 ] }, "metadata": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }

Perangkat Anda akan memproses isi pesan ini untuk mengatur status perangkat agar sesuai dengan desired status dalam pesan.

Setelah perangkat memperbarui status agar sesuai dengan desired status dalam pesan, perangkat harus mengirim kembali status baru yang dilaporkan AWS IoT dengan menerbitkan pesan pembaruan. Prosedur ini mensimulasikan ini di klien M QTT.

Untuk memperbarui bayangan dari perangkat
  1. Di klien MQTT, pilih Publikasikan ke topik.

  2. Di jendela badan pesan, di bidang topik di atas jendela badan pesan, masukkan topik bayangan diikuti oleh /update tindakan: $aws/things/mySimulatedThing/shadow/name/simShadow1/update dan di badan pesan, masukkan dokumen bayangan yang diperbarui ini, yang menjelaskan keadaan perangkat saat ini. Klik Publikasikan untuk mempublikasikan status perangkat yang diperbarui.

    { "state": { "reported": { "ColorRGB": [255,255,0] } }, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

    Jika pesan berhasil diterima oleh AWS IoT, Anda akan melihat respons baru di log update/accepted pesan $aws/things/mySimulatedThing/shadowname/simShadow1//di klien MQTT dengan status bayangan saat ini, seperti contoh ini.

    { "state": { "reported": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "reported": { "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

Pembaruan yang berhasil ke status perangkat yang dilaporkan juga AWS IoT menyebabkan pengiriman deskripsi komprehensif tentang status bayangan dalam pesan ke update/documents topik, seperti badan pesan ini yang dihasilkan dari pembaruan bayangan yang dilakukan oleh perangkat dalam prosedur sebelumnya.

{ "previous": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 4 }, "current": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5 }, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

Amati pembaruan di aplikasi

Aplikasi sekarang dapat menanyakan bayangan untuk status saat ini seperti yang dilaporkan oleh perangkat.

Untuk mendapatkan keadaan bayangan saat ini menggunakan AWS CLI
  1. Dari baris perintah, masukkan perintah ini.

    aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout

    Pada platform Windows, Anda dapat menggunakan al con ih-alih/dev/stdout.

    aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
  2. Karena bayangan baru saja diperbarui oleh perangkat untuk mencerminkan statusnya saat ini, ia harus mengembalikan dokumen bayangan berikut.

    { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591143269 }

Melampaui simulasi

Bereksperimenlah dengan interaksi antara AWS CLI (mewakili aplikasi) dan konsol (mewakili perangkat) untuk memodelkan solusi IoT Anda.