Arsitektur Sistem Saklar Internet Of Things dengan ESP8266

Tulisan ini adalah kelanjutan dari tulisan Rencana Proyek Kontrol Lampu Rumah dengan internet. Tulisan ini akan membahas terutama arsitektur sistem.

Untuk merancang arsitektur, kita harus menganalisa terlebih dahulu masalah-masalah apa yang akan muncul. Kita harus melihat sistem yang akan di rancang dari berbagai sudut.

Berikut adalah list pertanyaan yang menurut saya sangat krusial:

  1. Bagaimana membuat komunikasi antara modul saklar dan server reliable?
  2. Bagaimana mengautentikasi pengguna modul saklar?
  3. Bagaimana cara menghandle lebih dari satu saklar sekaligus ?

Solusi yang saya gunakan adalah memecah problem diatas menjadi 2. Masalah nomor 1 dan 3 bisa dipecahkan menggunakan protokol MQTT. Protokol ini di gunakan untuk mengelola koneksi saklar. MQTT adalah sistem transportasi pesan berbasis publish/subscribe. Kita bisa membayangkan sistem ini seperti langganan koran. Seperti sebuah penerbit koran, Saklar melakukan broadcast bahwa dirinya bisa menerbitkan berita / pesan. Setelah itu, client bisa melakukan request langganan berita tersebut ke server MQTT. Hal ini juga berlaku 2 arah, saklar bisa berlangganan berita yang bertujuan mengubah status saklar. Tugas MQTT memanage objek apa berlangganan / menerbitkan berita apa. MQTT juga bisa di berikan password, sehingga hanya saklar & client tertentu yang dapat terkoneksi.

Berikut adalah diagram mengenai arsitektur ini:Screen Shot 2016-03-11 at 12.08.14 PM

Saklar akan mengkoneksikan diri ke server, bukan server yang mencoba mengkoneksian diri ke client. Saat saklar terkoneksi, dia akan mencoba menghubungi MQTT di VPS. Selanjutnya saklar akan mempublikasi eksistensi dirinya dan berlangganan beberapa pesan:

#Saklar akan mempublish message ini setelah terkoneksi: 
announcement,deviceName|status On/Off

#Ketika saklar menerima ini, akan mengubah status saklar
"command/"+deviceName+"/write"   

#Ketika saklar menerima ini, akan mengirim ulang pesan "announcement"
"command/"+deviceName+"/read"
    
#Ketika saklar menerima ini, akan mereset saklar
"command/"+deviceName+"/reset"

Sedangkan Server kontrol cukup berlangganan sebuah pesan:

announcement

Server kontrol berfungsi untuk  merender status masing-masing saklar sebagai situs HTML , manajemen autentikasi pengguna dan mengontrol penjadwalan. WebSocket digunakan agar semua saklar bisa dilihat statusnya secara realtime.  Saat pengguna mengubah status sebuah saklar, server kontrol akan mengirimkan pesan ke server MQTT sebagai berikut:

#Menyalakan Saklar
"command/"+deviceName+"/write",1

#Mematikan Saklar
"command/"+deviceName+"/write",0

Hal lain yang perlu di perhatikan adalah apa yang terjadi saat saklar offline. Yang kita bahas sampai saat ini adalah apa yang terjadi saat saklar online. Mekanisma sederhana yang saya lakukan adalah, mengirimkan pesan “Read” setiap beberapa menit sekali, lalu menghapus presensi di server kontrol apabila saklar tidak menjawab. Hal ini berarti saklar terdeteksi offline tidak real time, tapi saya rasa hal itu sudah lebih dari cukup untuk saat ini.

Sebagai penutup, Saya menggunakan MQTT sebagai server manajemen koneksi, Node.JS sebagai server kontrol, VPS OVH https://www.ovh.com/us/vps/ (karena harganya sangat murah) , sistem operasi Ubuntu 15.10. Tulisan selanjutnya adalah mengenai koding untuk implementasi arsitektur ini di ESP8266.