Sistem monitoring dan penyiraman tanaman otomatis berbasis IoT — Kelompok 6
Smart Garden adalah sistem IoT yang memantau kondisi kebun secara real-time dan mengontrol pompa penyiram tanaman secara otomatis. ESP32 membaca data sensor tanah, suhu, dan kelembaban udara, lalu mengirimkannya ke dashboard web melalui MQTT.
Pengguna bisa memantau sensor, mengontrol pompa, dan mengatur threshold/jadwal siram — semuanya dari browser.
Versi ringan berbasis PHP murni tersedia di branch lite — tanpa Node.js, tanpa build step, cukup PHP + MariaDB.
| Full (branch main) | Lite (branch lite) | |
|---|---|---|
| Tech stack | React + Node.js + Laravel | PHP murni |
| Build step | npm run build |
Tidak perlu |
| Install | 10+ langkah | Ekstrak + isi .env |
| Dashboard real-time | ✅ | ✅ |
| Kontrol pompa | ✅ | ✅ |
| Grafik historis | ✅ | ✅ |
| Jadwal siram | ✅ | ✅ |
| Info cuaca | ✅ | ✅ |
| Admin panel | ✅ | ✅ |
| Panduan | ✅ | ✅ |
| Feedback pengguna | ✅ | ❌ |
| Dokumentasi projek | ✅ | ❌ |
| Halaman Tentang | ✅ | ❌ |
| Landing page | ✅ | ❌ |
| PWA (installable) | ✅ | ❌ |
| AI Assistant | ✅ | ❌ |
| OTA firmware update | ✅ | ❌ |
| REST API | ✅ | ❌ |
Buat projek sekolah/kampus: versi Full cocok karena ada halaman Feedback (pengguna bisa kasih penilaian & komentar) dan Dokumentasi (foto/video dokumentasi projek) — nilai plus buat presentasi.
Kalau cuma butuh monitoring sensor cepat tanpa setup ribet, pakai Lite.
| Fitur | Deskripsi |
|---|---|
| 📊 Real-time Monitoring | Data sensor langsung dari ESP32 lewat MQTT WebSocket |
| 💧 Kontrol Pompa | Nyala/mati manual + mode AUTO berdasarkan kelembaban tanah |
| 📈 Grafik Historis | Histori sensor dari 1 jam hingga 1 bulan |
| ⏰ Jadwal Siram | Atur hari & jam siram otomatis |
| 🌤️ Info Cuaca | Perkiraan cuaca & peluang hujan lewat Open-Meteo |
| 🔧 OTA Update | Firmware ESP32 update otomatis tanpa kabel |
| 🤖 AI Assistant | Tanya langsung tentang fitur dashboard |
ESP32 (Firmware)
├── DHT11 → Suhu udara & kelembaban
├── DS18B20 → Suhu air
├── Soil Sensor → Kelembaban tanah
└── Relay → Pompa air
│
└── MQTT TCP → Mosquitto Broker
│
├── mqttSave.js → MariaDB (histori sensor)
├── serverStats.js → CPU/RAM/Disk metrik
└── React Frontend → WSS (lewat Cloudflare Tunnel)
Firmware
- ESP32 + Arduino IDE
- DHT11, DS18B20, PubSubClient, ArduinoJson, WiFiManager, HTTPUpdate
Backend
- Laravel (REST API + Admin Panel) — port 8000 via pm2
- Node.js (MQTT jobs: mqttSave, serverStats) — via pm2
- MariaDB
- Mosquitto MQTT Broker
Frontend
- React 18 + Vite
- Redux Toolkit
- Chart.js (react-chartjs-2)
- MQTT.js
Infrastruktur
- Apache (reverse proxy + SPA serving)
- Cloudflare Tunnel (HTTPS tanpa port forwarding)
- Linux (OS Server)
smart-garden/
├── firmware/ # Kode Arduino ESP32 (firmware.ino)
├── frontend/ # React SPA (Vite)
│ └── src/
│ ├── pages/ # Dashboard, Settings, Sistem, dll
│ ├── redux/ # State management
│ └── components/
├── backend/ # Node.js MQTT jobs (mqttSave, serverStats)
├── laravel/ # Laravel REST API + Admin Panel
└── database/ # Schema SQL (schema.sql)
Rekomendasi: clone via Git — bisa pull update terbaru kapanpun.
git clone https://github.com/Adri158/smart-garden.git
cd smart-gardenAtau download ZIP dari halaman Releases.
Lihat panduan instalasi lengkap per sistem operasi di INSTALL.md.
Ringkasan langkah:
- Install prerequisites (Node.js, PHP, Composer, MariaDB, Mosquitto)
- Clone repo
- Buat database
smartgarden, importdatabase/schema.sql - Copy & isi
.env(root +laravel/+frontend/) - Setup backend Node.js + Laravel via pm2
- Build frontend React
- Konfigurasi Apache
- (Opsional) Flash firmware ke ESP32
Root .env (dibaca Node.js backend & laravel via config):
DB_HOST=127.0.0.1
DB_NAME=smartgarden
DB_USER=root
DB_PASS=
ADMIN_USER=admin
ADMIN_PASS=ganti_ini
API_KEY=random_string_panjang
OPENAI_API_KEY=sk-...laravel/.env (copy dari laravel/.env.example):
APP_URL=http://localhost:8000
DB_HOST=127.0.0.1
DB_DATABASE=smartgarden
DB_USERNAME=root
DB_PASSWORD=
API_KEY=sama_dengan_root_envfrontend/.env (copy dari frontend/.env.example):
VITE_APP_URL=http://localhost
VITE_MQTT_URL=ws://localhost:9002
VITE_API_BASE=
VITE_API_KEY=sama_dengan_root_envSetelah setup, semua service dijalankan via pm2:
# Backend (dari root folder smart-garden)
pm2 startOrReload backend/ecosystem.config.js --update-env
pm2 save
pm2 startupEcosystem menjalankan 3 proses:
mqtt-save— menyimpan data sensor dari MQTT ke MariaDBserver-stats— memantau CPU/RAM/disk lalu publish ke MQTTlaravel-api— Laravel REST API + Admin Panel (port 8000)
Cek status:
pm2 status
pm2 logs [nama-proses]Buat file virtual host (misal /etc/httpd/conf/conf.d/smart-garden.conf):
<VirtualHost *:80>
DocumentRoot /path/ke/smart-garden/frontend/dist
<Directory /path/ke/smart-garden/frontend/dist>
AllowOverride All
Require all granted
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.html [L]
</Directory>
ProxyPreserveHost On
ProxyPass /api http://localhost:8000/api
ProxyPassReverse /api http://localhost:8000/api
ProxyPass /admin http://localhost:8000/admin
ProxyPassReverse /admin http://localhost:8000/admin
</VirtualHost>| Topik | Arah | Isi |
|---|---|---|
smartgarden/{id}/sensor/soil |
ESP → Broker | Kelembaban tanah (%) |
smartgarden/{id}/sensor/dht |
ESP → Broker | Suhu udara (°C) |
smartgarden/{id}/sensor/hum |
ESP → Broker | Kelembaban udara (%) |
smartgarden/{id}/sensor/ds18b20 |
ESP → Broker | Suhu air (°C) |
smartgarden/{id}/status/relay |
ESP → Broker | ON / OFF |
smartgarden/{id}/status/mode |
ESP → Broker | AUTO / MANUAL |
smartgarden/{id}/control/relay |
Browser → ESP | Toggle pompa |
smartgarden/{id}/control/mode |
Browser → ESP | Ganti mode |
smartgarden/{id}/config |
Browser → ESP | Threshold (JSON) |
smartgarden/{id}/schedules |
Browser → ESP | Jadwal siram (JSON) |
Buat dashboard bisa diakses dari internet tanpa port forwarding atau IP publik.
Butuh domain yang sudah di-manage di Cloudflare.
Windows:
winget install --id Cloudflare.cloudflaredUbuntu/Debian:
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.debArch/Manjaro:
yay -S cloudflaredmacOS:
brew install cloudflaredcloudflared tunnel login
cloudflared tunnel create smart-gardenCatat Tunnel ID yang muncul.
| OS | Path Config |
|---|---|
| Windows | C:\Users\<user>\.cloudflared\config.yml |
| Linux | /etc/cloudflared/config.yml |
| macOS | ~/.cloudflared/config.yml |
tunnel: <TUNNEL-ID-KAMU>
credentials-file: /path/ke/<TUNNEL-ID-KAMU>.json
ingress:
- hostname: domainkamu.com
service: http://localhost:80
- hostname: api.domainkamu.com
service: http://localhost:8000
- hostname: mqtt.domainkamu.com
service: ws://localhost:9002
- service: http_status:404DNS → Add Record:
| Type | Name | Target |
|---|---|---|
| CNAME | @ |
<TUNNEL-ID>.cfargotunnel.com |
| CNAME | api |
<TUNNEL-ID>.cfargotunnel.com |
| CNAME | mqtt |
<TUNNEL-ID>.cfargotunnel.com |
Pastikan Proxy status = Proxied (ikon awan oranye).
Windows:
cloudflared service installLinux:
sudo cloudflared service install
sudo systemctl enable --now cloudflaredmacOS:
sudo cloudflared service installVITE_APP_URL=https://domainkamu.com
VITE_MQTT_URL=wss://mqtt.domainkamu.comLalu rebuild:
cd frontend && npm run buildKalau projek ini berguna buat kamu, atau sekadar pengen support, bantuan kecil ini sangat berarti:
⭐ Star — bantu projek ini makin keliatan di GitHub search
🍴 Fork — pengen modif buat projek sendiri? fork aja, bebas!
🐛 Issue — nemuin bug? langsung buka Issues
💡 PR — mau nambahin fitur? fork → implement → buka Pull Request
Mau request fitur, tanya-tanya, atau cuman nyapa? Kontak gw:
Klik untuk lihat hak & ketentuan lengkap
Boleh:
Harus:
Tidak boleh:
Singkatnya: bebas pakai, modif, dan distribusikan — asal tetap cantumkan lisensi aslinya.
Detail lengkap di fileLICENSE.
Copyright © 2026 Kelompok 6 — dibuat dengan ESP32