TKK_E32231503/CHANGELOG_NOTIFIKASI.md

4.2 KiB

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

// 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