TKK_E32231503/CHANGELOG_NOTIFIKASI.md

128 lines
4.2 KiB
Markdown

# 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