Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Simulasi 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 Akun AWS dan sistem tempat 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. AWS CLI Ini mewakili aplikasi atau layanan yang mengakses perangkat melalui bayangan. AWS CLI Antarmukanya sangat mirip dengan API yang mungkin digunakan aplikasi untuk berkomunikasi 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
Untuk mengatur lingkungan simulasi Anda
-
Anda Akun AWS perlu menjalankan contoh dari topik ini sendiri. Jika Anda tidak memiliki Akun AWS, buat satu, seperti yang dijelaskan dalamMengatur Akun AWS.
-
Buka AWS IoT konsol
, dan di menu sebelah kiri, pilih Uji untuk membuka MQTTklien. -
Di jendela lain, buka jendela terminal pada sistem yang telah AWS CLI diinstal di atasnya.
Anda harus membuka dua jendela: satu dengan AWS IoT konsol di halaman Uji, dan satu dengan prompt baris perintah.
Inisialisasi perangkat
Dalam simulasi ini, kita akan bekerja dengan benda bernama objek, mySimulatedThing, dan bayangannya bernama, simShadow1.
Buat objek benda dan kebijakan IoT-nya
Untuk membuat objek benda, di AWS IoT Konsol:
-
Pilih Kelola dan kemudian pilih Things.
-
Klik tombol Create jika hal-hal tercantum jika tidak, klik Daftarkan satu hal untuk membuat satu AWS IoT hal.
-
Masukkan nama
mySimulatedThing
, biarkan pengaturan lain menjadi default, lalu klik Berikutnya. -
Gunakan pembuatan sertifikat sekali klik untuk menghasilkan sertifikat yang akan mengautentikasi koneksi perangkat. AWS IoT Klik Aktifkan untuk mengaktifkan sertifikat.
-
Anda dapat melampirkan kebijakan
My_IoT_Policy
yang akan memberikan izin perangkat untuk mempublikasikan dan berlangganan topik yang MQTT dipesan. Untuk langkah-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:
-
Di AWS IoT Console, pilih objek benda Anda dalam daftar hal-hal yang ditampilkan dan kemudian pilih Shadows.
-
Pilih Tambahkan bayangan, masukkan nama
simShadow1
, lalu pilih Buat untuk menambahkan bayangan bernama.
Berlangganan dan publikasikan ke MQTT topik yang dipesan
Di konsol, berlangganan topik MQTT bayangan yang dipesan. Topik-topik ini adalah tanggapan terhadap get
update
,, dan delete
tindakan sehingga perangkat Anda akan siap menerima tanggapan setelah menerbitkan tindakan.
Untuk berlangganan MQTT topik di MQTTklien
-
Di MQTTklien, pilih Berlangganan topik.
-
Masukkan
get
,update
, dandelete
topik untuk berlangganan. Salin satu topik pada satu waktu dari daftar berikut, tempelkan di bidang Filter topik, lalu klik Berlangganan. Anda akan melihat topik muncul di bawah Langganan.-
$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 mempublikasikan ke MQTT topik di MQTTklien
Setelah perangkat menginisialisasi dirinya sendiri dan berlangganan topik respons, perangkat harus meminta bayangan yang didukungnya. Simulasi ini hanya mendukung satu bayangan, bayangan yang mendukung objek benda bernama,, bernama mySimulatedThing, simShadow1.
Untuk mendapatkan status bayangan saat ini dari MQTTklien
-
Di MQTTklien, pilih Publikasikan ke topik.
-
Di bawah Publikasikan, masukkan topik berikut dan hapus konten apa pun dari jendela isi pesan di bawah tempat Anda memasukkan topik yang akan didapatkan. Anda kemudian dapat memilih Publikasikan ke topik untuk mempublikasikan permintaan.
$aws/things/mySimulatedThing/shadow/name/simShadow1/get
.Jika Anda belum membuat bayangan bernama
simShadow1
, Anda menerima pesan dalam$aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected
topik dancode
adalah404
, seperti dalam contoh ini sebagai bayangan belum dibuat, jadi kita akan membuatnya berikutnya.{ "code": 404, "message": "No shadow exists with name: 'simShadow1'" }
Untuk membuat bayangan dengan status perangkat saat ini
-
Di MQTTklien, pilih Publikasikan ke topik dan masukkan topik ini:
$aws/things/mySimulatedThing/shadow/name/simShadow1/update
-
Di jendela isi pesan di bawah tempat Anda memasukkan topik, masukkan dokumen bayangan ini untuk menunjukkan perangkat melaporkan ID dan warnanya saat ini dalam RGB nilai. Pilih Publikasikan 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 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" }
Kirim pembaruan dari aplikasi
Bagian ini menggunakan AWS CLI untuk menunjukkan bagaimana aplikasi dapat berinteraksi dengan bayangan.
Untuk mendapatkan status 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 con
alih-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 keadaan saat ini, itu 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 UpdateThingShadow
RESTAPI.
Untuk memperbarui bayangan dari aplikasi
Dari baris perintah, masukkan perintah ini.
Jika berhasil, perintah ini harus 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" }
Menanggapi pembaruan di perangkat
Kembali ke MQTTklien 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 MQTTklien
Di MQTTklien, pilih $aws/things/ /shadow/name/ 1/update/delta di kolom mySimulatedThing Langganan simShadow. Jika nama topik terpotong, Anda dapat menjeda untuk melihat topik lengkapnya. Dalam 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 konten pesan ini untuk menyetel status perangkat agar sesuai dengan desired
status dalam pesan.
Setelah perangkat memperbarui status agar sesuai dengan desired
status dalam pesan, perangkat harus mengirim status baru yang dilaporkan kembali AWS IoT dengan menerbitkan pesan pembaruan. Prosedur ini mensimulasikan ini di MQTTklien.
Untuk memperbarui bayangan dari perangkat
-
Di MQTTklien, pilih Publikasikan ke topik.
-
Di jendela isi pesan, di bidang topik di atas jendela isi pesan, masukkan topik bayangan diikuti dengan
/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 pesan $aws/things/ mySimulatedThing /shadow/name/ simShadow 1/update/accepted di klien dengan status bayangan saat ini, seperti contoh ini. MQTT
{ "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 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 status 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
con
alih-alih/dev/stdout
.aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
-
Karena bayangan baru saja diperbarui oleh perangkat untuk mencerminkan keadaan saat ini, itu 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.