128 lines
4.2 KiB
Markdown
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
|