Repository Description (for GitHub): A Flutter-based mobile application for smart coffee nursery greenhouse management. IQACS integrates real-time IoT sensor monitoring (temperature & humidity), automated sprayer control, AI-powered coffee leaf disease detection using image classification, and data analytics with interactive charts and Excel export β all in one unified platform.
- Overview
- Key Features
- Application Flow
- Tech Stack
- Project Structure
- Dependencies
- API Endpoints
- Getting Started
- Build Guide
- Screenshots
IQACS (Intelligent Quality & Air Control System) is a Flutter mobile application designed for smart management of coffee nursery greenhouses. The system connects to IoT hardware sensors that monitor temperature and humidity inside the greenhouse in real-time, allows operators to remotely control a water sprayer pump, and leverages AI/machine learning to detect coffee leaf diseases from photos taken directly in the field.
The application communicates with a backend REST API server and is built with a responsive layout supporting screens from mobile to 4K displays.
| Feature | Description |
|---|---|
| π‘οΈ Real-time Sensor Monitoring | Live temperature and humidity readings from IoT sensors installed in the greenhouse |
| π§ Remote Sprayer Control | Toggle the water sprayer pump on/off directly from the app |
| π€ AI Leaf Disease Detection | Upload or capture a photo of a coffee leaf; the AI model classifies the disease and returns a diagnosis with an accuracy score |
| π Analytics & Charts | Line chart visualization of historical temperature and humidity data, filterable by custom date range (max 7 days) |
| π€ Excel Export | Export sensor chart data to .xlsx format for offline analysis |
| π€οΈ Weather Integration | Displays current local weather conditions via OpenWeather API |
| π Diagnosis History | View, filter, and delete past diagnosis records categorized by disease type (Miner, Phoma, Rust, No Disease) |
| π Authentication | Secure login with JWT Bearer token, OTP-based forgot password flow, and change password |
| π€ User Profile | View and edit profile, change profile photo |
| π± Responsive Layout | Supports Mobile, Tablet, Laptop, and 4K screen breakpoints |
- The app starts with a Splash Screen that checks for an existing session token in
SharedPreferences. - First-time users are shown an Onboarding Screen (3 slides).
- Users authenticate via the Login Screen using email and password. On success, a JWT token and user ID are stored locally.
After login, the user lands on the Home Screen which displays:
- Custom AppBar β shows user greeting and weather info.
- Main Card β shows live temperature and humidity values fetched from the IoT sensor device.
- Filter Card β lets the user filter sensor data by time range.
- Sensor Card β detailed temperature/humidity display card.
- Sprayer Card β button to toggle the sprayer pump on/off via API.
- Report Card β quick link to the analytics/report section.
The Scanner Screen provides two ways to submit a leaf photo for AI diagnosis:
- Open Camera β captures a photo live from the device camera.
- Open Folder β picks an image from the device gallery.
On submission, the image is uploaded via multipart POST to the backend AI inference endpoint. The API returns a diagnosis label (e.g., Miner, Phoma, Rust, No Disease) along with an accuracy percentage and an AI-generated description.
Result is displayed on the Predict Result Screen:
- Full-width leaf image
- Diagnosis name + accuracy badge
- AI-generated markdown description with typewriter animation
The scanner screen also shows the Latest Diagnoses list (last hour), where each entry can be tapped to open the detail screen or deleted.
Displays all previous diagnosis records in a masonry grid layout, filterable by disease category via tabs:
- All | Miner | Phoma | No Disease | Rust
Tapping any item opens the Detail Analytic Screen showing the full diagnosis detail for that record.
- Line Chart β visualizes average daily temperature and humidity over a selected date range (up to 7 days).
- Humidity Detail β doughnut/radial chart per day.
- Temperature Detail β doughnut/radial chart per day.
- Export β exports the visible data to an Excel (
.xlsx) file saved locally. - Filter β date range picker to select a custom period.
- View and edit user profile (name, email, phone).
- Change profile photo.
- Change password.
- Forgot password flow: enter email β receive OTP β verify OTP β set new password.
- Framework: Flutter (Dart)
- State Management: Riverpod (
flutter_riverpod) - HTTP Client: Dio (
dio) +http - Local Storage: SharedPreferences
- Charts: fl_chart
- AI Result Rendering:
gpt_markdown,animated_text_kit - Image Handling:
image_picker,camera - Export:
excel,open_file - UI Utilities:
google_fonts,gap,shimmer,flutter_animate,responsive_framework,flutter_staggered_grid_view - Notifications:
awesome_snackbar_content,quickalert - Internationalization:
intl,timeago
lib/
βββ main.dart # App entry point, responsive breakpoints
βββ constants/
β βββ api_constant.dart # All API base URLs and endpoints
β βββ dio_constant.dart # Dio client configuration
βββ models/
β βββ model_user.dart # Auth user model
β βββ model_pengguna.dart # User profile model
β βββ model_alat.dart # IoT device/sensor model
β βββ model_chart.dart # Chart data model
β βββ model_data_predict.dart # Diagnosis result models
β βββ model_diagnosa.dart # Diagnosa response model
β βββ model_weather.dart # Weather API model
β βββ model_monicontrollings.dart
β βββ model_forgot_password.dart
β βββ model_update_profile.dart
βββ providers/
β βββ login_provider.dart # Auth state & login logic
β βββ user_provider.dart # User profile state
β βββ diagnosa_provider.dart # AI predict, list, delete
β βββ chart_provider.dart # Chart data + Excel export
β βββ weather_provider.dart # Weather fetch
β βββ get_temp_humidity_provider.dart
β βββ filter_sensor_provider.dart
β βββ forgot_password_provider.dart
β βββ check_otp_provider.dart
β βββ change_password_provider.dart
β βββ profile_provider.dart
β βββ sharedpreferences_provider.dart
β βββ page_provider.dart
β βββ input_provider.dart
β βββ counter_provider.dart
βββ screens/
β βββ splash_screen.dart # Splash + session check
β βββ onboarding_screen.dart # Onboarding slides
β βββ login_screen.dart # Login form
β βββ forgot_password_screen.dart
β βββ otp_verification_screen.dart
β βββ reset_password.dart
β βββ page_screen.dart # Bottom nav container
β βββ home_screen.dart # Dashboard
β βββ scanner_screen.dart # Leaf disease scanner
β βββ predict_result_screen.dart
β βββ analytic_screen.dart # Diagnosis history grid
β βββ detail_analytic_screen.dart
β βββ report_screen.dart # Charts & export
β βββ profile_screen.dart
β βββ edit_profile_screen.dart
β βββ change_password.dart
βββ widgets/
β βββ custom_appbar.dart # Top bar with weather
β βββ custom_button_nav.dart # Bottom navigation bar
β βββ custom_card.dart # Sensor, sprayer, report cards
β βββ custom_filter.dart # Sensor filter widget
β βββ custom_input.dart # Reusable text input
βββ functions/
βββ dialog_func.dart
βββ notification_func.dart
βββ shimmer_card.dart
βββ snackbar_func.dart
| Package | Version | Purpose |
|---|---|---|
flutter_riverpod |
^3.2.1 | State management |
dio |
^5.7.0 | HTTP client |
http |
^1.2.2 | Additional HTTP |
shared_preferences |
^2.0.0 | Token & session storage |
fl_chart |
^1.1.1 | Line & pie charts |
image_picker |
^1.1.2 | Gallery/camera image picker |
camera |
^0.11.0+2 | Camera access |
excel |
^4.0.6 | Excel file generation |
open_file |
^3.5.10 | Open files natively |
gpt_markdown |
^1.1.5 | Render markdown AI output |
animated_text_kit |
^4.2.2 | Typewriter animation |
google_fonts |
^8.0.2 | Typography |
shimmer |
^3.0.0 | Loading skeleton effect |
responsive_framework |
^1.5.1 | Responsive breakpoints |
flutter_staggered_grid_view |
^0.7.0 | Masonry grid layout |
flutter_animate |
^4.5.0 | UI animations |
intl |
^0.20.2 | Date/number formatting |
timeago |
^3.7.0 | Relative timestamps |
permission_handler |
^12.0.1 | Runtime permissions |
encrypt |
^5.0.3 | Data encryption |
quickalert |
^1.1.0 | Alert dialogs |
awesome_snackbar_content |
^0.1.4 | Styled snackbars |
logger |
^2.4.0 | Debug logging |
All endpoints use the base URL configured in lib/constants/api_constant.dart.
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/login |
User login |
POST |
/api/logout |
User logout |
GET |
/api/check-token |
Validate JWT token |
GET |
/api/getdataalat/{id} |
Get live sensor data |
POST |
/api/aturpompa |
Toggle sprayer pump |
GET |
/api/chartdaritanggal/{range} |
Get chart data by date range |
POST |
/api/diagnosa/{userId} |
Submit leaf image for AI diagnosis |
GET |
/api/data-diagnosa/{filter} |
Get diagnosis history (filtered) |
GET |
/api/data-diagnosa-detail/{id} |
Get single diagnosis detail |
DELETE |
/api/data-diagnosa/{id} |
Delete a diagnosis record |
GET |
/api/get-pengguna/{id} |
Get user profile |
POST |
/api/updatefoto/{id} |
Update profile photo |
POST |
/api/update-data-pengguna-without-photo/{id} |
Update profile data |
POST |
/api/change-password/{id} |
Change password |
POST |
/api/lupa-password |
Forgot password (send OTP) |
POST |
/api/lupa-password/verifikasi-otp/{email} |
Verify OTP |
POST |
/api/lupa-password/kirim-ulang-otp/{email} |
Resend OTP |
POST |
/api/lupa-password/reset-password/{email} |
Reset password |
- Flutter SDK
^3.5.2 - Dart SDK
^3.5.2 - Android Studio / VS Code with Flutter extension
- A running backend API server
# Clone the repository
git clone https://github.com/agungkurniawanid/kopi-greenhouse-aircontrol-app.git
cd kopi-greenhouse-aircontrol-app
# Install dependencies
flutter pub getEdit lib/constants/api_constant.dart and update:
static const String baseUrl = 'http://YOUR_SERVER_IP:PORT';
static const String openWeatherApiKey = 'YOUR_OPENWEATHER_API_KEY';flutter run# Generate launcher icons
flutter pub run flutter_launcher_icons
# Build APK (debug)
flutter build apk --debug
# Build APK (release)
flutter build apk --release
# Build App Bundle (Play Store)
flutter build appbundle --releaseDeskripsi Repository (untuk GitHub): Aplikasi mobile berbasis Flutter untuk manajemen greenhouse pembibitan kopi yang cerdas. IQACS mengintegrasikan pemantauan sensor IoT real-time (suhu & kelembapan), kontrol sprayer otomatis, deteksi penyakit daun kopi berbasis AI menggunakan klasifikasi gambar, serta analitik data dengan grafik interaktif dan ekspor Excel β semua dalam satu platform terintegrasi.
- Gambaran Umum
- Fitur Utama
- Alur Aplikasi
- Teknologi yang Digunakan
- Struktur Proyek
- Daftar Dependensi
- Endpoint API
- Cara Memulai
- Panduan Build
IQACS (Intelligent Quality & Air Control System) adalah aplikasi mobile Flutter yang dirancang untuk manajemen greenhouse pembibitan kopi secara cerdas. Sistem ini terhubung ke perangkat sensor IoT yang memantau suhu dan kelembapan di dalam greenhouse secara real-time, memungkinkan operator mengontrol pompa sprayer air dari jarak jauh, serta memanfaatkan kecerdasan buatan (AI/ML) untuk mendeteksi penyakit daun kopi dari foto yang diambil langsung di lapangan.
Aplikasi berkomunikasi dengan server backend REST API dan dibangun dengan layout responsif yang mendukung berbagai ukuran layar dari ponsel hingga 4K.
| Fitur | Deskripsi |
|---|---|
| π‘οΈ Monitoring Sensor Real-time | Pembacaan suhu dan kelembapan langsung dari sensor IoT di greenhouse |
| π§ Kontrol Sprayer Jarak Jauh | Nyalakan/matikan pompa sprayer air langsung dari aplikasi |
| π€ Deteksi Penyakit Daun Kopi (AI) | Upload atau ambil foto daun kopi; model AI mengklasifikasikan penyakit dan memberikan diagnosis beserta skor akurasi |
| π Analitik & Grafik | Visualisasi grafik garis data suhu dan kelembapan historis, dapat difilter berdasarkan rentang tanggal (maks. 7 hari) |
| π€ Ekspor Excel | Ekspor data grafik sensor ke format .xlsx untuk analisis offline |
| π€οΈ Integrasi Cuaca | Menampilkan kondisi cuaca lokal terkini melalui OpenWeather API |
| π Riwayat Diagnosis | Lihat, filter, dan hapus riwayat diagnosis yang dikategorikan berdasarkan jenis penyakit (Miner, Phoma, Rust, Tidak Berpenyakit) |
| π Autentikasi | Login aman dengan JWT Bearer token, alur lupa password berbasis OTP, dan ganti password |
| π€ Profil Pengguna | Lihat dan edit profil, ganti foto profil |
| π± Layout Responsif | Mendukung breakpoint Mobile, Tablet, Laptop, dan 4K |
- Aplikasi dimulai dengan Splash Screen yang mengecek token sesi yang tersimpan di
SharedPreferences. - Pengguna baru akan ditampilkan Onboarding Screen (3 slide).
- Pengguna melakukan autentikasi melalui Login Screen menggunakan email dan password. Jika berhasil, token JWT dan ID pengguna disimpan secara lokal.
Setelah login, pengguna masuk ke Home Screen yang menampilkan:
- AppBar β menampilkan sapaan pengguna dan informasi cuaca.
- Kartu Utama β menampilkan nilai suhu dan kelembapan langsung dari sensor IoT.
- Kartu Filter β memungkinkan pengguna memfilter data sensor berdasarkan rentang waktu.
- Kartu Sensor β tampilan detail suhu/kelembapan.
- Kartu Sprayer β tombol untuk mengaktifkan/menonaktifkan pompa sprayer melalui API.
- Kartu Laporan β tautan cepat ke halaman analitik/laporan.
Scanner Screen menyediakan dua cara untuk mengirim foto daun untuk diagnosis AI:
- Buka Kamera β mengambil foto langsung dari kamera perangkat.
- Buka Folder β memilih gambar dari galeri perangkat.
Setelah dikirim, gambar diunggah melalui multipart POST ke endpoint inferensi AI backend. API mengembalikan label diagnosis (contoh: Miner, Phoma, Rust, No Disease) beserta persentase akurasi dan deskripsi yang dihasilkan AI.
Hasil ditampilkan di Predict Result Screen:
- Gambar daun lebar penuh
- Nama diagnosis + badge akurasi
- Deskripsi markdown yang dihasilkan AI dengan animasi typewriter
Scanner screen juga menampilkan daftar Diagnosis Terbaru (satu jam terakhir), setiap entri dapat diketuk untuk membuka halaman detail atau dihapus.
Menampilkan semua riwayat diagnosis dalam layout masonry grid, dapat difilter berdasarkan kategori penyakit melalui tab:
- Semua | Miner | Phoma | No Disease | Rust
Mengetuk item akan membuka Detail Analytic Screen yang menampilkan detail diagnosis lengkap untuk rekaman tersebut.
- Grafik Garis β memvisualisasikan rata-rata suhu dan kelembapan harian dalam rentang tanggal yang dipilih (maks. 7 hari).
- Detail Kelembapan β grafik donat/radial per hari.
- Detail Suhu β grafik donat/radial per hari.
- Ekspor β mengekspor data yang terlihat ke file Excel (
.xlsx) yang disimpan secara lokal. - Filter β date range picker untuk memilih periode kustom.
- Lihat dan edit profil pengguna (nama, email, nomor telepon).
- Ganti foto profil.
- Ganti password.
- Alur lupa password: masukkan email β terima OTP β verifikasi OTP β set password baru.
- Framework: Flutter (Dart)
- State Management: Riverpod (
flutter_riverpod) - HTTP Client: Dio (
dio) +http - Penyimpanan Lokal: SharedPreferences
- Grafik: fl_chart
- Render Hasil AI:
gpt_markdown,animated_text_kit - Penanganan Gambar:
image_picker,camera - Ekspor:
excel,open_file - UI:
google_fonts,gap,shimmer,flutter_animate,responsive_framework,flutter_staggered_grid_view - Notifikasi:
awesome_snackbar_content,quickalert - Internasionalisasi:
intl,timeago
lib/
βββ main.dart # Entry point aplikasi, breakpoint responsif
βββ constants/
β βββ api_constant.dart # Semua base URL dan endpoint API
β βββ dio_constant.dart # Konfigurasi Dio client
βββ models/ # Model data (JSON serialization)
βββ providers/ # State management Riverpod
βββ screens/ # Halaman-halaman aplikasi
βββ widgets/ # Komponen UI yang dapat digunakan ulang
βββ functions/ # Fungsi utilitas (snackbar, dialog, dll.)
Lihat bagian Dependencies di atas untuk daftar lengkap paket yang digunakan.
Semua endpoint menggunakan base URL yang dikonfigurasi di lib/constants/api_constant.dart. Lihat bagian API Endpoints di atas untuk daftar lengkapnya.
- Flutter SDK
^3.5.2 - Dart SDK
^3.5.2 - Android Studio / VS Code dengan ekstensi Flutter
- Server backend API yang sedang berjalan
# Clone repositori
git clone https://github.com/agungkurniawanid/kopi-greenhouse-aircontrol-app.git
cd kopi-greenhouse-aircontrol-app
# Install dependensi
flutter pub getEdit lib/constants/api_constant.dart dan perbarui:
static const String baseUrl = 'http://IP_SERVER_ANDA:PORT';
static const String openWeatherApiKey = 'API_KEY_OPENWEATHER_ANDA';flutter run# Generate launcher icons
flutter pub run flutter_launcher_icons
# Build APK (debug)
flutter build apk --debug
# Build APK (release)
flutter build apk --release
# Build App Bundle (Play Store)
flutter build appbundle --releaseIQACS β Intelligent Quality & Air Control System | Sistem Pemantauan & Kontrol Kualitas Udara Greenhouse Kopi