saklarku
Saklarku adalah aplikasi mobile remote control berbasis web untuk mengendalikan saklar atau relay yang terhubung pada port GPIO di perangkat atau router yang berbasis OpenWRT.
Repository ini berisi source code aplikasi client yang dibangun dengan platform PhoneGap (silakan di-build sendiri ke platform tujuan Anda) dan script server saklarku-server yang harus dipasangkan di router yang hendak dikendalikan.
Loncat ke:
- Tentang aplikasi client
- Tentang script saklarku-server
- Develop & Build di komputer lokal
- Memasang script saklarku-server di router
- Menghubungkan aplikasi client ke Server
- Berkontribusi
Info:
Dalam pengerjaan project ini, versi OpenWRT yang saya gunakan adalah Barrier Breaker (14.07, r42625) dan router yang saya pakai adalah Huawei HG553
gambar modifikasi pemasangan relay ke router, oleh Joni Wang - via Group OpenWRT Indonesia (lihat Credits)
(Client) saklarku-phonegap
- Dapatkan aplikasinya di Google Play Store:
https://play.google.com/store/apps/details?id=id.gojigeje.saklarku - Coba versi online-nya:
http://gojigeje.github.io/saklarku
Fitur:
- Mode kontrol saklar yang lengkap
- Posisi saklar tersinkronisasi ke semua aplikasi client
- Menyesuaikan nama masing-masing saklar
- Bisa menambahkan lebih dari 1 server
- Menampilkan jadwal dari crontab
- Ubah parameter server dan hapus server dengan mudah
- Open Source!
Todo:
- Menambah jadwal baru
(Server) saklarku-server
Pada dasarnya, script di server terdiri dari 2 bagian, yaitu:
- saklarku-server/gpio/index.php
Script ini merupakan script php yang menjadi endpoint parameter URL server di aplikasi client. Script ini akan meneruskan request ke script gpio.sh dan mengembalikan outputnya.
- Yang perlu diedit:
$password
, untuk login ke server. (baris 3)$scriptlocation
, sesuaikan path dengan tempat Anda meletakkan file gpio.sh. (baris 4)
- saklarku-server/gpio/script/gpio.sh
Script ini merupakan script bash yang bertugas untuk mengubah value/status pada masing-masing LED/GPIO. Script ini mengeluarkan output berupa sintaks JSON.
- Yang perlu diedit:
- Sesuaikan urutan GPIO dengan path masing-masing LED (baris 17-25), hapus yang tidak diperlukan.
- Sesuikan array
GPIOS
dengan jumlah GPIO yang dipakai. (baris 27)
Script ini juga bisa dijalankan langsung dari command line, beri parameter help
untuk menampilkan bantuan:
root@OpenWrt:# ./gpio.sh help
Cara Pakai:
./gpio.sh [mode] [target] [status]
Mode:
toggle, single, group, allon, allof, list, status, startup
Contoh:
./gpio.sh toggle 1 toggle GPIO ke 1 (ON/OFF)
./gpio.sh single 2 0 set GPIO 2 dengan posisi 0
./gpio.sh group 123 101 set GPIO 1=1, GPIO 2=0, dan GPIO 3=1
./gpio.sh allon set semua posisi GPIO dengan 1 / ON
./gpio.sh alloff set semua posisi GPIO dengan 0 / OFF
./gpio.sh list tampilkan daftar GPIO yang tersedia
./gpio.sh status tampilkan status masing-masing GPIO
./gpio.sh startup mengembalikan posisi GPIO saat startup
ke posisi terakhir
Sepertinya output help di atas sudah cukup menjelaskan tentang bagaimana fungsi script gpio.sh ini.
Develop & Build di Komputer Lokal
Aplikasi client ini berbasis HTML dan JavaScript, dibangun menjadi aplikasi mobile dengan platform phonegap, jadi untuk develop di komputer lokal kira-kira workflow-nya seperti berikut:
(Silakan merujuk ke http://docs.phonegap.com/ untuk panduan dan dokumentasi yang lebih lengkap)
- Install PhoneGap (http://phonegap.com/)
- Install PhoneGap Developer App di device/smartphone untuk testing
- Clone/Download repo ini
- Edit source aplikasi di folder saklarku-phonegap/www/, oprek sesuka Anda
- Testing dengan PhoneGap Developer App atau langsung lewat web browser
- buka file index.html di browser
- Build aplikasi ke platform tujuan
- Untuk mem-build aplikasi, Anda harus sudah memasang dan mengatur SDK platform tujuan di komputer lokal
- Install hasil build ke device/smartphone
Memasang Script saklarku-server di Router
Karena script server berbasis PHP dan BASH, maka Anda membutuhkan web server dan BASH shell untuk menjalankannya di router.
Install Bash & PHP
opkg update && opkg install bash php5 php5-cgi
Atur Web Server Agar Bisa Mengeksekusi Script PHP
Untuk web server, kita bisa menggunakan web server apa saja, asalkan web server tersebut bisa mengeksekusi script php. Karena di OpenWrt sudah ada webserver bawaan (uHTTPd), kita akan menggunakannya sebagai contoh:
Tambahkan baris option dan list berikut ke file /etc/config/uhttpd
di bagian config uhttpd 'main'
:
config uhttpd 'main'
...
...
option index_page "index.html, index.php"
list interpreter ".php=/usr/bin/php-cgi"
Lalu restart uhttpd:
/etc/init.d/uhttpd restart
Copy File Server ke Router
(Pastikan Anda sudah mengubah password di file index.php dan menyesuaikan daftar GPIO di file gpio.sh)
-
Copy folder gpio (saklarku-server/gpio) ke folder root web server, folder ini akan menjadi endpoint parameter URL di aplikasi client
- misalnya root web server adalah
/www/
, copy foldergpio
ke dalamnya, pastikan path file index.php dan file gpio.sh sesuai dengan path berikut:/www/gpio/index.php
/www/gpio/script/gpio.sh
- misalnya root web server adalah
-
Ubah permission file gpio.sh agar bisa dieksekusi
chmod +x /www/gpio/script/gpio.sh
-
Coba jalankan script gpio dengan parameter list
bash /www/gpio/script/gpio.sh list
Jika sukses, seharusnya akan keluar output:
{ "success": true, "type": "list", "total": .......
berisi daftar gpio yang akan dikontrol script. -
Sekarang coba buka browser, akses alamat
http://IP_ROUTER/gpio/
seharusnya akan menampilkan error: unauthorized karena memang harus diakses dari aplikasi client. Tidak apa-apa, sekarang script server sudah siap.
Agar Jadwal di Crontab Bisa Ditampilkan di Aplikasi Client
Saat ini client bisa mengenali jadwal harian, mingguan dan bulanan. Agar jadwal bisa ditampilkan, maka penulisan jadwal di crontab harus sesuai formatnya:
* * * * * /full/path/to/gpio.sh [parameter] # Nama Jadwal
- perhatikan bahwa path script ditulis dengan lengkap, dan nama jadwal dipisahkan oleh simbol #
-
Matikan saklar 1 tiap hari jam 6:15 pagi dengan nama "Lampu Mati"
15 6 * * * /www/gpio/script/gpio.sh single 1 0 # Lampu Mati
-
Nyalakan saklar 2 dan 3 tiap hari minggu jam 19:00 malam dengan nama "Pagar dan Taman ON"
0 19 * * 6 /www/gpio/script/gpio.sh group 23 11 # Pagar dan Taman ON
-
Matikan saklar 3 dan 4 tanggal 25 tiap bulan, jam 9:30 dengan nama "Tanggal Tua"
30 9 25 * * /www/gpio/script/gpio.sh group 34 00 # Tanggal Tua
(Anda bisa menggunakan layanan crontab generator agar lebih mudah dalam memahami sintaks crontab: http://crontab-generator.org)
Agar Status/Posisi Saklar Dikembalikan Saat Startup
Setiap kali dijalankan, script gpio.sh akan menyimpan status terakhir semua GPIO ke file gpio_status.cfg
di direktori yang sama. Anda bisa membaca file config ini ketika router startup dan mengembalikan posisi GPIO sesuai dengan posisi terakhir sebelum router mati.
- Masukkan command berikut di
/etc/rc.local
sebelumexit
:
/full/path/to/gpio.sh startup
Menghubungkan Aplikasi Client ke Server
Setelah berhasil build ke platform tujuan dan aplikasi telah terpasang di device/smartphone Anda, saatnya mengakses server dari aplikasi.
-
Pastikan device/smartphone bisa mengakses router.
-
Tambahkan server baru di aplikasi client:
- Nama Server:
terserah
- URL Server:
http://IP_ROUTER/gpio/
- Password:
sesuaikan
(sesuaikan dengan pengaturan sebelumnya)
- Nama Server:
-
Selanjutnya aplikasi client akan otomatis menyambungkan ke server dan menampilkan list saklar dan jadwal. Koreksi parameter sebelumnya jika terjadi kegagalan saat menghubungi server.
-
Aplikasi sudah bisa digunakan untuk mengendalikan saklar.
-
Anda bisa menambahkan server dari slide menu di sisi kiri aplikasi dan berganti-ganti server dengan memilih salah-satu server di menu tersebut.
Berkontribusi
Project ini masih terdapat sangat banyak bug, dan banyak kode yang tidak efisien dan bersifat hacking (asal bisa jalan). Jadi silakan berkontribusi dalam bentuk apapun agar membantu project ini menjadi lebih baik.
- Fork dan ajukan Pull Request
- Laporkan bug dan berikan saran di form Issues
- Kontak saya via telegram: http://telegram.me/gojigeje
Credits
- Joni Wang (https://www.facebook.com/joniwang)
untuk foto modifikasi hardware router Huawei HG553. - Link ke album foto untuk foto lengkapnya (harus gabung ke group dulu)
https://www.facebook.com/media/set/?set=oa.950531958321162 - Group OpenWRT Indonesia (https://www.facebook.com/groups/openwrt)