4.2 KiB
4.2 KiB
Changelog - Perbaikan Status dan Notifikasi
Tanggal: 25 Juni 2026
Masalah yang Diperbaiki
-
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
-
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
_lastDataReceiveduntuk tracking waktu data terakhir - Menambahkan
_timeoutCheckTimeryang 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
READYatauCONNECTED:- Reset
modePengeringan= false - Reset
pengeringanSelesai= false - Reset
beratTersimpan= false
- Reset
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 dimulainotifyIkanTerdeteksi(double berat)- ikan terdeteksinotifyPengeringanBerjalan(double berat, double target)- pengeringan berjalan
Method yang Dipertahankan:
notifyPengeringanSelesai(double beratAkhir)- pengeringan selesai ✅notifySuhuTinggi(double suhu)- peringatan suhu tingginotifyKoneksiTerputus()- koneksi terputusnotifyKoneksiTersambung()- koneksi tersambung
4. Notification Manager (notification_manager.dart)
Method yang Dihapus:
notifyPengeringanDimulai()- pengeringan dimulainotifyIkanTerdeteksi(double berat)- ikan terdeteksinotifyPengeringanBerjalan(double berat, double target)- pengeringan berjalan
Method yang Dipertahankan:
notifyPengeringanSelesai(double beratAkhir)- pengeringan selesai ✅
Cara Kerja Deteksi Timeout
// 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
- Mulai pengeringan
- Cabut koneksi WiFi ESP32 atau matikan alat
- ✅ Setelah 10 detik, aplikasi menampilkan warning
- ✅ Relay di UI otomatis OFF
- ✅ Status pengeringan tetap ditampilkan
Skenario 2: Notifikasi
- Mulai pengeringan
- ❌ TIDAK ada notifikasi "Pengeringan Dimulai"
- Ikan terdeteksi
- ❌ TIDAK ada notifikasi "Ikan Terdeteksi"
- Pengeringan selesai
- ✅ 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