Kategori
IoT

Protokol MQTT

Pendahuluan

Internet of Things atau IoT adalah perangkat/alat yang menjadi pintar karena terhubung ke jaringan komputer. Terhubungnya perangkat tersebut memungkinkan dilakukannya interaksi antara IoT dengan sistem komputer yang bisa saja dikendalikan oleh manusia. Misalnya, melalui perintah suara, pemilik rumah dapat mematikan atau menghidupkan lampu bahkan menjadwalkan kapan seharusnya lampu aktif. Karena banyaknya IoT yang dikembangkan untuk terhubung ke sistem komputer, dikembangkan protokol komunikasi yang bersifat agnostik sehingga baik sistem komputer dan IoT tidak harus mengembangkan protokol komunikasi sendiri. Protokol komunikasi yang bersifat agnostik pada IoT banyak memiliki implementasi, beberapa yang populer adalah menggunakan API seperti REST API dan MQTT API.

Definisi Protokol

Protokol merupakan peraturan atau prosedur untuk mengirimkan sebuah data pada perangkat elektronik.
Pada sistem komputer, setiap komputer berkomunikasi dengan komputer lainnya menggunakan sebuah protokol.

Banyak sekali jenis protokol, seperti jenis protokol yang tidak terlalu asing ditelinga seperti UDP, FTP, TCP, ICMP dan yang sering kita pakai untuk komunikasi IoT yaitu HTTP (Hyper Text Transfer Protocol).

Ada beberapa pertimbangan mengapa transfer data di sistem IoT harus seefisien mungkin. Seperti diketahui 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.

Network Protocol

REST API

REST API adalah protokol komunikasi yang menggunakan endpoint URI dan memanfaatkan ketersediaan METHOD pada Protokol HTTP, yaitu GET untuk meminta data, POST untuk membuat data baru, PUT untuk mengubah data, dan DELETE untuk menghapus data. REST API memberikan layanan lengkap terhadap pengolahan data pada IoT dengan tetap bersifat agnostik.

Perlu mengambil data dalam rentang tertentu atau historical data. Memanipulasi data, seperti buat channel, baca setting, menghapus data, membuat chart. Perlu respon yang berbeda atas method yang dikirimkan (seperti GET dan POST).

MQTT API

MQTT API adalah protokol komunikasi ringan yang melayani PUBLISH dan SUBSCRIBE dan lebih ringan dari HTTP. Tidak selengkap REST API, tetapi cukup memenuhi kebutuhan sebagian besar IoT.
MQTT (Message Queuing Telemetry Transport) protokol merupakan sebuah protokol yang berjalan diatas stack TCP/IP dan dirancang khusus untuk machine to machine yang tidak memiliki alamat khusus.
Maksud dari kata tidak memiliki alamat khusus ini seperti halnya sebuah arduino, raspberry pi atau device lain yang tidak memiliki alamat khusus.

Sistem kerja MQTT menerapkan Publish dan Subscribe data. Dan pada penerapannya, device akan terhubung pada sebuah Broker dan mempunyai suatu Topic tertentu.

IoT memiliki keterbatasan daya (misalnya bekerja dengan baterai) dan atau perlu mengirimkan data yang berukuran lebih kecil. Proses menggunakan MQTT biasanya juga lebih cepat. Koneksi data tidak selalu terhubung, dan bandwidth mungkin terbatas. Ingin melakukan update yang cepat ke channel. Mau langsung menerima update tanpa harus melakukan polling ke server (misal, melakukan penarikan data setiap beberapa detik).

Sinyal Kontrol

  • Pusblish
    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
    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
Message Queueing Telemetry Transport

The Message Queuing Telemetry Transport (MQTT) is a lightweight, publish-subscribe network protocol that transports messages between devices.

Definisi 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.

Publish & Subscribe

Sejarah MQTT

MQTT awalnya ditemukan oleh Andy Stanford-Clark berkolaborasi dengan Arlen Nipper (sekarang CirrusLink) dalam merancang sebuah protokol untuk berkomunikasi dengan sistem SCADA di industri minyak dan gas.

Andy Stanford-Clark

Sejak Internet of Things menjadi populer, MQTT juga melonjak.

  • 2008 – Broker MQTT open-source pertama, Mosquitto diciptakan.
  • 2012 – Projek Eclipse Paho menyediakan library klien MQTT open-source untuk Java, C, JavaScript, dan Python dan dari sana daftar library klien MQTT telah bertambah.
  • 2014 – MQTT versi 3.1.1 menjadi standar OASIS dan membuka jalan untuk MQTT untuk menjadi standar ISO.
  • 2017 – MQTT banyak digunakan oleh perusahaan teknologi terkemuka seperti Amazon, Microsoft, IBM, dll.

Karakteristik

  1. MQTT merupakan sebuah protocol komunikasi yang dikhususkan untuk komunikasi “machine to machine”
  2. MQTT berjalan pada TCP/IP layer.
  3. MQTT menggunakan model publish/subscribe/
  4. MQTT hanya membutuhkan daya dan bandwidth yang sedikit untuk mengirim data.
  5. MQTT hanya dapat mengirim data dalam ukuran yang kecil.
  6. MQTT dapat mengirim data dalam beberapa format sepert JSON, XML, Text.

Cara Kerja MQTT

MQTT sejak awal memang dirancang untuk komunkasi Machine-to-Machine. MQTT mengirim data sebagai byte array, yang mana ini menjadi kelebihan protokol MQTT karena data yang dikirimkan sangat kecil.

Pada saat Protokol MQTT di uji dengan jaringan 3G, Protokol MQTT 93 kali lebih cepat daripada HTTP, karena paket headernya hanya 2 byte.

Publisher mengirimkan data/messages dengan topic tertentu kepada broker. Pengiriman data dapat melalui WiFi, GSM, LTE, dll. Subcriber kemudian mengambil data/messages yang diperlukan dengan topik tertentu di broker.

Blok Diagram MQTT

Broker pada MQTT berfungsi untuk menghandle data publish dan subscribe dari berbagai device, bisa diibaratkan sebagai server yang memiliki alamat IP khusus. Beberapa contoh dari Broker yang ada seperti Mosquitto, HiveMQ dan Mosca. Publish merupakan cara suatu device untuk mengirimkan datanya ke subscribers. Biasanya pada publisher ini adalah sebuah device yang terhubung dengan sensor tertentu.

Subscribe merupakan cara suatu device untuk menerima berbagai macam data dari publisher. Subscriber dapat berupa aplikasi monitoring sensor dan sebagainya, subscriber ini yang nantinya akan meminta data dari publisher. Topic seperti halnya pengelompokan data disuatu kategori tertentu. Pada sistem kerja MQTT protokol ini, topic bersifat wajib hukumnya. Pada setiap transaksi data antara Publisher dan Subscriber harus memiliki suatu topic tertentu.

1. Broker

MQTT Broker memiliki suatu alamat yang dapat diakses oleh Publisher dan Subscriber. Tugas dari MQTT Broker ini yaitu sebagai penghubung transaksi data antara publisher dan subscriber. MQTT Broker juga mengenali suatu data lewat sebuah pengelompokan atau biasa disebut topic. Ketika Publisher mengirim data sensor A, B, C dengan topic data1, dan suatu saat terdapat Subscriber yang melakukan subscribe dengan topic yang sama data1, maka bisa dipastikan Subscriber akan menerima data sensor A, B dan C dari Publisher. 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.

Broker pada MQTT berfungsi untuk mengorganisir data publish dan subscribe dari berbagai device. Broker bisa diibaratkan sebagai server data yang memiliki alamat IP khusus.

Beberapa contoh dari Broker yang ada seperti Mosquitto, HiveMQ, dan Mosca.

Mosquitto

Eclipse Mosquitto™ adalah Message broker yang mengimplementasikan protokol MQTT versi 3.1 dan 3.1.1. Broker Mosquitto cukup handal terutama dalam sistem internet of things karena sudah digunakan oleh banyak user.

Mosquitto telah mendukung berbagai sistem operasi mulai dari Mac OS, Microsoft Windows, dan berbagai varian distro Linux.

Keamanan Pada Mosquitto

Mosquitto mendukung keamanan dengan mengenkripsi port yang digunakan dalam transmisi data. Beberapa port yang dapat digunakan yaitu:

  • 1883 : MQTT, unencrypted, unauthenticated
  • 1884 : MQTT, unencrypted, authenticated
  • 8883 : MQTT, encrypted, unauthenticated
  • 8884 : MQTT, encrypted, client certificate required
  • 8885 : MQTT, encrypted, authenticated
  • 8886 : MQTT, encrypted, unauthenticated
  • 8887 : MQTT, encrypted, server certificate deliberately expired
  • 8080 : MQTT over WebSockets, unencrypted, unauthenticated
  • 8081 : MQTT over WebSockets, encrypted, unauthenticated
  • 8090 : MQTT over WebSockets, unencrypted, authenticated
  • 8091 : MQTT over WebSockets, encrypted, authenticated

2. Publish

Publish merupakan cara suatu perangkat untuk mengirimkan datanya ke subscribers. Pengirim data tersebut dinamakan publisher. Biasanya pada publisher adalah sebuah device yang terhubung dengan sensor tertentu.

Contoh publisher adalah Arduino, ESP32, Raspberry Pi, Android, dll.

3. Subscribe

Subscribe merupakan cara suatu device untuk menerima berbagai macam data dari publisher melalui broker. Penerima data disebut subscriber.

Subscriber dapat berupa aplikasi monitoring sensor dan sebagainya, subscriber ini yang nantinya akan meminta data dari publisher melalui broker.

4. Topic

Topic seperti halnya pengelompokan data disuatu kategori tertentu yang dibuat oleh user. Pada sistem kerja MQTT protokol ini, topic bersifat wajib untuk membedakan data satu dengan yang lainnya.

Pada setiap transaksi data antara Publisher dan Subscriber harus memiliki suatu topic tertentu.

Contoh penggunaan topic: “temperature”, “humidity“, dll.

MQTT 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.

QoS pada MQTT merupakan tingkat kualitas layanan pengiriman pesan pada MQTT
Terdapat 3 level QoS

  • QoS level 0 (at most once delivery) : pesan hanya dikirim sekali, setelah pesan dikirim tidak terdapat respon seperti apakah pesan berhasil dikirim.
  • QoS level 1 (at least once delivery) : pesan paling sedikit dikirim sekali, jika subscriber tidak menerima pesan maka broker akan mengirimkan respon terhadap publisher bahwa pesan gagal dikirim. Terjadi duplikasi pesan karena pengiriman pesan yang berulang-ulang.
  • QoS level 2 (exactly once delivery) : pesan dikirim sekali dan hanya sekali, memastikan ulang bahwa pesan telah diterima oleh subscriber, mencegah terjadinya duplikasi pesan.
MQTT QoS

MQTT vs HTTP

Perbandingan MQTT dengan HTTP

Pengukuran hasil MQTT dengan protokol lain

Power consumption test

Tabel diatas merupakan perbandingan penggunaan protokol mqtt dengan protokol lainnya, hasil perbandingan meliputi jumlah kedatangan, delay, CPU Usage dan lainnya. Hampir sebagian besar mqtt mendominasi nilai minimum kebutuhan perangkat IoT.

Baca lebih lanjut : Praktek MQTT

Ref : [1][2][3][4]