Pemrograman

Insight & Tutorials in Bahasa Indonesia

Follow publication

Featured

Mengenal MQTT

Equan P.
Pemrograman
Published in
5 min readOct 6, 2015

--

Protokol IoT

Kalau anda terbiasa menggunakan REST dengan JSON untuk komunikasi IoT mungkin tulisan dibawah ini akan menambah sedikit pengetahuan anda bahwa sebenarnya ada cara yang lebih efisien untuk transfer data di sistem Internet Of Things.

Ada beberapa pertimbangan mengapa transfer data di sistem IoT harus seefisien mungkin. Seperti anda ketahui bahwa pada sistem IoT terutama pada bagian perangkat akuisisi data seperti sensor & embedded device biasanya memakai catu daya yang disediakan oleh baterai, solar panel dll. Koneksi perangkat ini dengan server atau internet biasanya memakai koneksi WiFi, Bluetooth, GSM, gelombang radio dll yang memerlukan catu daya cukup besar saat koneksi terjadi apalagi kalau koneksi terjadi tiap waktu, batasan lainnya yaitu ukuran media penyimpanan internal dan RAM dari perangkat-perangkat ini biasanya relatif cukup kecil (Arduino, Nucleo STM32…you name it!).

Jadi ada beberapa optimasi yang harus diperhatikan dalam pertukaran data pada sistem IoT agar transfer data bisa seefisien mungkin

  • Menekan ukuran paket data sekecil mungkin sehingga trafik bisa meningkat.
  • Meminimalisasi proses komputasi untuk encoding dan decoding dari paket data.
  • Data hanya menggunakan ruang penyimpanan yang sekecil mungkin.

Optimasi-optimasi diatas disediakan oleh protokol yang bernama MQTT.

MQTT

Protokol MQTT (Message Queuing Telemetry Transport) adalah protokol yang berjalan pada diatas stack TCP/IP dan mempunyai ukuran paket data dengan low overhead yang kecil (minimum 2 bytes) sehingga berefek pada konsumsi catu daya yang juga cukup kecil.

Protokol ini adalah jenis protokol data-agnostic yang artinya anda bisa mengirimkan data apapun seperti data binary, text bahkan XML ataupun JSON dan protokol ini memakai model publish/subscribe daripada model client-server.

Sistem umum IoT memakai MQTT

Stack TCP/IP sekarang sudah banyak di dukung oleh mikrokontroler seperti seri STM32Fx7 maupun device board yang umum dipasaran seperti Arduino Yun, Arduino + Ethernet Shield, ESP8266 WiFi SoC, Raspberry Pi dll. Jadi sebenarnya banyak pilihan untuk belajar IoT dengan memakai protokol ini ditambah lagi harga device yang semakin murah dan terjangkau.

Sistem umum MQTT seperti pada gambar diatas membutuhkan dua komponent perangkat lunak utama yaitu

  • MQTT Client yang nantinya akan di install di device. Untuk Arduino anda bisa memakai pubsubclient, pustaka seperti mqtt.js bisa dipakai pada platform Node.js di Raspberry Pi ataupun laptop.
  • MQTT Broker yang berfungsi untuk menangani publish dan subscribe data. Untuk platform Node.js anda bisa memakai broker mosca sedangkan untuk platform yg lain banyak broker tersedia seperti mosquitto, HiveMQ dll.

Keuntungan dari sistem publish/subscribe adalah antara sumber pengirim data (publisher) dan penerima data (klien) tidak saling mengetahui karena ada broker diantara mereka atau istilah kerennya yaitu space decoupling dan yang lebih penting lagi yaitu adanya time decoupling dimana publisher dan klien tidak perlu terkoneksi secara bersamaan, misalnya klien bisa saja disconnect setelah melakukan subscribe ke broker dan beberapa saat kemudian klien connect kembali ke broker dan klien tetap akan menerima data yang terpending sebelumnya proses ini dikenal dengan mode offline.

Sinyal Kontrol

MQTT mempunyai 14 tipe sinyal kontrol seperti berikut:

  • CONNECT — Client request to connect to Server
  • CONNACK Connection Acknowledgement
  • PUBLISH — A message which represents a new/separate publish
  • PUBACK — QoS 1 Response to a PUBLISH message
  • PUBREC — First part of QoS 2 message flow
  • PUBREL Second part of QoS 2 message flow
  • PUBCOMP — Last part of the QoS 2 message flow
  • SUBSCRIBE — A message used by clients to subscribe to specific topics
  • SUBACK Acknowledgement of a SUBSCRIBE message
  • UNSUBSCRIBE — A message used by clients to unsubscribe from specific topics
  • UNSUBACK — Acknowledgement of an UNSUBSCRIBE
    message
  • PINGREQ — Heartbeat message
  • PINGRESP — Heartbeat message acknowledgement
  • DISCONNECT — Graceful disconnect message sent by clients
    before disconnecting

Dari sinyal sinyal tersebut hanya 4 sinyal utama yang dipakai langsung oleh klien seperti PUBLISH, SUBSCRIBE, UNSUBSCRIBE, CONNECT dan sinyal lainnya merupakan bagian dari mekanisme kerja publish/subscribe.

Topic

Dalam MQTT dikenal istilah topic yaitu berupa UTF-8 string yang perannya hampir sama seperti topik pada chat hanya saja lebih sederhana dan berfungsi sebagai filter untuk broker dalam mengirimkan pesan ke tiap klien yang terhubung atau dengan kata lain topic adalah kanal bagi klien untuk subscribe.

Misalnya untuk subscribe ke topic berikut

mqtt/rumah/suhu

Jika pustaka klien yang anda pakai adalah mqtt.js maka kode di klien untuk subscribe bisa seperti berikut ini

var mqtt = require('mqtt');
var client = mqtt.connect();

client.subscribe("mqtt/rumah/suhu");
client.on('message', function(topic, message){
console.log()
})

Yang perlu diingat adalah klien MQTT (laptop dan mobile device untuk gambar diatas) juga bisa menjadi publisher. Jadi misalnya anda menginstall mqtt.js pada laptop dan mqtt.js satunya pada Raspberry Pi maka dua-duanya bisa menjadi subscriber satu sama lain ataupun menajdi publisher satu sama lain hanya saja keduanya terhubung dengan topic tertentu melalui broker.

Untuk mempublish data ke topis cukup mudah, dengan memakai mqtt.js

client.publish("mqtt/rumah/suhu", "31");

Penjelasan lebih lanjut tentang topic dapat anda lihat pada dokumen spec.

Quality of Service (QoS)

Satu lagi yang membuat MQTT berbeda adalah adanya level kualiatas dari layanan atau QoS. Jadi pesan yang di publish pasti memiliki satu dari 3 level QoS. Level-level ini memberikan garansi akan konsistensi (reliability) dari pengiriman pesan. Klien dan broker menyediakan mekanisme penyimpanan dan pengiriman kembali dari pesan sehingga meningkatkan konsistensi data akibat kegagalan network, restart dari aplikasi dan sebab-sebab lainnya.

Level 0

Pesan dikirim hanya sekali. Pesan yang terkirim tergantung dari reliabiliti stack TCP alias tergantung keberadaan network dan tidak ada usaha untuk mentransmisikan pesan kembali.

Level 1

Pesan dikirimkan setidaknya satu kali. Jadi klien setidaknya akan menerima pesan sekali. Jika subscriber tidak mengakui (acknowledge) maka broker akan mengirimkan pesan sampai publisher menerima status pengakuan pesan dari klien.

Level 2

Pesan pasti diterima satu kali. Protokol dengan level ini memastikan bahwa pesan pasti tersampaikan dan tidak terjadi duplikasi pesan yang terkirim.

Tools

Layanan Broker Gratis

Sebelum mengaplikasikan ke real device anda bisa mencoba protokol MQTT dengan memakai layanan broker gratis dari beberapa website seperti test.mosquitto.org atau iot.eclipse.org

Test subscribe dan publish

mqtt-spy

Jika anda lebih nyaman memakai aplikasi GUI anda bisa memakai tool yang bernama mqtt-spy tapi di sistem anda harus terinstall Java 1.8 karena aplikasi ini memakai yang namanya JavaFX.

Spying ?

atau kalau anda pemakai Android anda bisa menginstall MyMQTT.

Ok demikian singkat saja untuk pengenalan protokol ini. Silahkan melihat referensi dibawah jika anda penasaran atau tunggu artikel berikutnya yang akan membahas protokol MQTT ini pada real device.

Thanks.

Reference

--

--

Responses (9)