🪞 Device Shadow & Rules Engine

Jembatan dua arah antara cloud dan device, plus otomasi berbasis aturan.

Konsep device shadow reported dan desired
Shadow: reported (dari device) vs desired (perintah dari cloud)

📌 1. Device Shadow: "Kembar Digital" Device

Device IoT sering offline (baterai, sinyal). Shadow adalah JSON di cloud yang menyimpan status terakhir device, dengan dua bagian:

BagianArahIsi
reportedDevice → CloudStatus aktual terakhir: {"suhu": 27.5, "baterai": 80}
desiredCloud → DevicePerintah yang harus dijalankan: {"ac": "ON"}

Alur kerja: aplikasi HP menulis desired → device (saat online) membaca desired → menjalankannya → melaporkan ke reported. Jika device offline saat perintah dikirim, perintah menunggu di shadow sampai device kembali online.

📌 2. Rules Engine: Otomasi di Cloud

Rules engine = "jika … maka …" yang berjalan di platform. Contoh: jika suhu > 28 maka set AC desired = ON. Kelebihannya: logika terpusat, device tetap bodoh & hemat daya.

Output:

📌 3. Sisi Device: Menjalankan Perintah (Desired)

Sekarang dari sisi device: device polling shadow-nya, menjalankan perintah desired, lalu melaporkan ke reported.

Output:

Di platform nyata (AWS IoT), device tidak perlu polling — shadow di-push ke device via MQTT saat berubah. Polling dipakai di sini agar alurnya terlihat jelas.

📌 4. OTA Update: Memperbarui Firmware dari Jauh

Ribuan device tersebar? Tidak mungkin buka sekrup satu-satu. Over-The-Air (OTA) update mengirim firmware baru via jaringan:

  1. Platform menyimpan versi firmware + checksum.
  2. Device mengecek versi: desired: {"firmware": "v2.1.0"}.
  3. Device mengunduh (biasanya HTTP), memverifikasi checksum, menulis ke flash.
  4. Device reboot → melaporkan versi baru ke reported.
⚠️ OTA yang gagal di tengah proses bisa "membrick" device. Mitigasi: dual partition (A/B) — jika versi baru gagal boot, otomatis kembali ke versi lama.

🧠 Latihan

  1. Tambah rule kedua di editor 1: jika RTH > 75 → set_desired("ac-01", {"dehumidifier": "ON"}). (Tambahkan kunci "rth" di state.)
  2. Ubah editor 2: device menerima perintah {"nyala": False} — pastikan lampu benar-benar mati (reported = {"nyala": False}).
  3. Buat skenario "device offline": set desired, lalu (simulasikan) device baru online 30 detik kemudian — perintah tetap dijalankan. Jelaskan kenapa shadow membuat ini mungkin.
  4. Rancang alur OTA untuk 500 sensor: apa yang terjadi jika 30% gagal update? Bagaimana rollback-nya?