# Changelog - Perbaikan Status dan Notifikasi ## Tanggal: 25 Juni 2026 ### Masalah yang Diperbaiki 1. **Status Pengeringan Tetap Berjalan Meskipun Alat Terputus** - Sebelumnya: Aplikasi tidak mendeteksi ketika ESP32 terputus saat pengeringan berlangsung - Sekarang: Sistem mendeteksi timeout (10 detik tanpa data) dan memberikan warning 2. **Notifikasi Terlalu Banyak** - Sebelumnya: Notifikasi muncul untuk setiap perubahan status (dimulai, ikan terdeteksi, berjalan, selesai) - Sekarang: Notifikasi hanya muncul untuk **Pengeringan Selesai** ### Perubahan Detail #### 1. Dashboard Screen (dashboard_screen.dart) **Deteksi Timeout:** - Menambahkan variabel `_lastDataReceived` untuk tracking waktu data terakhir - Menambahkan `_timeoutCheckTimer` yang mengecek setiap 2 detik - Jika tidak ada data > 10 detik saat pengeringan: - Menampilkan pesan "Koneksi ke alat terputus" - Relay UI dimatikan - Status pengeringan tetap dipertahankan untuk konsistensi **Reset Status:** - Ketika menerima status `READY` atau `CONNECTED`: - Reset `modePengeringan` = false - Reset `pengeringanSelesai` = false - Reset `beratTersimpan` = false **Notifikasi:** - Menghapus notifikasi untuk status `START` (pengeringan dimulai) - Menghapus notifikasi untuk status `BERJALAN` (ikan terdeteksi) - **Mempertahankan** notifikasi untuk status `SELESAI` (pengeringan selesai) #### 2. Dashboard Screen With API (dashboard_screen_with_api.dart) **Notifikasi:** - Menghapus notifikasi untuk status `READY` (pengeringan dimulai) - Menghapus notifikasi untuk status `BERJALAN` (ikan terdeteksi) - **Mempertahankan** notifikasi untuk status `SELESAI` (pengeringan selesai) #### 3. Notification Service (notification_service.dart) **Method yang Dihapus:** - `notifyPengeringanDimulai()` - pengeringan dimulai - `notifyIkanTerdeteksi(double berat)` - ikan terdeteksi - `notifyPengeringanBerjalan(double berat, double target)` - pengeringan berjalan **Method yang Dipertahankan:** - `notifyPengeringanSelesai(double beratAkhir)` - pengeringan selesai ✅ - `notifySuhuTinggi(double suhu)` - peringatan suhu tinggi - `notifyKoneksiTerputus()` - koneksi terputus - `notifyKoneksiTersambung()` - koneksi tersambung #### 4. Notification Manager (notification_manager.dart) **Method yang Dihapus:** - `notifyPengeringanDimulai()` - pengeringan dimulai - `notifyIkanTerdeteksi(double berat)` - ikan terdeteksi - `notifyPengeringanBerjalan(double berat, double target)` - pengeringan berjalan **Method yang Dipertahankan:** - `notifyPengeringanSelesai(double beratAkhir)` - pengeringan selesai ✅ ### Cara Kerja Deteksi Timeout ```dart // Timer berjalan setiap 2 detik _timeoutCheckTimer = Timer.periodic(const Duration(seconds: 2), (timer) { // Cek apakah sudah > 10 detik tanpa data if (_lastDataReceived != null && DateTime.now().difference(_lastDataReceived!) > Duration(seconds: 10) && modePengeringan) { // Tampilkan warning lastStatusMessage = 'Koneksi ke alat terputus - Status mungkin tidak akurat'; // Matikan relay di UI heater = false; fanIn = false; lamp = false; exhaust = false; // Status pengeringan tetap dipertahankan } }); ``` ### Testing **Skenario 1: Alat Terputus Saat Pengeringan** 1. Mulai pengeringan 2. Cabut koneksi WiFi ESP32 atau matikan alat 3. ✅ Setelah 10 detik, aplikasi menampilkan warning 4. ✅ Relay di UI otomatis OFF 5. ✅ Status pengeringan tetap ditampilkan **Skenario 2: Notifikasi** 1. Mulai pengeringan 2. ❌ TIDAK ada notifikasi "Pengeringan Dimulai" 3. Ikan terdeteksi 4. ❌ TIDAK ada notifikasi "Ikan Terdeteksi" 5. Pengeringan selesai 6. ✅ Muncul notifikasi "Pengeringan Selesai" ### Catatan - Timeout 10 detik dipilih karena ESP32 mengirim data setiap 1 detik - 10 detik memberikan buffer yang cukup untuk network latency - Status pengeringan tidak direset otomatis untuk menghindari kehilangan informasi - User harus manual reset dengan tombol RESET setelah koneksi pulih ### Backward Compatibility Perubahan ini **tidak mempengaruhi**: - Backend server - ESP32 firmware - MQTT communication - Database structure - API endpoints Perubahan **hanya di aplikasi Flutter** untuk: - Deteksi timeout - Filtering notifikasi