# 🍄 JTA – Jamur Tiram Antirogo (Aplikasi Mobile IoT)

Aplikasi mobile **JTA (Jamur Tiram Antirogo)** merupakan komponen antarmuka (*frontend*) dalam ekosistem IoT budidaya jamur tiram. Aplikasi ini memungkinkan pengguna untuk memantau kondisi lingkungan (suhu dan kelembapan) serta mengontrol perangkat keras penyiram (sprayer) secara near real-time.

---

## 🌟 Fitur Utama

*   **Near Real-Time Monitoring:** Pemantauan suhu dan kelembapan kumbung jamur secara berkala (polling otomatis setiap 5 detik) dilengkapi grafik historis harian dan per jam.
*   **IoT Remote Control:** Pengaturan mode operasi (Otomatis / Manual) dan tombol penyiraman instan.
*   **Threshold Settings:** Batasi rentang suhu dan kelembapan ideal untuk mengaktifkan penyiraman otomatis.
*   **Irrigation Scheduling:** Penjadwalan penyiraman otomatis berdasarkan waktu/jam tertentu.
*   **Secure Authentication:** Keamanan akun pengguna (login/register) serta persistensi sesi menggunakan layanan **Supabase Auth**.
*   **Push Notifications:** Notifikasi status perangkat atau peringatan kondisi kumbung via **OneSignal**.

---

## 🏗️ Arsitektur Sistem

Aplikasi dikembangkan menggunakan **Layered Architecture** dengan pembagian tanggung jawab sebagai berikut:
1.  **Presentation Layer:** Antarmuka pengguna (UI) reaktif (`MonitoringPage`, `ControlPage`, `SchedulePage`, dsb.).
2.  **State Management (Riverpod):** Manajemen state terpusat (`MonitoringNotifier`, `ControlNotifier`, `AuthNotifier`).
3.  **Repository Layer:** Abstraksi akses data (`IotRepository`, `AuthRepository`).
4.  **Service Layer:** Jaringan komunikasi HTTP menggunakan **Dio** (`ApiIotService`, `ApiControlService`) dan **Supabase Flutter SDK** (`SupabaseAuthService`).

---

## 🛠️ Teknologi & Dependensi

*   **Framework:** Flutter (Dart)
*   **State Management:** Flutter Riverpod & StateNotifier
*   **Database & Auth:** Supabase Flutter
*   **HTTP Client:** Dio
*   **Notification Service:** OneSignal Flutter
*   **Chart Visuals:** Fl Chart / Grafik Kustom

---

## 🚀 Langkah Persiapan & Cara Menjalankan Proyek

Ikuti langkah-langkah di bawah ini untuk mengkloning dan menjalankan proyek ini di lingkungan lokal Anda.

### 1. Kloning Repositori
Jalankan perintah berikut di terminal komputer Anda:
```bash
git clone <URL_REPOSITORI_GITHUB_ANDA>
cd JTA
```

### 2. Konfigurasi Lingkungan Lokal (PENTING 🔑)
Untuk keamanan kredensial, berkas asli `env.dart` tidak diunggah ke GitHub (sudah terdaftar di `.gitignore`). Anda harus membuat berkas tersebut secara manual menggunakan template contoh:

1.  Salin berkas template [**`lib/core/env.example.dart`**](file:///c:/project/JTA/lib/core/env.example.dart) dan buat berkas baru dengan nama [**`lib/core/env.dart`**](file:///c:/project/JTA/lib/core/env.dart).
2.  Buka berkas [**`lib/core/env.dart`**](file:///c:/project/JTA/lib/core/env.dart), kemudian **hilangkan komentar** pada kelas `Env` dan isi dengan kredensial proyek Supabase & OneSignal Anda sendiri:

```dart
class Env {
  // --- BASE API URL ---
  static const String baseUrl = 'https://api.jta.web.id/api'; // Ganti jika memakai emulator/WiFi lokal

  // --- SUPABASE CONFIGURATION ---
  static const String supabaseUrl = 'https://YOUR_SUPABASE_PROJECT.supabase.co';
  static const String supabaseAnonKey = 'YOUR_SUPABASE_ANON_KEY';

  // --- ONESIGNAL CONFIGURATION ---
  static const String oneSignalAppId = 'YOUR_ONESIGNAL_APP_ID';
}
```

### 3. Install Dependensi
Jalankan perintah berikut untuk mengunduh semua paket dependensi Flutter yang dibutuhkan:
```bash
flutter pub get
```

### 4. Jalankan Aplikasi
Hubungkan ponsel asli (aktifkan USB Debugging) atau jalankan emulator Android/iOS Anda, kemudian ketik:
```bash
flutter run
```

---

## 📁 Struktur Direktori Utama
```text
lib/
├── core/            # Tema aplikasi, rute navigasi, dan konfigurasi Env
├── features/        # Modul fitur utama (auth, monitoring, control, schedule)
│   ├── auth/
│   ├── monitoring/
│   ├── control/
│   └── schedule/
├── services/        # Akses layanan eksternal (Supabase Auth & API REST)
└── main.dart        # Titik masuk utama (Entry point) aplikasi
```
