Dosen Pembimbing
Dr.Eng. Febriliyan Samopa, S.Kom., M.Kom.
Dosen Pembimbing
Dr.Eng. Febriliyan Samopa, S.Kom., M.Kom.
iii
Halaman ini sengaja dikosongkan
v
Supervisor
Dr.Eng. Febriliyan Samopa, S.Kom., M.Kom.
v
Halaman ini sengaja dikosongkan
LEMBAR PENGESAHAN
TUGAS AKHIR
Disusun untuk Memenuhi Salah Satu Syarat
Memperoleh Gelar Sarjana Komputer
pada
Departemen Sistem Informasi
Fakultas Teknologi Elektro dan Informatika Cerdas
Institut Teknologi Sepuluh Nopember
Oleh :
KEPALA
DEPARTEMEN SISTEM INFORMASI
i
Halaman ini sengaja dikosongkan
LEMBAR PERSETUJUAN
iii
Halaman ini sengaja dikosongkan
RANCANG BANGUN SMART FARMING
HIDROPONIK MENGGUNAKAN SENSOR PH, TOTAL
DISSOLVED SOLIDS, DAN TEMPERATUR
ABSTRAK
iv
v
ABSTRACT
v
Keywords: API, Arduino, Hydroponicsh, Internet of Things,
Smart Farming
vi
vii
vii
Halaman ini sengaja dikosongkan
iii
KATA PENGANTAR
vi
DAFTAR ISI
LEMBAR PENGESAHAN...................................................... i
LEMBAR PERSETUJUAN ................................................... iii
ABSTRAK ............................................................................. iii
ABSTRACT ............................................................................ v
KATA PENGANTAR ............................................................ v
DAFTAR ISI......................................................................... vii
DAFTAR GAMBAR ............................................................. xi
DAFTAR TABEL ................................................................ xiii
DAFTAR KODE................................................................... xv
BAB I PENDAHULUAN ....................................................... 1
Latar Belakang .............................................................. 1
Rumusan Masalah ......................................................... 3
Batasan Masalah ........................................................... 4
Tujuan Penelitian .......................................................... 4
Manfaat Penelitian ........................................................ 5
Relevansi....................................................................... 5
BAB II TINJAUAN PUSTAKA ............................................. 7
Studi Literatur ............................................................... 7
Dasar Teori ................................................................. 10
2.2.1 Arduino .............................................................. 10
2.2.2 Hidroponik, Nutrisi A, dan Nutrisi B ................. 11
2.2.3 Total Dissolved Solids dan Parts Per Million ..... 11
2.2.4 pH (Power of Hydrogen) .................................... 11
2.2.5 Temperatur ......................................................... 12
2.2.6 CodeIgniter ........................................................ 12
2.2.7 MySQL .............................................................. 13
2.2.8 REST API .......................................................... 13
2.2.8.1 GET.................................................... 14
2.2.8.2 POST.................................................. 14
2.2.8.3 PUT .................................................... 14
2.2.8.4 PATCH .............................................. 14
2.2.8.5 DELETE ............................................ 14
2.2.9 Pertimbangan Pemilihan Sensor ......................... 14
2.2.9.1 Sensor Suhu Air DS18B20 ................. 15
2.2.9.2 Sensor Total Dissolved Solids DFRobot
SKU SEN0244 .................................................. 15
2.2.9.3 pH meter DFRobot SKU SEN0161 .... 16
2.2.9.4 Sensor Ultrasonik HC-SR04 .............. 16
2.2.10 Pertimbangan Pemilihan Aktuator.................... 17
2.2.10.1 Katup Solenoida ............................... 17
2.2.10.2 Relai ................................................. 18
BAB III METODOLOGI ...................................................... 19
Studi Literatur ............................................................. 20
Analisis ....................................................................... 20
3.2.1 Aplikasi .............................................................. 20
3.2.2 Arduino .............................................................. 20
Desain ......................................................................... 21
3.3.1 Desain Perangkat Lunak..................................... 22
3.3.2 Desain Perangkat Keras ..................................... 22
Implementasi Sistem ................................................... 22
Testing Aplikasi .......................................................... 23
Dokumentasi Tugas Akhir .......................................... 23
BAB IV PERANCANGAN ................................................. 25
Tahap Analisis ............................................................ 25
Desain Sistem ............................................................. 28
Desain Perangkat Keras .............................................. 30
4.3.1 Desain Perangkat Arduino.................................. 30
4.3.2 Desain Wadah Larutan Hidroponik .................... 33
4.3.3 Desain Wadah Larutan Kontrol .......................... 34
4.3.4 Desain Kotak Perangkat Arduino ....................... 34
4.3.5 Desain Instalasi Hidroponik ............................... 35
4.3.6 Desain Program Mikrokontroler Arduino .......... 35
Desain Database ......................................................... 38
Desain Perangkat Lunak ............................................. 42
4.5.1 Use Case Aplikasi Web...................................... 42
4.5.2 Desain Aplikasi Web Client ............................... 49
4.5.2.1 Detil Desain MVC Aplikasi Web Client
50
4.5.2.2 Class Diagram Aplikasi Web Client ... 55
4.5.3 Desain Aplikasi Web API................................... 56
4.5.3.1 Detil Desain MVC Aplikasi Web API 57
viii
4.5.3.2 Class Diagram Aplikasi Web Client ... 65
Desain Testing Sistem ................................................. 65
4.6.1 Desain Testing Perangkat Keras ......................... 66
Desain Testing Perangkat Lunak ................................. 68
BAB V IMPLEMENTASI .................................................... 71
Lingkungan Implementasi Sistem ............................... 71
Implementasi Perangkat Keras .................................... 73
5.2.1 Implementasi Program Perangkat Keras Arduino
.................................................................................... 76
Implementasi Aplikasi Web Client ............................. 87
5.3.1 Implementasi Model Aplikasi Web Client.......... 87
5.3.2 Implementasi Controller Aplikasi Web Client ... 95
5.3.3 Implementasi View Aplikasi Web Client .......... 103
Implementasi Aplikasi Web API ............................... 113
5.4.1 Implementasi Model Aplikasi Web API ........... 114
5.4.2 Implementasi Controller Aplikasi Web API .... 120
Implementasi Database............................................. 136
Testing Sistem ........................................................... 138
5.6.1 Testing Perangkat Keras ................................... 139
5.6.2 Testing Perangkat Lunak .................................. 142
BAB VI HASIL DAN PEMBAHASAN ............................. 145
Arsitektur Sistem ...................................................... 145
Komunikasi Aplikasi Web API Validasi JWT .......... 146
Hasil Pembacaan Grafik Tanaman Hidroponik ......... 147
Hasil Pertumbuhan Tanaman .................................... 149
BAB VII KESIMPULAN DAN SARAN............................ 155
Kesimpulan ............................................................... 155
Saran ......................................................................... 155
DAFTAR PUSTAKA ......................................................... 157
BIODATA PENULIS ......................................................... 161
ix
Halaman ini sengaja dikosongkan
x
DAFTAR GAMBAR
xi
Gambar 5. 15 Halaman Hapus Mikrokontroler ................... 110
Gambar 5. 16 Tampilan Halaman Dashboard Sensor .......... 111
Gambar 5. 17 Halaman Tambah Sensor .............................. 112
Gambar 5. 18 Halaman Ubah Sensor .................................. 112
Gambar 5. 19 Halaman Hapus Sensor ................................. 113
Gambar 5. 20 Hasil Implementasi Aplikasi Web API ......... 114
Gambar 6. 1 Arsitektur Sistem ............................................ 145
Gambar 6. 2 Post Data menggunakan JWT yang benar ...... 146
Gambar 6. 3 Post JWT menggunakan JWT yang salah ....... 147
Gambar 6. 4 Grafik pH selama 7 hari .................................. 148
Gambar 6. 5 Grafik Total Dissolveds Solids selama 7 hari .. 148
Gambar 6. 6 Grafik Temperatur selama 7 hari .................... 149
Gambar 6. 7 Tanaman Sebelum Proses Budidaya ............... 150
Gambar 6. 8 Tanaman Otomatis Sesudah Budidaya............ 151
Gambar 6. 9 Tanaman Manual Sesudah Budidaya .............. 151
Gambar 6. 10 Perbandingan Pertumbuhan Tanaman ........... 152
xii
DAFTAR TABEL
xiii
Tabel 4. 31 Function pada Controller User............................ 59
Tabel 4. 32 Function pada Controller Project ........................ 59
Tabel 4. 33 Function pada Controller Microcontroller .......... 60
Tabel 4. 34 Function pada Controller Sensor ........................ 62
Tabel 4. 35 Function pada Controller Log ............................. 63
Tabel 4. 36 Test Case Hardware............................................ 66
Tabel 4. 37 Test Case Perangkat Lunak ................................ 68
Tabel 5. 1 Spesifikasi Komputer Implementasi ..................... 71
Tabel 5. 2 Spesifikasi Perangkat Keras Implementasi ........... 71
Tabel 5. 3 Spesifikasi Aplikasi Web Client ........................... 72
Tabel 5. 4 Spesifikasi Aplikasi Web API .............................. 72
Tabel 5. 5 Hasil Testing Perangkat Keras ........................... 139
Tabel 5. 7 Hasil Testing Perangkat Lunak........................... 142
Tabel 6. 1 Tabel Tinggi Tanaman menggunakan Sistem
Otomatis .............................................................................. 152
Tabel 6. 2 Tabel Tinggi Tanaman menggunakan Sistem Manual
............................................................................................ 153
xiv
DAFTAR KODE
xv
Halaman ini sengaja dikosongkan
xvi
BAB I
PENDAHULUAN
Latar Belakang
Seiring dengan perkembangan zaman yang semakin modern,
banyak kaum urban yang pindah ke kota untuk mencari
pekerjaan yang lebih bagus dan meningkatkan
kesejahteraannya. Tempat tinggal di perkotaan sangat
dibutuhkan untuk membangun rumah yang layak dihuni untuk
keluarga-keluarga baru. Namun berdasarkan data yang
didapatkan dari BPS, luas lahan pertanian kian menurun. Pada
tahun 2017 luas lahan masih 7,75 hektare, lalu tahun 2018
mengalami penurunan hingga tinggal 7,1 hektare [1]. Banyak
lahan pertanian yang dikonversi sehingga dapat menjadi tersisa
hanya 7,1 hektare saja, sedangkan populasi khususnya di
perkotaan besar semakin meningkat seiring dengan kebutuhan
akan pangan. Dibutuhkan teknik solusi pertanian yang modern
untuk mengatasi permasalahan kebutuhan akan pangan.
Rumusan Masalah
Berdasarkan latar belakang yang telah dijelaskan sebelumnya,
rumusan masalah pada penelitian tugas akhir ini adalah sebagai
berikut:
4
1. Bagaimana menggunakan sensor total dissolved solids,
pH, dan temperatur pada larutan hidroponik?
2. Bagaimana menggunakan aktuator untuk
mengendalikan indikator total dissolved solids, dan pH
pada larutan hidroponik?
3. Bagaimana membuat sistem yang menghubungkan
sensor dan aktuator dengan Arduino untuk melakukan
pengendalian otomatis?
4. Bagaimana membangun API yang dapat terhubung
dengan tampilan antar muka untuk proses pemantauan?
5. Bagaimana membuat tampilan antarmuka yang dapat
menampilkan visualisasi untuk proses pemantauan?
Batasan Masalah
Berdasarkan permasalahan yang telah diuraikan sebelumnya,
adapun batasan masalah dalam tugas akhir ini adalah sebagai
berikut :
1. Perancangan sistem merupakan prototipe yang diuji
coba pada budidaya tanaman menggunakan teknik
hidroponik di dalam ruangan yang tidak terkena sinar
matahari secara langsung.
2. Indikator yang diukur adalah jumlah partikel terlarut,
pH, dan temperatur.
3. Antarmuka yang dibuat untuk menampilkan data dibuat
dalam bentuk website.
4. Perancangan API dan antarmuka menggunakan bahasa
pemrograman PHP.
5. Air yang digunakan adalah air yang memiliki
kandungan total dissolved solids mendekati 0 ppm.
6. Tanaman yang digunakan untuk budidaya adalah
Brassica rapa.
Tujuan Penelitian
Berdasarkan latar belakang dan rumusan masalah yang telah
dijelaskan sebelumnya, tujuan dari penelitian tugas akhir ini
adalah mengembangkan prototipe sistem smart farming
hidroponik yang berfungsi untuk mengumpulkan data yang
5
Manfaat Penelitian
Manfaat yang diharapkan dapat diperoleh dari penelitian tugas
akhir ini adalah sebagai berikut:
1. Menjadi panduan bagi petani hidroponik yang akan
mengimplementasikan sistem smart farming
hidroponik berbasis Arduino menggunakan sensor total
dissolved solids, pH, dan temperatur pada sistem
hidroponik yang sudah ada untuk membantu
melakukan proses pemantauan dan pengendalian
kondisi hidroponik.
2. Membantu individu dan atau kelompok untuk
mengembangkan sistem smart farming hidroponik
berbasis Arduino menggunakan sensor total dissolved
solids, pH, dan temperatur.
3. Menjadi referensi untuk melakukan pengembangan
pada bidang Internet of Things.
Relevansi
Tugas akhir ini disusun untuk memenuhi salah satu syarat
kelulusan sebagai Sarjana Komputer di Departemen Sistem
Informasi Fakultas Teknologi Informasi dan Komunikasi
(FTIK) Institut Teknologi Sepuluh Nopember (ITS). Tugas
akhir ini sesuai dengan penerapan mata kuliah dari laboratorium
Infrastruktur dan Keamanan Teknologi Informasi (IKTI)
Departemen Sistem Informasi FTIK ITS, yaitu Internet Untuk
Segala. Selain itu, juga berkaitan dengan mata kuliah pada
Departemen Sistem Informasi FTIK ITS, yaitu Pemrograman
Web, Sistem Basis Data, Teknologi Basis Data, dan Rancang
Bangun Perangkat Lunak.
6
Halaman ini sengaja dikosongkan
BAB II
TINJAUAN PUSTAKA
Studi Literatur
Pencarian penelitian-penelitian yang sudah dilakukan dijadikan
sebagai referensi dan menjadi pendukung untuk melakukan
pengerjaan pengembangan perangkat lunak pada penelitian
tugas akhir ini, seperti yang dijelaskan pada Tabel 2.1.
Penulis; Tahun
K. Kunyanuth, A. Udomlux, K. Nutthaphol; 2019
Pembahasan
Penelitian ini menyajikan pengembangan sistem hidroponik
otomatis berbasis aplikasi mobile menggunakan Arduino Wemos D1
sebagai mikrokontroler yang memungkinkan dapat terhubung
dengan internet melalui jaringan wi-fi. Perangkat keras dalam
penelitian ini yaitu: Wemos D1, modul relay, modul sensor
ultrasonik, sensor pH, katup solenoid, dan ambient light sensor.
Untuk menghubungkan mikrokontroller dengan Cloud yang
berisikan database, penelitian ini menggunakan Message Queuing
Telemetry Transport (MQTT). MQTT sangat cocok digunakan pada
alat sensor yang memiliki prosesor kecil dengan penggunaan
jaringan jarak jauh yang hanya membutuhkan daya konsumsi rendah
dan bandwidth terbatas. Database yang digunakan adalah Firebase
karena database ini dapat tersinkronisasi secara real-time. Otomasi
yang dilakukan dibagi menjadi empat bagian. Bagian pertama
adalah pengaturan suhu dan kelembaban. Saat sistem mendapatkan
nilai dari sensor suhu dan kelembaban. Pompa air akan dialirkan
7
8
Dasar Teori
2.2.1 Arduino
Arduino adalah mikrokontroler open source yang dapat dengan
mudah diprogram, dihapus dan diprogram ulang kapan saja.
Platform Arduino dirancang untuk membuat perangkat yang
berinteraksi dengan lingkungan menggunakan sensor dan
aktuator. Arduino juga dapat dijadikan sebagai mikrokontroler
dengan mengambil input dari sensor dan mengendalikan output
ke aktuator untuk berbagai perangkat elektronik. Arduino
menggunakan perangkat keras yaitu Arduino board
development salah satunya yaitu Arduino Mega yang dapat
dijalankan menggunakan bahasa pemrograman C, C++, dan
Arduino. Untuk mengembangkan kode perangkat lunak,
Arduino menggunakan Arduino IDE (Integrated Development
Environment) [8].
11
2.2.5 Temperatur
Kuantitas yang ditetapkan sebagai suhu termodinamika
didefinisikan oleh hukum termodinamika; ini ditunjukkan oleh
simbol T, dan memiliki satuan kelvin, simbol K. Satuan suhu
termodinamika didefinisikan sebagai fraksi 1 / 273,16 dari
termodinamika suhu titik tripel air. Dalam hal ini biasanya
sering dilakukan mengekspresikan suhu dengan selisih dari
273,15 K, nilai untuk titik beku es. Suhu T termodinamika ini
dinyatakan dikenal sebagai suhu t Celcius, yang didefinisikan
oleh persamaan [14]:
𝑡 𝑇
= − 273.151 (1)
℃ K
2.2.6 CodeIgniter
CodeIgniter adalah toolkit kerangka kerja untuk membangun
aplikasi web menggunakan PHP dengan cepat. Tujuannya
adalah memungkinkan pengembangan proyek lebih cepat
daripada menulis baris kode dari awal (native), dengan
tersedianya pilihan libraries, antarmuka yang sederhana dan
struktur logis untuk mengakses libraries. CodeIgniter
menggunakan pattern Model-View-Controller, yang dapat
melakukan pemisahan antara logika proses kode dan tampilan
presentasi website. Model adalah objek dengan parameter
tertentu, View adalah tampilan depan website, dan Controller
adalah pusat dari logika yang mengatur alur proses dari website.
Pola pengembangan seperti ini sangat cocok dengan
penggunaan template karena tampilan presentasi website yang
terpisah memudahkan para designer untuk merancang tampilan
desain. Sistem ini juga dapat ditambahkan dengan berbagai
custom add-on yang dapat dikonfigurasi secara manual [15].
13
2.2.7 MySQL
MySQL adalah sistem manajemen basis data open-source. -
Database adalah kumpulan data yang terstruktur. Data yang
disimpan dapat berbagai macam. Sekumpulan data tersebut
akan dikelompokkan menjadi sejumlah besar informasi yang
berguna bagi perusahaan. MySQL menggunakan basis data
relasional yang menyimpan data dalam tabel terpisah daripada
meletakkan semua data dalam satu ruang penyimpanan besar.
Struktur basis data disusun berdasarkan tabel-tabel lalu
dijadikan file fisik yang terpisah agar dapat dilakukannya
optimalisasi [17].
2.2.8.1 GET
URI ini akan mengambil semua anggota dari object model
(member resources) dari database (collection resources) yang
diletakkan pada sekumpulan array sebagai response body.
2.2.8.2 POST
Membuat sebuah object model (member resources) di database
(collection resources) menggunakan metode POST pada
request body.
2.2.8.3 PUT
Menggantikan seluruh representasi object model (member
resources) di database (collection resources) berdasarkan
metode PUT pada request body.
2.2.8.4 PATCH
Memperbarui seluruh representasi object model (member
resources) di database (collection resources) berdasarkan
metode PATCH pada request body. Perbedaan dari metode PUT
yaitu metode PATCH hanya memperbarui sebagian entity dan
hanya memberi parameter entity yang mana yang akan
diperbarui pada request body. Metode PUT akan menggantikan
sebuah representasi object model (member resources) dan
memberi seluruh parameter pada request body.
2.2.8.5 DELETE
Menghapus seluruh representasi object model (member
resources) di database (collection resources) berdasarkan
metode DELETE pada request body.
2.2.10.2 Relai
Relai adalah komponen aktuator elekromekanik yang dapat
memutuskan atau menghubungkan arus listrik kepada
komponen lain yang memiliki perbedaan tegangan. Rangkaian
ini digunakan untuk mengontrol satu alat listrik 240V langsung
dari mikrokontroler atau sirkuit tegangan rendah. Ada tiga pin
pada papan relay yaitu normally open (NO), normally closed
(NC) dan common (C). Pin common terhubung pada pin NC saat
relai mati dan ke pin NO saat relay menyala. "VCC" dan pin
"GND" dari relay terhubung ke sumber 5V dan ground (GND)
masing-masing [26]. Alat ini berfungsi sebagai memutuskan
dan menghubungkan katup solenoid agar dapat dikendalikan
menggunakan Arduino.
Studi Literatur
Analisis
Desain
Implementasi Sistem
Testing
Berhasil?
19
20
Studi Literatur
Pada tahap ini dilakukan pengumpulan literatur yang
mendukung dalam pengerjaan tugas akhir ini. Tugas akhir ini
menggunakan literatur yang berisi tentang penjelasan konsep-
konsep dasar atau penelitian sebelumnya yang terkait dengan
tugas akhir ini dalam bentuk buku, jurnal, ataupun website.
Studi literatur berguna dalam hal pemahaman terhadap konsep-
konsep umum yang akan diterapkan pada tugas akhir serta
menjelaskan perbedaan dari penelitian sebelumnya yang telah
dilakukan. Luaran dari proses studi literatur ini adalah
pengetahuan konsep tentang sistem yang akan dibuat.
Analisis
Seluruh Berdasarkan konsep pengetahuan yang sudah
didapatkan dari tahap studi literatur akan digunakan sebagai
panduan tahapan dalam melakukan analisis kebutuhan sistem.
Sehingga keluaran dalam tahapan ini adalah terbentuknya
spesifikasi dari sistem perangkat lunak dan perangkat keras.
Adapun spesifikasi sistem yang akan dibangun sebagai berikut:
3.2.1 Aplikasi
• Dapat menerima dan menyimpan data total dissolved solids,
pH, dan temperatur yang dikirim dari Arduino ke database
• Dapat menampilkan data visualisasi total dissolved solids,
pH, dan temperatur
• Dapat mengatur konfigurasi batasan normal variabel tiap
indikator total dissolved solids, pH, dan temperatur
• Dapat menghapus atau menambah alat Arduino yang
terhubung
3.2.2 Arduino
• Adaw Dapat menerima nilai pembacaan sensor total
dissolved solids, pH, dan temperatur
• Dapat mengirim data hasil pembacaan sensor ke aplikasi
web API
• Dapat terhubung dengan internet menggunakan access point
wi-fi
21
Desain
Pada tahap ini dilakukan desain sistem yang akan dibuat
berdasarkan spesifikasi sistem yang dibutuhkan yang telah
dibuat pada tahap analisis. Keluaran dari tahapan ini adalah
terbentuknya hasil desain dari sistem. Tahap desain akan dibagi
menjadi dua yaitu tahap desain perangkat lunak dan perangkat
keras.
Sensor
Arduino Aplikasi
Access Web
Mega Point
Aktuator Client
Implementasi Sistem
Pada tahapan implementasi akan dilakukan proses perakitan
sensor dan aktuator pada Arduino pada sistem hidroponik.
Untuk mendapatkan nilai sensor yang akurat dibutuhkan
kalibrasi terhadap masing-masing sensor dalam merangkai
komponen-komponen perangkat keras. Proses kalibrasi
dilakukan dengan melakukan pencocokan terhadap hasil
pembacaan dari sensor Arduino dengan alat pertanian yang
memiliki fungsi yang sama. Cara melakukan kalibrasi masing-
masing sensor agar akurat adalah dilakukan dengan cara
mencocokkan pengukuran dengan alat pertanian yang sejenis
yang sesuai dengan indikator yang akan diukur. Hasil dari
proses kalibrasi ini adalah ketepatan dari pembacaan sensor
Arduino yang sesuai dengan alat pertanian yang sudah ada. Jika
pembacaan sensor yang terhubung dengan Arduino dengan alat
pertanian hidroponik yang sejenis sudah cocok, maka proses
23
Testing Aplikasi
Pada tahap testing akan dilakukan pengujian terhadap
keseluruhan sistem yang telah dibuat. Pengujian terhadap sistem
dilakukan dengan cara melakukan test case dimana setiap case
memiliki skenario yang harus dilakukan. Jika test case yang
dilakukan terdapat skenario yang tidak sesuai dengan
ekspektasi, maka proses pengerjaan kembali ke tahap
implementasi dimana di tahap tersebut dilakukan perbaikan bug
yang ditemukan pada saat test case dilakukan. Tahap ini akan
selesai jika seluruh test case telah berhasil dijalankan tanpa
kendala. Luaran dari tahap ini adalah dokumentasi seluruh test
case yang telah dijalankan.
Tahap Analisis
Pada tahap awal dari pembuatan sistem dimulai dengan
mengidentifikasi seluruh informasi dari sistem yang dibuat.
Pengumpulan Informasi dilakukan dengan melakukan
wawancara kepada narasumber pegiat hidroponik dan survey
langsung ke kebun hidroponik milik narasumber tersebut.
Narasumber wawancara adalah Sulihan yang memiliki kebun
hidroponik dan jasa pembuatan instalasi hidroponik “Jawara
Farm”.
Kondisi Keputusan
pH melebihi nilai batas atas Menghidupkan katup
solenoid melalui relai berisi
larutan asam yang terhubung
dengan alat untuk
menurunkan pH
Nilai total dissolved solids Menghidupkan katup
kurang dari nilai batas solenoid melalui relai berisi
bawah larutan nutrisi A dan B yang
terhubung dengan alat untuk
menaikkan nilai total
dissolved solids
Tinggi air kurang dari nilai Menghidupkan katup
batas bawah solenoid melalui relai berisi
air yang terhubung dengan
alat untuk menambah volume
larutan hidroponik hingga
ketinggian air mencapai nilai
minimum
No Kategori Kebutuhan
1 Perangkat Perangkat dapat mengetahui informasi
Arduino pH, total dissolved solids, dan
temperatur dengan menggunakan sensor.
2 Perangkat Perangkat dapat mengirimkan informasi
Arduino suhu dan kelembapan secara berkala ke
aplikasi web client dengan selang waktu.
3 Perangkat Perangkat dapat mengatur katup
Arduino solenoid melalui relai sesuai dengan
batas atas dan bawah pH dan total
dissolved solids yang telah ditentukan
pada aplikasi web client.
4 Perangkat Perangkat dapat menerima informasi
Arduino konfigurasi sensor yang telah diatur pada
aplikasi web client.
5 Aplikasi Aplikasi dapat mengelola daftar proyek
Web milik user seperti melihat, mengubah,
menambahkan, menghapus proyek.
6 Aplikasi Aplikasi dapat mengelola daftar
Web mikrokontroler milik user seperti
melihat, mengubah, menambahkan,
menghapus mikrokontroler.
7 Aplikasi Aplikasi dapat menerima informasi pH,
web total dissolved solids, dan temperatur
dari tiap mikrokontroler Arduino yang
telah terdaftar.
8 Aplikasi Aplikasi dapat menyimpan informasi
web pH, total dissolved solids, dan
temperatur yang didapat dari
mikrokontroler Arduino.
28
No Kategori Kebutuhan
1 Perangkat Perangkat dapat terhubung secara
Arduino otomatis ke jaringan Wi-Fi yang telah
ditentukan
2 Perangkat Perangkat dapat berjalan dengan stabil
Arduino
3 Aplikasi Aplikasi menerima setiap request
web menggunakan JWT untuk keamanan
5 Aplikasi Aplikasi dapat berjalan pada web
web browser
6 Aplikasi Aplikasi dapat berjalan dengan stabil
web
Desain Sistem
Desain sistem dirancang untuk menjadi acuan pada
pengembangan Smart Farming hidroponik yang akan dibuat.
Desain sistem yang akan dibuat menjelaskan bagimana alur
sebuah data dari instalasi hidroponik diambil, lalu dikirimkan
ke aplikasi web API, kemudian dapat ditampilan pada
dashboard aplikasi web client, hingga dapat mengendalikan
keluaran yang diinginkan. Sehingga keluaran pada tahap ini
adalah hasil berupa alur dari sistem.
29
Desain Database
Basis data yang digunakan pada aplikasi web menggunakan
basis data mySQL. Gambar 4.7 adalah desain dari basis data
yang akan digunakan pada aplikasi web.
Tabel: device
Nama Kolom Deskripsi
user_id (PK) Id Primary Key pengguna
user_email Email pengguna
user_password Password pengguna
user_fullname Nama lengkap pengguna
40
Tabel: device
Nama Kolom Deskripsi
project_id (PK) Id Primary Key Proyek pengguna
user_id (FK) Pemilik proyek menggunakan
referensi user_id
project_name Nama proyek
project_institution Nama lembaga
project_city Nama kota
project_img Nama gambar beserta format
Tabel: device
Nama Kolom Deskripsi
microcontroller_id (PK) Id Primary Key perangkat
mikrokontroler pengguna
project_id (FK) Proyek yang berhubungan
dengan mikrokontroler
microcontroller_name Nama mikrokontroler
microcontroller_description Nama lembaga
microcontroller_img Nama gambar beserta format
Tabel: device
Nama Kolom Deskripsi
sensor_id (PK) Id Primary Key perangkat sensor
pengguna
41
Tabel: device
Nama Kolom Deskripsi
log_id (PK) Id Primary Key datalog sensor
sensor_id (FK) Datalog yang berhubungan dengan
sensor
sensor_value Nilai pembacaan dari sensor yang
terhubung dengan mikrokontroler
yang berhubungan
log_date Tanggal datalog yang telah
tersimpan
log_time Waktu datalog yang telah tersimpan
42
Dari use case model di atas akan dibuat use case scenario yang
ditunjukkan pada Tabel 4.20 hingga Tabel 4.28 berikut ini.
43
Tabel 4. 13 Use Case Scenario Menerima Nilai Batas Bawah dan Batas Atas
Controller : Auth
Nama Function Deskripsi
index() Berfungsi untuk menerima
JWT dan user_id dari
halaman login dan redirect
ke halaman dashboard
proyek berdasarkan user_id
logout() Function yang berfungsi
untuk menghancurkan
seluruh Session yang aktif
dan logout user menuju
halaman login
Controller : Project
Nama Function Deskripsi
__construct() Berfungsi untuk memanggil
function default yang harus
dipenuhi oleh masing-
53
Controller : Microcontroller
Nama Function Deskripsi
__construct() Berfungsi untuk memanggil
function default yang harus
dipenuhi oleh masing-
masing function di dalam
controller tersebut
project_id() Function yang berfungsi
untuk menampilkan
dashboard mikrokontroler
berdasarkan project_id
54
Controller : Sensor
Nama Function Deskripsi
__construct() Berfungsi untuk memanggil
function default yang harus
dipenuhi oleh masing-
masing function di dalam
controller tersebut
microcontroller_id() Function yang berfungsi
untuk menampilkan
dashboard sensor
berdasarkan
microcontroller_id
add_sensor() Function yang berfungsi
mengirimkan request POST
ke aplikasi web API untuk
membuat data sensor baru
55
Controller : Auth
Nama Function Deskripsi
login_post() Berfungsi untuk menerima
request POST untuk
melakukan login
Controller : Auth
Nama Function Deskripsi
index_post() Berfungsi untuk menerima
request POST untuk
membuat akun baru
Controller : Project
Nama Function Deskripsi
__construct() Berfungsi untuk memanggil
function default yang harus
dipenuhi oleh masing-
masing function di dalam
controller tersebut
verify_request() Function yang berfungsi
untuk memvalidasi JWT
pada header request
index_get() Function yang berfungsi
menerima request GET dari
aplikasi web client kemudian
mengirimkan response data
proyek
60
Controller : Microcontroller
Nama Function Deskripsi
__construct() Berfungsi untuk memanggil
function default yang harus
dipenuhi oleh masing-
masing function di dalam
controller tersebut
61
Controller : Sensor
Nama Function Deskripsi
__construct() Berfungsi untuk memanggil
function default yang harus
dipenuhi oleh masing-
masing function di dalam
controller tersebut
verify_request() Function yang berfungsi
untuk memvalidasi JWT
pada header request
index_get() Function yang berfungsi
menerima request GET dari
aplikasi web client kemudian
mengirimkan response data
sensor
microcontroller_id_get() Function yang berfungsi
menerima request GET dari
aplikasi web client kemudian
mengirimkan response data
sensor berdasarkan
microcontroller_id yang
dimiliki oleh user
index_post() Function yang berfungsi
menerima request POST
beserta JWT dari aplikasi
web client untuk membuat
data Sensor baru
index_put() Function yang berfungsi
menerima request PUT
beserta JWT dari aplikasi
web client untuk mengubah
63
Controller : Log
Nama Function Deskripsi
__construct() Berfungsi untuk memanggil
function default yang harus
dipenuhi oleh masing-
masing function di dalam
controller tersebut
verify_request() Function yang berfungsi
untuk memvalidasi JWT
pada header request
index_get() Function yang berfungsi
menerima request GET dari
aplikasi web client kemudian
mengirimkan response data
log
microcontroller_id_get() Function yang berfungsi
menerima request GET dari
aplikasi web client kemudian
mengirimkan response
seluruh data log sensor
berdasarkan
microcontroller_id yang
dimiliki oleh user
64
akan redirect ke
halaman login
Pengguna tidak Aplikasi web client
memasukkan data akan redirect ke
yang sesuai halaman signup
kembali
Melihat Membuka halaman Aplikasi web client
dashboard dashboard proyek menampilkan daftar
Proyek dan telah login proyek
Belum melakukan Redirect ke halaman
login login
Mengelola Mengklik tombol User dapat membuat,
Proyek buat, ubah, atau mengubah, atau
hapus proyek pada menghapus proyek
halaman dashboard
proyek
Melihat Membuka halaman Aplikasi web client
dashboard dashboard menampilkan daftar
Mikrokontroler mikrokontroler dan mikrokontroler
telah login
Belum melakukan Redirect ke halaman
login login
Mengelola Mengklik tombol User dapat membuat,
Mikrokontroler buat, ubah, atau mengubah, atau
hapus menghapus
mikrokontroler mikrokontroler
pada halaman
dashboard
mikrokontroler
Melihat Membuka halaman Aplikasi web client
dashboard dashboard sensor menampilkan daftar
Sensor dan telah login sensor dan
menampilkan data log
dalam bentuk grafik
Belum melakukan Redirect ke halaman
login login
70
71
72
1. WifiEsp v2.2.2
2. ArduinoJson v6.15.2
3. SoftwareSerial
4. LiquidCrystal_I2C
Library
5. OneWire v2.3.5
6. Dallas Temperature v3.8.0
7. DFRobot_PH
8. GravityTDS
Tabel 5. 3 Spesifikasi Aplikasi Web Client
1. #include <ArduinoJson.h>
2. #include "WiFiEsp.h"
3. #ifndef HAVE_HWSERIAL3
4. #endif
5. #include <SoftwareSerial.h>
6. #include <OneWire.h>
7. #include <DallasTemperature.h>
8. #define ONE_WIRE_BUS 2
9. OneWire oneWire(ONE_WIRE_BUS);
10. DallasTemperature tempSensors(&oneWire);
11. #include "DFRobot_PH.h"
12. DFRobot_PH ph;
13. #include <EEPROM.h>
14. #include "GravityTDS.h"
15. #define TdsSensorPin A0
16. GravityTDS gravityTds;
17. #include <LiquidCrystal_I2C.h>
18. LiquidCrystal_I2C lcd(0x27, 20, 4);
19. #define pingPin 7
20. #define echoPin 6
21. #define PH_PIN A1
22. #define relay1 8
23. #define relay2 9
24. #define relay3 10
25. #define relay4 11
64. lcd.init();
65. lcd.backlight();
66. lcd.clear();
67. lcd.setCursor (0, 0);
68. lcd.print("Initializing...");
69. delay(2000);
70. lcd.clear();
71. lcd.setCursor (0, 0);
72. lcd.print("Welcome to");
73. lcd.setCursor (0, 1);
74. lcd.print("Smart Farming");
75. lcd.setCursor (0, 2);
76. lcd.print("Hidroponik");
77. delay(2000);
78.
79. while ( status != WL_CONNECTED) {
80. Serial.print("Attempting to connect to WPA SS
ID: ");
81. Serial.println(ssid);
82. lcd.clear();
83. lcd.setCursor (0, 0);
84. lcd.print("Attempting to");
85. lcd.setCursor (0, 1);
86. lcd.print("connect to WPA SSID: ");
87. lcd.setCursor (0, 2);
88. lcd.print(ssid);
89. status = WiFi.begin(ssid, pass);
90. }
91. Serial.println("You're connected to the network
");
92. lcd.clear();
93. lcd.setCursor (0, 0);
94. lcd.print("You're connected");
95. lcd.setCursor (0, 1);
96. lcd.print(" to the network");
97.
98. printWifiStatus();
99. waktuMulai = millis();
100. }
216. }
271. } else {
272. return false;
273. }
274. }
287. client.println();
288. }
289. else {
290. Serial.println("Connection failed");
291. }
292. }
306. Serial.print(rssi);
307. Serial.println(" dBm");
308.
309. IPAddress gateway = WiFi.gatewayIP();
310. Serial.print("gateway:");
311. Serial.print(gateway);
312. Serial.println(" ");
313. }
1. <?php
2.
3. use GuzzleHttp\Client;
4.
5. class Project_model extends CI_Model {
6. public function get_projects_by_user_id($user_id) {
44. }
45.
46. public function edit_project($data) {
47. $client = new Client();
48. $response = $client->put($this->config-
>item('backend_url') . 'project/', [
49. 'headers' => [
50. 'Content-Type' => 'application/x-www-form-
urlencoded',
51. 'Accept' => 'application/x-www-form-
urlencoded',
52. 'Authorization' => $this->session-
>userdata('tokenJWT')
53. ],
54. 'form_params' => $data
55. ]);
56. $result = json_decode($response->getBody()-
>getContents(), true);
57. return $result;
58. }
59.
60. public function delete_project($data) {
61. $client = new Client();
62. $response = $client->delete($this->config-
>item('backend_url') . 'project/', [
63. 'headers' => [
64. 'Content-Type' => 'application/x-www-form-
urlencoded',
65. 'Accept' => 'application/x-www-form-
urlencoded',
66. 'Authorization' => $this->session-
>userdata('tokenJWT')
67. ],
68. 'form_params' => $data
69. ]);
70. $result = json_decode($response->getBody()-
>getContents(), true);
71. return $result;
72. }
73. }
1. <?php
2.
3. use GuzzleHttp\Client;
4.
5. class Microcontroller_model extends CI_Model {
6. public function get_microcontrollers($project_id
= NULL) {
7. $client = new Client();
8. $response = $client->get($this->config-
>item('backend_url') . 'microcontroller/', [
9. 'headers' => [
10. 'Content-Type' => 'application/json',
11. 'Accept' => 'application/json',
12. 'Authorization' => $this->session-
>userdata('tokenJWT')
13. ],
14. ]);
15. $result = json_decode($response->getBody()-
>getContents(), true);
16. return ($result);
17. }
18. public function get_microcontrollers_by_project_
id($project_id = NULL) {
19. $client = new Client();
20. $response = $client->get($this->config-
>item('backend_url') . 'microcontroller/project_i
d/' . $project_id . '', [
21. 'headers' => [
22. 'Content-Type' => 'application/json',
23. 'Accept' => 'application/json',
24. 'Authorization' => $this->session-
>userdata('tokenJWT')
25. ],
26. ]);
27. $result = json_decode($response->getBody()-
>getContents(), true);
28. return ($result);
91
29. }
30. public function create_microcontroller($data) {
1. <?php
2.
3. use GuzzleHttp\Client;
4.
5. class Sensor_model extends CI_Model {
6. public function get_sensors_by_microcontroller_i
d($microcontroller_id = NULL) {
7. $client = new Client();
8. $response = $client->get($this->config-
>item('backend_url') . 'sensor/microcontroller_id
/' . $microcontroller_id, [
9. 'headers' => [
10. 'Content-Type' => 'application/json',
11. 'Accept' => 'application/json',
93
1. <?php
2. defined('BASEPATH') or exit('No direct script acc
ess allowed');
3.
4. class Project extends CI_Controller {
5. public function __construct() {
6. parent::__construct();
7. $this->load->helper('auth');
8. is_logged_in();
9. $this->load->model('Project_model');
10. }
11.
12. public function index() {
13. redirect(base_url('project/user_id/' . $this-
>session->userdata('id')));
14. }
15.
16. public function user_id($user_id = NULL) {
17.
18. if ($user_id == $this->session-
>userdata('id')) {
19. $data['title'] = 'Dashboard - Project Ayotics'
;
20. $data['project'] = $this->Project_model-
>get_projects_by_user_id($user_id);
21. $data['user'] = $data['project']['user'];
22. $newdata = array(
96
1. <?php
2. defined('BASEPATH') or exit('No direct script acc
ess allowed');
98
3.
4. class Microcontroller extends CI_Controller {
5. public function __construct() {
6. parent::__construct();
7. $this->load->helper('auth');
8. is_logged_in();
9. $this->load-
>model('Microcontroller_model');
10. }
11.
12. public function index($project_id = NULL) {
13. redirect(base_url('microcontroller/project_id/'
. $this->session->userdata('project_id')));
14. }
15.
16. public function project_id($project_id = NULL) {
17. $newdata = [
18. 'project_id' => $project_id
19. ];
20. $this->session->set_userdata($newdata);
21. if ($project_id == $this->session-
>userdata('project_id')) {
22. $data['title'] = 'Dashboard - Microcontroller
Ayotics';
23. $data['microcontroller'] = $this-
>Microcontroller_model-
>get_microcontrollers_by_project_id($project_id);
1. <?php
2. defined('BASEPATH') or exit('No direct script acc
ess allowed');
3.
4. class Sensor extends CI_Controller {
5. public function __construct() {
6. parent::__construct();
7. $this->load->helper('auth');
8. is_logged_in();
9. $this->load->model('Sensor_model');
10. }
11.
12. public function index() {
13. redirect(base_url('sensor/microcontroller_id/'
. $this->session-
>userdata('microcontroller_id')));
14. }
15. public function microcontroller_id($microcontrol
ler_id = NULL) {
16. $newdata = [
17. 'microcontroller_id' => $microcontroller_id
18. ];
101
19. $this->session->set_userdata($newdata);
20. if ($microcontroller_id == $this->session-
>userdata('microcontroller_id')) {
21. $data['title'] = 'Dashboard - Data Log Ayotics
';
22. $data['log'] = $this->Sensor_model-
>get_logs_by_microcontroller_id($microcontroller_
id);
23. $data['user'] = $data['log']['user'];
24. $this->load->helper('url');
25. $this->load->view('layout/header', $data);
26. $this->load->view('layout/sidebar', $data);
27. $this->load->view('sensor/index', $data);
28. } else {
29. redirect(base_url('sensor/microcontroller_id/'
. $this->session-
>userdata('microcontroller_id')));
30. }
31. }
32. public function add_sensor() {
33. $data = [
34. 'microcontroller_id' => $this->session-
>userdata('microcontroller_id'),
35. 'sensor_name' => $this->input->post('sensor-
name'),
36. 'sensor_description' => $this->input-
>post('sensor-description'),
37. 'sensor_unit' => $this->input->post('sensor-
unit'),
38. 'sensor_value' => "0",
39. 'sensor_min_limit' => $this->input-
>post('sensor-min-limit'),
40. 'sensor_max_limit' => $this->input-
>post('sensor-max-limit'),
41. 'sensor_min_value' => $this->input-
>post('sensor-min-value'),
42. 'sensor_max_value' => $this->input-
>post('sensor-max-value'),
43. ];
44. $this->Sensor_model->create_sensor($data);
45. redirect(base_url('sensor/microcontroller_id/'
. $this->session-
>userdata('microcontroller_id')));
46. }
47.
102
1. <?php
2. class Auth_model extends CI_Model {
3. public function login($user_email, $user_passwor
d) {
4. return $this->db->get_where('users', [
5. 'user_email' => $user_email,
6. 'user_password' => $user_password
7. ])->row_array();
8. }
9. }
1. <?php
2. class User_model extends CI_Model {
3. public function create_user($data) {
4. $this->db->insert('users', $data);
5. return $this->db->affected_rows();
6. }
7. }
1. <?php
2. class Project_model extends CI_Model {
3. public function get_project($id = null) {
4. if ($id === null) {
5. return $this->db->get('projects')-
>result_array();
6. } else {
7. return $this->db->get_where('projects', [
8. 'project_id' => $id
9. ])->result_array();
10. }
11. }
12.
13. public function get_project_by_user_id($id = nul
l) {
14. if ($id === null) {
15. return $this->db->get('projects')-
>result_array();
16. } else {
17.
18. return $this->db->get_where('projects', [
19. 'user_id' => $id
20. ])->result_array();
21. }
22. }
23. public function create_project($data) {
24. $this->db->insert('project', $data);
25. return $this->db->affected_rows();
26. }
27.
28. public function update_project($data, $id) {
29. $this->db->where('project_id', $id);
30. $this->db->update('projects', $data);
31. return $this->db->affected_rows();
32. }
33.
34. public function delete_project($id) {
35. $this->db->where('project_id', $id);
36. $this->db->delete('projects');
37. return $this->db->affected_rows();
116
38. }
39. }
1. <?php
2. class Microcontroller_model extends CI_Model {
3. public function get_microcontroller($id = null)
{
4. if ($id === null) {
5. return $this->db->get('microcontrollers')-
>result_array();
6. } else {
7. return $this->db-
>get_where('microcontrollers', [
8. 'microcontroller_id' => $id
9. ])->result_array();
10. }
11. }
12. public function get_microcontroller_by_project_i
d($id = null) {
13. if ($id === null) {
14. return $this->db->get('microcontrollers')-
>result_array();
15. } else {
16. return $this->db-
>get_where('microcontrollers', [
17. 'project_id' => $id
18. ])->result_array();
19. }
20. }
21. public function create_microcontroller($data) {
22. $this->db->insert('microcontroller', $data);
117
1. <?php
2. class Sensor_model extends CI_Model {
3. public function get_sensor($id = null) {
4. if ($id === null) {
5. return $this->db->get('sensors')-
>result_array();
6. } else {
7. return $this->db->get_where('sensors', [
8. 'sensor_id' => $id
9. ])->result_array();
10. }
11. }
12. public function get_sensor_by_microcontoller_id(
$id = null) {
13. if ($id === null) {
118
1. <?php
2. class Log_model extends CI_Model {
3. public function get_log($id = null) {
4. if ($id === null) {
5. return $this->db->get('logs')-
>result_array();
119
6. } else {
7. return $this->db->get_where('logs', [
8. 'log_id' => $id
9. ])->result_array();
10. }
11. }
12. public function get_log_by_sensor_id($id = null)
{
13. if ($id === null) {
14. return $this->db->get('logs')-
>result_array();
15. } else {
16. $sql = "SELECT *
17. FROM (
18. SELECT *
19. FROM logs
20. WHERE sensor_id=" . $id . "
21. ORDER BY log_id
22. DESC LIMIT 24
23. ) sub
24. ORDER BY log_id ASC";
25. $query = $this->db->query($sql);
26. return $query->result_array();
27. }
28. }
29. public function create_log($data) {
30. $this->db->insert('logs', $data);
31. return $this->db->affected_rows();
32. }
33. }
1. <?php
2. defined('BASEPATH') or exit('No direct script acc
ess allowed');
3. require APPPATH . '/libraries/REST_Controller.php
';
4. class Auth extends REST_Controller {
5.
6. public function __construct() {
7. parent::__construct();
8. $this->load->model('Auth_model');
9. }
10.
11. public function login_post() {
12. $user_email = $this->post('user_email');
13. $user_password = $this-
>post('user_password');
14. $user = $this->Auth_model-
>login($user_email, $user_password);
15. if ($user_email === $user['user_email'] && $use
r_password === $user['user_password']) {
16. unset($user['user_password']);
17. $token = AUTHORIZATION::generateToken($user);
18. $status = parent::HTTP_OK;
19. $response = [
20. 'status' => $status,
21. 'token' => $token,
22. 'user' => $user
23. ];
24. $this->response($response, $status);
25. } else {
26. $this-
>response(['message' => 'Invalid email or passwor
d!'], parent::HTTP_NOT_FOUND);
27. }
28. }
29. }
1. <?php
2. header("Access-Control-Allow-
Methods: DELETE, POST, GET, OPTIONS");
3. defined('BASEPATH') or exit('No direct script acc
ess allowed');
4. require APPPATH . '/libraries/REST_Controller.php
';
5.
6. class User extends REST_Controller {
7. public function __construct() {
8. parent::__construct();
9. $this->load->model('User_model');
10. }
11.
12. public function index_post() {
13. $user_email = $this->post('user_email');
14. $user_password = $this-
>post('user_password');
15. $user_fullname = $this-
>post('user_fullname');
16. $data = [
17. 'user_email' => $user_email,
18. 'user_password' => $user_password,
19. 'user_fullname' => $user_fullname,
20. ];
21. if ($this->db-
>get_where('users', ['user_email' => $user_email]
)->row_array() == NULL) {
22. if ($this->User_model-
>create_user($data) > 0) {
23. $status = parent::HTTP_CREATED;
24. $response = [
25. 'status' => $status,
26. 'message' => 'Data User berhasil ditambah!'
27. ];
28. $this->response($response, $status);
29. }
30. } else {
31. $status = parent::HTTP_CONFLICT;
32. $response = [
33. 'status' => $status,
122
1. <?php
2. header("Access-Control-Allow-Origin: *");
3. header("Access-Control-Allow-
Methods: DELETE, POST, GET, OPTIONS");
4. defined('BASEPATH') or exit('No direct script acc
ess allowed');
5.
6. require APPPATH . '/libraries/REST_Controller.php
';
7.
8. class Project extends REST_Controller {
9. public function __construct() {
10. parent::__construct();
11. $this->load->model('Project_model');
12. }
13.
14. public function index_get() {
15. $user = $this->verify_request();
16. $id = $this->get('project_id');
17. if ($id === null) {
18. $project = $this->db->get('projects')-
>result_array();
19. } elseif ($id <= 0) {
20. $this->response(null, 400);
21. } else {
22.
23. $id = (int) $id;
24. $project = $this->Project_model-
>get_project($id);
25. }
26. $status = parent::HTTP_OK;
27. $response = [
28. 'id' => $id,
29. 'status' => $status,
30. 'user' => $user,
31. 'data' => $project
32. ];
33. $this->response($response, $status);
34. }
35. public function user_id_get() {
36. $user = $this->verify_request();
37. $id = $this->get('user_id');
38. if ($id === null) {
39. $project = $this->db->get('projects')-
>result_array();
124
1. <?php
2. header("Access-Control-Allow-Origin: *");
3. header("Access-Control-Allow-
Methods: DELETE, POST, GET, OPTIONS");
4. defined('BASEPATH') or exit('No direct script acc
ess allowed');
5.
6. require APPPATH . '/libraries/REST_Controller.php
';
7.
8. class Microcontroller extends REST_Controller {
9. public function __construct() {
10. parent::__construct();
11. $this->load->model('Microcontroller_model');
12. }
13.
14. public function index_get() {
15. $user = $this->verify_request();
16. $id = $this->get('microcontroller_id');
17. if ($id === null) {
18. $microcontroller = $this-
>Microcontroller_model->get_microcontroller();
19. } elseif ($id <= 0) {
20. $this->response(null, 400);
21. } else {
22.
23. $id = (int) $id;
24. $microcontroller = $this-
>Microcontroller_model-
>get_microcontroller($id);
25. }
26. $status = parent::HTTP_OK;
27. $response = [
28. 'id' => $id,
29. 'status' => $status,
30. 'user' => $user,
31. 'data' => $microcontroller
32. ];
33. $this->response($response, $status);
34. }
35. public function project_id_get() {
127
1. <?php
2. header("Access-Control-Allow-Origin: *");
3. header("Access-Control-Allow-
Methods: DELETE, POST, GET, OPTIONS");
4. defined('BASEPATH') or exit('No direct script acc
ess allowed');
5.
6. require APPPATH . '/libraries/REST_Controller.php
';
7.
8. class Sensor extends REST_Controller {
9. public function __construct() {
10. parent::__construct();
11. $this->load->model('Sensor_model');
12. }
13.
14. public function index_get() {
15. $user = $this->verify_request();
16. $id = $this->get('sensor_id');
17. if ($id === null) {
18. $sensor = $this->db->get('sensors')-
>result_array();
19. } elseif ($id <= 0) {
20. $this->response(null, 400);
21. } else {
22. $id = (int) $id;
23. $sensor = $this->Sensor_model-
>get_sensor($id);
24. }
25. $status = parent::HTTP_OK;
26. $response = [
27. 'id' => $id,
28. 'status' => $status,
29. 'user' => $user,
30. 'data' => $sensor
31. ];
32. $this->response($response, $status);
130
33. }
34. public function microcontroller_id_get() {
35. $user = $this->verify_request();
36. $id = $this->get('microcontroller_id');
37. if ($id === null) {
38. $sensor = $this->db->get('sensors')-
>result_array();
39. } elseif ($id <= 0) {
40. $this->response(null, 400);
41. } else {
42. $id = (int) $id;
43. $sensor = $this->Sensor_model-
>get_sensor_by_microcontoller_id($id);
44. }
45. $status = parent::HTTP_OK;
46. $response = [
47. 'id' => $id,
48. 'status' => $status,
49. 'user' => $user,
50. 'data' => $sensor
51. ];
52. $this->response($response, $status);
53. }
54.
55. public function index_post() {
56. date_default_timezone_set('Asia/Jakarta');
57. $now = date('Y-m-d H:i:s');
58. $user = $this->verify_request();
59. $data = [
60. 'microcontroller_id' => $this-
>post('microcontroller_id'),
61. 'sensor_name' => $this->post('sensor_name'),
62. 'sensor_description' => $this-
>post('sensor_description'),
63. 'sensor_unit' => $this->post('sensor_unit'),
64. 'sensor_value' => $this-
>post('sensor_value'),
65. 'sensor_min_limit' => $this-
>post('sensor_min_limit'),
66. 'sensor_max_limit' => $this-
>post('sensor_max_limit'),
67. 'sensor_min_value' => $this-
>post('sensor_min_value'),
68. 'sensor_max_value' => $this-
>post('sensor_max_value'),
131
137. ];
138. $this->response($response, $status);
139. }
140. }
1. <?php
2. header("Access-Control-Allow-Origin: *");
3. header("Access-Control-Allow-
Methods: DELETE, POST, GET, OPTIONS");
4. defined('BASEPATH') or exit('No direct script acc
ess allowed');
5. require APPPATH . '/libraries/REST_Controller.php
';
6.
7. class Log extends REST_Controller {
8. public function __construct() {
9. parent::__construct();
10. $this->load->model('Log_model');
11. $this->load->model('Sensor_model');
12. }
13.
14. public function index_get() {
15. $user = $this->verify_request();
16. $id = $this->get('log_id');
17. if ($id === null) {
18. $log = $this->db->get('logs')-
>result_array();
19. } elseif ($id <= 0) {
20. $this->response(null, 400);
134
21. } else {
22. $id = (int) $id;
23. $log = $this->Log_model->get_log($id);
24. }
25. $status = parent::HTTP_OK;
26. $response = [
27. 'id' => $id,
28. 'status' => $status,
29. 'user' => $user,
30. 'data' => $log
31. ];
32. $this->response($response, $status);
33. }
34.
35. public function microcontroller_id_get() {
36. $user = $this->verify_request();
37. $id = $this->get('microcontroller_id');
38. if ($id === null) {
39. $this->response(null, 400);
40. } elseif ($id <= 0) {
41. $this->response(null, 400);
42. } else {
43. $id = (int) $id;
44. $list_sensor = $this->Sensor_model-
>get_sensor_by_microcontoller_id($id);
45. $list_log = [];
46. for ($i = 0; $i < sizeof($list_sensor); $i++)
{
47. if ($this->Log_model-
>get_log_by_sensor_id($list_sensor[$i]['sensor_id
']) != NULL) {
48. $temp_list_log['sensor_id'] = $list_sensor[$
i]['sensor_id'];
49. $temp_list_log['microcontroller_id'] = $list
_sensor[$i]['microcontroller_id'];
50. $temp_list_log['sensor_name'] = $list_sensor
[$i]['sensor_name'];
51. $temp_list_log['sensor_description'] = $list
_sensor[$i]['sensor_description'];
52. $temp_list_log['sensor_unit'] = $list_sensor
[$i]['sensor_unit'];
53. $temp_list_log['sensor_min_limit'] = $list_s
ensor[$i]['sensor_min_limit'];
54. $temp_list_log['sensor_max_limit'] = $list_s
ensor[$i]['sensor_max_limit'];
135
Implementasi Database
Database dibutuhkan untuk memfasilitasi kebutuhan
penyimpanan data pada aplikasi web API. Database MySQL
adalah jenis dataabase yang digunakan pada penelitian ini.
Untuk memudahkan dalam pengelolaan database, digunakan
tools seperti phpMyAdmin. Berikut adalah hasil implementasi
yang telah dilakukan dalam bentuk data definition language
(DDL) untuk melakukan pembuatan struktur database yang
ditunjukkan pada Kode 5.33.
63.
64. ALTER TABLE `projects`
65. ADD PRIMARY KEY (`project_id`);
66.
67. ALTER TABLE `sensors`
68. ADD PRIMARY KEY (`sensor_id`);
69.
70. ALTER TABLE `users`
71. ADD PRIMARY KEY (`user_id`);
72.
73. ALTER TABLE `logs`
74. MODIFY `log_id` int(11) NOT NULL AUTO_INCREMENT
, AUTO_INCREMENT=2139;
75.
76. ALTER TABLE `microcontrollers`
77. MODIFY `microcontroller_id` int(11) NOT NULL AU
TO_INCREMENT, AUTO_INCREMENT=48;
78.
79. ALTER TABLE `projects`
80. MODIFY `project_id` int(11) NOT NULL AUTO_INCRE
MENT, AUTO_INCREMENT=4;
81.
82. ALTER TABLE `sensors`
83. MODIFY `sensor_id` int(11) NOT NULL AUTO_INCREM
ENT, AUTO_INCREMENT=10;
84.
85. ALTER TABLE `users`
86. MODIFY `user_id` int(11) NOT NULL AUTO_INCREMEN
T, AUTO_INCREMENT=13;
87. COMMIT;
88.
89. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_
SET_CLIENT */;
90. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER
_SET_RESULTS */;
91. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_
CONNECTION */;
Testing Sistem
Pengujian pada hardware dilakukan sesuai desain yang telah
dibuat pada bagian sebelumnya. Sistem dikatakan layak apabila
139
pada LCD
Display
Pembacaan Sensor SEN0244 Data OK
sensor terhubung dengan temperatur
temperatur Arduino dan dapat terbaca
DS18B20 dicelupkan ke oleh perangkat
larutan hidroponik Arduino dari
sensor
DS18B20 dan
ditampilkan
pada LCD
Display
Pembacaan Memancarkan Arduino dapat OK
sensor gelombang sinar menerima data
infrared inframerah gelombang
melalui remote yang
control untuk dipancarkan
diterima oleh oleh remote
sensor pembacaan dengan
datanya berubahnya
tampilan layar
LCD
Pengiriman Mengirimkan data Data berhasil OK
data sensor hasil pembacaan terkirim,
ke aplikasi sensor SEN0161- HTTP
web API V2, SEN0244, response code
melalui DS18B20, dan 201
HTTP HC-SR04 ke CREATED
request aplikasi web API
POST menggunakan
HTTP POST
Penerimaan Menerima data HTTP OK
data nilai nilai batas bawah response code
batas bawah dan batas atas dari 200 dan
dan batas atas aplikasi web API mendapatkan
141
Arsitektur Sistem
Arsitektur dari sistem yang dikembangkan disesuaikan dengan
kebutuhan yang telah disebutkan pada tahap perancangan.
Arsitektur dikembangkan dengan menggunakan design pattern
Model-View-Controller. Design pattern tersebut digunakan
sesuai dengan framework yang digunakan pada aplikasi web
yaitu CodeIgniter. Selain MVC, design pattern microservice
juga diterapkan dalam pembuatan arsitektur sistem. Design
pattern ini juga memudahkan dari sisi maintenance karena
masing-masing aplikasi web lebih modular.
145
146
Saran
Berikut adalah beberapa saran untuk pengembangan lebih lanjut
untuk menyempurnakan pengembangan sistem.
1. Menggunakan protokol MQTT dalam hal melakukan
komunikasi antara perangkat keras dengan perangkat lunak
untuk menampilkan data pada aplikasi web.
155
156
157
158
161