Skip to content

Latest commit

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Farmify — Smart Farming System

Sistem monitoring dan kontrol irigasi terdistribusi berbasis REST API. Memantau kelembapan tanah secara real-time dan mengontrol pompa air secara manual maupun otomatis.


Arsitektur Sistem

[Python Device Simulator] ──POST /api/ingest──▶ [Laravel REST API]
│
[MySQL DB]
│
[Python Worker] ◀──GET /api/command/pending────────────┘
│
└──POST /api/status/update──▶ [Laravel REST API]
│
[Web Dashboard]

Struktur Folder

farmify/
├── app/ # Laravel application
│ └── Http/
│ ├── Controllers/
│ │ ├── Api/ # API controllers (device, command, status, dashboard)
│ │ └── Web/ # Web dashboard controllers
│ └── Middleware/
│ └── ApiKeyMiddleware.php
├── database/migrations/ # Database migrations
├── resources/views/dashboard/ # Blade views
├── routes/
│ ├── api.php # API routes
│ └── web.php # Web routes
├── public/
│ ├── css/dashboard.css
│ └── js/dashboard.js
├── python/
│ ├── device_simulator.py # Simulator 3 device sensor
│ ├── worker.py # Worker polling command
│ └── requirements.txt
├── Dockerfile
└── docker-compose.yml

Prasyarat

  • Docker & Docker Desktop
  • Python 3.8+
  • pip

Instalasi & Menjalankan

1. Clone repository

git clone https://github.com/username/farmify.git
cd farmify

2. Jalankan Docker

docker compose up -d --build

Tunggu hingga semua container running:

docker compose ps
ContainerPort
farmify_apphttp://localhost:8000
farmify_dblocalhost:3307
farmify_pmahttp://localhost:8080

3. Migrasi database

docker exec -it farmify_app php artisan migrate

4. Buat API key

docker exec -it farmify_app php artisan tinker
\App\Models\ApiClient::create([
'name' => 'Python Device Client',
'api_key' => 'smartfarm-secret-key-2024',
'is_active' => 1,
]);
exit

5. Install dependensi Python

cd python
pip install -r requirements.txt

6. Konfigurasi Python

Edit device_simulator.py dan worker.py, sesuaikan:

API_BASE_URL="http://localhost:8000/api"API_KEY="smartfarm-secret-key-2024"

7. Jalankan Device Simulator

Buka terminal baru:

cd python
python device_simulator.py

Output normal:

13:25:49 [ZONE-A] ✓ Sent | moisture=55.28% temp=26.57°C hum=78.12%
13:25:49 [ZONE-B] ✓ Sent | moisture=70.68% temp=29.84°C hum=55.5%
13:25:49 [ZONE-C] ✓ Sent | moisture=52.5% temp=33.34°C hum=56.18%

8. Jalankan Worker

Buka terminal baru:

cd python
python worker.py

Output normal:

13:29:52 [WORKER] Found 2 pending command(s).
13:29:52 [WORKER] Executing [start_pump] for device_id=1 (cmd_id=1)
13:29:57 [WORKER] ✓ Done: device_id=1 pump=running

9. Akses Dashboard

Buka browser: http://localhost:8000/dashboard


API Endpoints

Semua endpoint memerlukan header:

X-API-Key: <api_key>
Content-Type: application/json
MethodEndpointDeskripsi
POST/api/ingestDevice kirim data sensor
GET/api/devicesList semua device
POST/api/command/sendKirim perintah pompa
GET/api/command/pendingWorker ambil command pending
PATCH/api/command/{id}/doneWorker update status command
POST/api/status/updateWorker update status pompa
GET/api/dashboard/dataData sensor untuk dashboard
GET/api/dashboard/logLog aktivitas

Contoh request — kirim data sensor

curl -X POST http://localhost:8000/api/ingest \
-H "X-API-Key: smartfarm-secret-key-2024" \
-H "Content-Type: application/json" \
-d '{"device_code":"ZONE-A","soil_moisture":45.2,"temperature":28.5,"humidity":72.0}'

Device Simulator

Tiga device zona lahan berjalan paralel via threading:

DeviceZonaRentang Moisture
ZONE-ALahan Padi20–85%
ZONE-BLahan Sayur15–75%
ZONE-CLahan Buah25–90%

Moisture turun secara bertahap saat pompa mati, naik saat pompa nyala.


Auto Irrigation

Sistem otomatis membuat command start_pump ketika soil_moisture < 30%. Threshold dapat diubah di Dashboard → Settings → Irrigation Threshold.


Environment Variables

VariableDefaultDeskripsi
THRESHOLD_MOISTURE30Trigger auto-irrigation (%)
THRESHOLD_STOP70Stop irrigation (%)
POLL_INTERVAL5Interval worker polling (detik)
DEVICE_TIMEOUT60Timeout device offline (detik)
INGEST_INTERVAL10Interval kirim data sensor (detik)

Database

TabelIsi
api_clientsAPI key management
devicesDaftar device/zona
sensor_dataRekaman data sensor
commandsAntrian dan histori command
pump_statusStatus pompa real-time
activity_logLog seluruh aktivitas

Troubleshooting

API 404 — Pastikan routes/api.php terdaftar di bootstrap/app.php.

Middleware error — Pastikan ApiKeyMiddleware terdaftar di bootstrap/app.php:

$middleware->alias(['auth.apikey' => \App\Http\Middleware\ApiKeyMiddleware::class]);

Worker timeout — Pastikan container running (docker compose ps) dan API key benar.

migrate:fresh error — Cek duplikasi migration file yang membuat tabel sama.


Tech Stack

LayerTeknologi
Backend APILaravel 13, PHP 8.4
DatabaseMySQL 8.0
FrontendBlade, Chart.js, Remixicon
Device SimulatorPython 3, requests, threading
WorkerPython 3, requests
InfrastructureDocker, Apache

About

A distributed smart farming system that monitors soil moisture across multiple zones and automates irrigation control via REST API. Built with Laravel 13, Python 3, MySQL, and Docker. Features real-time web dashboard, worker-based command execution, and API key security.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages