Skip to content

gungzzleefy/kopi-greenhouse-aircontrol-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

IQACS β€” Intelligent Quality & Air Control System for Coffee Nursery Greenhouse

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.


πŸ“‹ Table of Contents


Overview

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.


Key Features

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

Application Flow

1. Splash Screen β†’ Onboarding β†’ Login

  • 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.

2. Main Dashboard (Home Screen)

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.

3. Scanner Screen (Disease Detection)

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.

4. Analytic Screen (History)

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.

5. Report Screen (Charts & Data)

  • 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.

6. Profile & Account Management

  • 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.

Tech Stack

  • 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

Project Structure

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

Dependencies

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

API Endpoints

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

Getting Started

Prerequisites

  • Flutter SDK ^3.5.2
  • Dart SDK ^3.5.2
  • Android Studio / VS Code with Flutter extension
  • A running backend API server

Installation

# Clone the repository
git clone https://github.com/agungkurniawanid/kopi-greenhouse-aircontrol-app.git
cd kopi-greenhouse-aircontrol-app

# Install dependencies
flutter pub get

Configuration

Edit lib/constants/api_constant.dart and update:

static const String baseUrl = 'http://YOUR_SERVER_IP:PORT';
static const String openWeatherApiKey = 'YOUR_OPENWEATHER_API_KEY';

Run the App

flutter run

Build Guide

# 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 --release



IQACS β€” Intelligent Quality & Air Control System untuk Greenhouse Pembibitan Kopi

Deskripsi 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.


πŸ“‹ Daftar Isi


Gambaran Umum

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 Utama

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

Alur Aplikasi

1. Splash Screen β†’ Onboarding β†’ Login

  • 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.

2. Dashboard Utama (Home Screen)

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.

3. Scanner Screen (Deteksi Penyakit)

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.

4. Analytic Screen (Riwayat)

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.

5. Report Screen (Grafik & Data)

  • 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.

6. Profil & Manajemen Akun

  • 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.

Teknologi yang Digunakan

  • 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

Struktur Proyek

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.)

Daftar Dependensi

Lihat bagian Dependencies di atas untuk daftar lengkap paket yang digunakan.


Endpoint API

Semua endpoint menggunakan base URL yang dikonfigurasi di lib/constants/api_constant.dart. Lihat bagian API Endpoints di atas untuk daftar lengkapnya.


Cara Memulai

Prasyarat

  • Flutter SDK ^3.5.2
  • Dart SDK ^3.5.2
  • Android Studio / VS Code dengan ekstensi Flutter
  • Server backend API yang sedang berjalan

Instalasi

# Clone repositori
git clone https://github.com/agungkurniawanid/kopi-greenhouse-aircontrol-app.git
cd kopi-greenhouse-aircontrol-app

# Install dependensi
flutter pub get

Konfigurasi

Edit lib/constants/api_constant.dart dan perbarui:

static const String baseUrl = 'http://IP_SERVER_ANDA:PORT';
static const String openWeatherApiKey = 'API_KEY_OPENWEATHER_ANDA';

Jalankan Aplikasi

flutter run

Panduan Build

# 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 --release

IQACS β€” Intelligent Quality & Air Control System | Sistem Pemantauan & Kontrol Kualitas Udara Greenhouse Kopi

About

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.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors