📨 MQTT: Protokol Standar IoT

Publish/subscribe, broker, topic, QoS, retain, dan Last Will & Testament.

Arsitektur MQTT publisher broker subscriber
Publisher tidak tahu siapa subscriber-nya — broker yang menghubungkan

📌 1. Kenapa MQTT?

MQTT (Message Queuing Telemetry Transport) dirancang untuk jalur sempit dan perangkat terbatas: header hanya 2 byte, koneksi TCP jangka panjang, dan model publish/subscribe.

  • Broker — server pusat yang menerima pesan dan meneruskannya (mis. Mosquitto, AWS IoT Core).
  • Topic — "alamat" pesan, hierarkis dengan /, mis. home/kamar/temp.
  • Publisher — mengirim pesan ke topic (sensor).
  • Subscriber — mendaftar topic dan menerima pesan yang cocok (dashboard, rules engine).
💡 Keajaiban pub/sub: publisher tidak perlu tahu siapa yang menerima. Tambah 10 dashboard baru? Sensor tidak perlu diubah — cukup subscribe.

📌 2. Publish/Subscribe Dasar

Dua klien: sensor (publisher) dan dashboard (subscriber) dengan wildcard +.

Output:

📌 3. Topic & Wildcard

WildcardArtiCocok dengan
home/kamar/tempExacthome/kamar/temp saja
home/+/temp+ = satu level apa punhome/kamar/temp, home/rumah/temp
home/## = semua level di bawahnyahome/kamar/temp, home/rumah/led, ...
topic_matches("home/+/temp", "home/kamar/temp") # True topic_matches("home/#", "home/a/b/c") # True topic_matches("#", "apa/saja") # True topic_matches("home/+/temp", "a/b/c") # False
⚠️ Konvensi penting: hindari spasi dan karakter khusus di topic. Struktur yang konsisten (mis. lokasi/ruang/parameter) membuat wildcard dan rules engine mudah dipakai.

📌 4. QoS: Level Garansi Pengiriman

QoSGaransiUse Case
0Fire & forget — bisa hilangData yang boleh hilang (suhu tiap menit)
1Minimal sekali — bisa duplikatTelemetri penting, alarm
2Persis sekali — tanpa duplikatPembayaran, counter (mahal, lambat)

QoS efektif = minimum dari QoS publisher dan subscriber. QoS 2 memakai 4-step handshake — jarang dipakai di IoT skala besar.

📌 5. Retain: Pesan yang Disimpan Broker

Pesan dengan flag retain=True disimpan broker. Setiap subscriber BARU yang cocok langsung menerimanya — berguna untuk "status terakhir" (mis. saklar: ON/OFF).

Output:

📌 6. Last Will & Testament (LWT)

Setiap klien bisa mendaftarkan "pesan wasiat": jika klien mati mendadak (baterai habis, jaringan putus) tanpa disconnect() yang sopan, broker mempublikasikan pesan itu. Ini cara sistem tahu bahwa sebuah device hilang.

Output:

Kombinasi retain + LWT adalah pola standar: topic status selalu berisi kondisi terakhir device — ONLINE atau OFFLINE.

🧠 Latihan

  1. Buat 2 publisher (sensor-01 suhu, sensor-02 RTH) dan 1 subscriber dengan filter home/#. Berapa pesan yang diterima?
  2. Implementasi "saklar lampu" dengan retain: publish home/lampu/state = "ON"/"OFF" bergantian 4 kali, lalu subscriber baru — apa yang diterimanya pertama kali?
  3. Uji topic_matches(): buat 5 pasangan (filter, topic) dan cetak hasilnya. Setidaknya 2 harus False.
  4. Jelaskan: kenapa LWT penting untuk sistem keamanan (mis. kamera CCTV)? Apa yang terjadi jika tidak ada LWT?