Pada bagian kedua ini akan difokuskan pada setup raspberry Pi dengan memanfaatkan setup Docker untuk installasi InfluxDB, Mosquitto (MQTT) dan Grafana pada raspberry Server.
Instalasi Docker cukup memiliki proses yang cukup panjang. Selain itu ada beberapa pre-requisite yang harus dipenuhi agar berjalan dengan baik. Inilah tahap pertama installasi Docker pada Raspberry Pi:
sudo apt-get update
###//Prerequisite
sudo apt-get install apt-transport-https ca-certificates software-properties-common –y
curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
Jika username yang digunakan pada Raspberry Pi adalah “pi”, maka, permission harus diberikan dengan perintah:
sudo usermod -aG docker pi
Proses ini sebenarnya dapat diabaikan. Namun, untuk memastikan software package yang terinstall sudah benar, import Docker CPG key perlu dilakukan untuk verifikasi:
sudo curl https://download.docker.com/linux/raspbian/gpg
Selanjutnya adalah setup repositories untuk Docker. Bukalah file source.list dengan menggunakan text editor. Lokasi file tersebut dapat di akses pada command line di bawah ini:
nano /etc/apt/sources.list
File tersebut berisi link repositories yang terdapat pada Raspbarry Pi. Pada bagian bawah tambahkan line di bawah ini, kemudian save.
deb https://download.docker.com/linux/raspbian/ stretch stable
Setelah itu update dan upgrade kembali linux package Raspberry Pi, karena sudah ada docker. Sebelum memeriksa apakah docker telah terinstall dengan benar, kita harus kembali update dan upgrade patch tersebut.
sudo apt-get update
sudo apt-get upgrade
Langkah selanjutnya adalah membuat folder baru untuk project ini. Pada folder baru tersebut, tambahkan lah 2 folder dan 1 file yang dapat anda download pada link di bawah ini.
[download_after_email id=437]
Folder dan file yang telah anda download tersebut berisi, diantaranya:
Folder 01-Mosquito
Pada folder ini terdapat konfigurasi file untuk MQTT broker(mosquito) yang meliputi lokasi data yang tersubscribe pada mosquito dari mqtt client dan user files yang berisi user name dan password mqtt. Pada konfigurasi ini user name dan password adalah admin/admin.
Folder 02-Bridge
Pada folder ini terdapat script Python“main.py”. Script tersebut berfungsi untuk menghubungkan antara MQTT topic yang tersubscribe dari MQTT Broker dan lalu menyimpannya pada influxDB database.
Hal yang perlu diperhatikan pada script ini adalah: Pastikan memasukkannya dengan benar sesuai dengan perangkat yang digunakan. Pada 4 line pertama berkaitan dengan setup pada Grafana (akan dibahas lebih dalam pada tutorial selanjutnya). Sedangkan 6 line setelahnya adalah setup MQTT yang sesuai coding arduino pada tutorial sebelumnya dan regular expression untuk mengenali message yang tersubscribe pada MQTT broker yang pada akhirnya akan dimasukkan kedalam influxDB database.
INFLUXDB_ADDRESS = '192.168.2.144'
INFLUXDB_USER = 'auftechnique'
INFLUXDB_PASSWORD = 'auftechnique'
INFLUXDB_DATABASE = 'auftechnique_db'
MQTT_ADDRESS = '192.168.2.144'
MQTT_USER = 'admin'
MQTT_PASSWORD = 'admin'
MQTT_TOPIC = 'home/+/+'
MQTT_REGEX = 'home/([^/]+)/([^/]+)'
MQTT_CLIENT_ID = 'MQTTInfluxDBBridge'
Konfigurasi tersebut diperlukan ketika proses setup Grafana.
File ini berisi Image yang dibutuhkan beserta konfigurasi masing-masing. Sehingga hanya perlu memberi satu perintah ketika melakukan proses installasi image
Kembali pada proses instalasi Docker. Anda dapat mengecek versi dan informasi terkait dengan docker yang telah terinstal dengan perintah:
docker version
docker info
Hal yang terkadang cukup mengesalkan adalah ketika hendak mengesekusi perintah yang berhubungan dengan docker, ada beberapa command yang harus selalu menambahkan kata ‘sudo’ agar tereksekusi dengan baik.
Ada trick yang dapat membantu untuk mengabaikan perintah ‘sudo’ tersebut dengan cara:
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
Terkadang terdapat error message ketika pertama kali hendak menjalankan Docker.
Sebelum menjalankan docker, ada baiknya untuk me-restart raspberry pi.
Setelah raspberry pi booting kembali, kita dapat menjalankan docker dengan perintah:
docker run hello-world
Notifikasi keberhasilan instalasi docker akan muncul pada terminal windows anda. Langkah selanjutnya adalah setup environment variable “DATA_DIR”.
Anda dapat meng-export variable tersebut ke dalam temporary folder (/temp) jika anda tidak berniat untuk menjadikan project ini pada aktifitas production. Namun, jika anda ingin menyimpan semua data akusisi atau menjadikan project ini di pakai pada production, anda dapat menyimpannya pada folder yang lain.
export DATA_DIR=/tmp
mkdir -p ${DATA_DIR}/mosquitto/data ${DATA_DIR}/mosquitto/log ${DATA_DIR}/influxdb ${DATA_DIR}/grafana
Pada saat membuat raspberry pi sebagai MQTT server menggunakan docker, pastikan bahwa setup direktori untuk menyimpan/mengambil data akusisi yang dilakukan oleh MQTT server dan Grafana pada backend telah memiliki write access untuk menghindari permission issue.
sudo chown -R 1883:1883 ${DATA_DIR}/mosquitto
sudo chown -R 472:472 ${DATA_DIR}/grafana
Langka selanjutnya adalah dengan menginstall docker-compose, sehingga dapat mempermudah proses installasi image yang dibutuhkan.
Ada beberapa cara untuk instalasi docker-compose. Namun, setelah beberapa kali mencobanya pada raspberry pi, cara yang termudah adalah instalasi melalui Pyhton package (PIP).
Ada beberapa dependencies yang harus terpenuhi dengan cara ini sebelum memulai proses instalasi docker-compose, yaitu:
sudo apt-get install -y libffi-dev libssl-dev
sudo apt-get install -y python3 python3-pip
sudo apt-get remove python-configparser
sudo pip3 install docker-compose
Setelah seluruh dependency terpenuhi, navigasikanlah pada parent folder project ini di mana terdapat file docker-compose.yml, lalu eksekusi perintah:
docker-compose up –d
Image pulling/installation proses akan berurutan berdasarkan urutan yang terdapat dalam file ‘docker-compose.yml’. File tersebut berisi seluruh docker image yang dibutuhkan pada project ini. Lalu, docker compose akan mengesekusinya satu per satu.
Pastikan seluruh image yang terdapat pada ‘docker-compose.yml’ terinstall pada container dengan mengeksekusi perintah:
docker container ls –a
Perintah tersebut akan menunjukkan semua list container pada local repository raspberry pi. Container yang tidak dibutuhkan pada project ini misalkan “hello-world”, anda dapat menghapusnya dengan cara:
docker rm containerID
Docker command yang berguna untuk diketahui adalah:
docker run xxx
Docker run akan menarik image dari docker hub repository (online) jika belum terinstall pada local repository, lalu menjalankan container baru. Mengesekusi perintah run pada docker akan membuat container ID yang baru. Sehingga akan terus menambah list container.
“XXX” adalah nama image yang terdapat pada docker, contohnya grafana, influxDB, dll.
Sebagai best practice untuk saya pribadi, daripada selalu menambah container baru yang pada akhirnya sulit untuk memaintainnya, perintah “start” lebih saya sukai, ketika telah memiliki container berisi image yang dibutuhkan.
docker start containerID
Dengan perintah ini, docker hanya akan menjalankan container berdasarkan IDnya tanpa ada penambahan container yang baru.
Perintah penting lainnya yg sangat diperlukan adalah adalah memastikan semua container yang dibutuhkan telah berjalan dengan baik sesuai perintah:
docker ps
Jika ada salah satu container yang dibutuhkan memiliki status “stopped” (dapat di lihat setelah eksekusi “docker container –ls –a”) atau tidak terdapat pada list setelah eksekusi “docker ps”. Maka, container tersebut harus dijalankan terlebih dahulu dengan perintah:
docker start containerID
Setelah memastikan status container yang diperlukan “up”, buka lah web browser pada raspberry pi ataupun pada semua perangkat yang terhubung dengan router yang sama dengan alamat IP address raspberry Pi serta port: 3000. Contoh: http://192.168.2.144:8000
Setelah itu tampilan login Grafana dashboard akan terlihat. Secara default, userID dan password adalah admin/admin
Bagian di bawah ini hanyalah tambahan, tidak termasuk dalam tahapan-tahapan tutorial bagian ke-2 ini.
Mengganti default password mosquitto (optional)
cd 01-mosquitto
echo -n "" > users
docker run --rm -v `pwd`/mosquitto.conf:/mosquitto/config/mosquitto.conf -v `pwd`/users:/mosquitto/config/users eclipse-mosquitto mosquitto_passwd -b /mosquitto/config/users [USER] [PASSWORD]
###Ubahlah kata yang terdapat dalam tanda kurung.
###contoh password: [USER]= auftechnique ; [PASSWORD] = auftechnique
Alternatif install docker image (tidak menggunakan docker compose)
cd -
cd 01-mosquitto
docker run -d -p 1883:1883 -v PWD/mosquitto.conf:/mosquitto/config/mosquitto.conf -v PWD/users:/mosquitto/config/users -v DATA_DIR/mosquitto/data:/mosquitto/data -v $DATA_DIR/mosquitto/log:/mosquitto/log --name mosquitto eclipse-mosquitto:1.5
cd -
docker run -d -p 8086:8086 -v $DATA_DIR/influxdb:/var/lib/influxdb --name influxdb influxdb:1.7
cd 02-bridge
docker build -t auftechnique/mqttbridge .
docker run -d --name mqttbridge auftechnique/mqttbridge
cd -
docker run -d -p 3000:3000 -v $DATA_DIR/grafana:/var/lib/grafana --name=grafana grafana/grafana:5.4.3
Jika anda tertarik untuk melihat video tutorial bagian ke-2 ini, anda dapat menyimak di sini:
Pada tutorial ini telah di bahas mengenai setup docker, docker-compose, pull docker image, docker container serta beberapa command penting docker pada raspberry pi yang dijadikan sebagai MQTT server.
Keuntungan menggunakan docker ini adalah karena kemudahannya dalam membuat, mengembangkan dan menjalankan aplikasi di dalam container. Container ini memiliki library dan dependency yang independen di mana kesemuanya telah tersedia dalam satu paket.
Sekian tutorial pada bagian yang kedua ini. Pada bagian terakhir akan di bahas mengenai setup Grafana dashboard secara lebih dalam.
Link bagian terakhir klik disini
Terima kasih telah mengunjungi postingan ini, semoga membawa manfaat dan jangan lupa untuk terus mengikuti rangkaian tutorial-tutorial berikutnya.
Wassalamu alaikum wr wb