TKK_E32230814/BUG_FIXES_REPORT.md

6.6 KiB

Laporan Perbaikan Bug ApsGo

Tanggal: 26 Januari 2026
Status: SELESAI

Ringkasan Bug yang Diperbaiki

1. 🔒 Bug Logout Tiba-tiba ke Landing Page

Masalah:

  • Aplikasi terkadang logout secara tiba-tiba saat klik menu Kontrol atau menu lainnya
  • User ter-redirect ke Landing Page tanpa sengaja

Penyebab:

  • Tidak ada monitoring auth state di DashboardPage
  • Ketika Firebase Auth token expired atau ada perubahan auth state, tidak ada handler yang tepat
  • Navigation stack tidak terlindungi dengan baik

Solusi: Tambahkan authStateChanges listener di initState() DashboardPage

@override
void initState() {
  super.initState();
  // Monitor auth state untuk mencegah logout tidak terduga
  _authService.authStateChanges.listen((user) {
    if (user == null && mounted) {
      // User logged out, redirect to login
      Navigator.of(context).pushNamedAndRemoveUntil(
        '/login',
        (route) => false,
      );
    }
  });
}

File yang Diubah:

  • lib/screens/dashboard_page.dart

2. 💧 Bug Pompa Tidak Langsung Aktif Saat Soil Moisture Rendah

Masalah:

  • Pompa terkadang tidak langsung aktif ketika soil moisture di bawah ambang bawah
  • Delay response terlalu lama (10 detik)
  • Cooldown period terlalu lama (5 menit)

Penyebab:

  • Timer check sensor berjalan setiap 10 detik → terlalu lambat
  • Cooldown 5 menit antar penyiraman → terlalu lama untuk kondisi kritis
  • Kurang logging untuk debugging

Solusi: Interval Check: Ubah dari 10 detik → 5 detik (lebih responsif)

_sensorCheckTimer = Timer.periodic(
  const Duration(seconds: 5),  // Sebelumnya: 10 detik
  (timer) => _checkSensorThreshold(),
);

Cooldown Period: Kurangi dari 5 menit → 2 menit

if (diff.inMinutes < 2) {  // Sebelumnya: 5 menit
  debugPrint('⏳ POT $potNumber: Cooldown active (${2 - diff.inMinutes} min remaining)');
  return;
}

Tambah Logging Detail:

  • Log setiap check sensor dengan nilai threshold
  • Log setiap trigger penyiraman
  • Log progress penyiraman per 5 detik
  • Log saat target tercapai

Pastikan Flag Reset: Tambah delay sebelum reset flag untuk memastikan cleanup selesai

await Future.delayed(const Duration(milliseconds: 500));
_isWateringActive[potKey] = false;

Error Handling: Tambahkan try-catch untuk matikan pompa saat error

} catch (e) {
  debugPrint('❌ Error watering pot by sensor: $e');
  // Matikan semua untuk safety
  try {
    await _dbService.setPompaAir(false);
    await _dbService.setPot(potNumber, false);
  } catch (cleanupError) {
    debugPrint('❌ Error during cleanup: $cleanupError');
  }
  _isWateringActive[potKey] = false;
}

File yang Diubah:

  • lib/services/kontrol_automation_service.dart

3. 🔌 Verifikasi Mapping Soil Sensor ke Mosfet

Masalah yang Diperiksa:

  • Apakah soil_1 bisa mempengaruhi mosvet_3 dst
  • Apakah mapping soil_x ke mosvet_y sudah benar

Hasil Verifikasi: Mapping sudah BENAR:

soil_1 (Pot 1) → mosvet_3 (Valve Pot 1)
soil_2 (Pot 2) → mosvet_4 (Valve Pot 2)
soil_3 (Pot 3) → mosvet_5 (Valve Pot 3)
soil_4 (Pot 4) → mosvet_6 (Valve Pot 4)
soil_5 (Pot 5) → mosvet_7 (Valve Pot 5)

Catatan:

  • mosvet_1 = Pompa Air
  • mosvet_2 = Pompa Nutrisi
  • mosvet_3 s/d mosvet_7 = Valve Pot 1-5

Perbaikan: Tambah komentar dan logging untuk memperjelas mapping

// pot 1 → mosvet_3, pot 2 → mosvet_4, ... pot 5 → mosvet_7
debugPrint('💧 Starting watering: POT $potNumber (mosvet_${potNumber + 2})');

Tambah logging tracking nilai soil sensor

debugPrint('🌡️ soil_$i = $soilValue (threshold: $batasBawah)');
debugPrint('⚠️ $soilKey ($soilValue) < batasBawah ($batasBawah) → Triggering watering for POT $i');

File yang Diubah:

  • lib/services/kontrol_automation_service.dart

Perubahan Detail

File: lib/screens/dashboard_page.dart

Perubahan:

  1. Import AuthService
  2. Tambah instance _authService
  3. Tambah initState() dengan auth state listener

File: lib/services/kontrol_automation_service.dart

Perubahan:

  1. Timer interval: 10s → 5s (line ~183)
  2. Cooldown: 5 min → 2 min (line ~248)
  3. Tambah logging detail di _checkSensorThreshold() (line ~217)
  4. Tambah logging mapping pot (line ~254)
  5. Tambah logging progress watering (line ~265)
  6. Tambah delay sebelum reset flag (line ~283)
  7. Improve error handling dengan cleanup (line ~286)

Testing Checklist

Setelah update, pastikan test hal-hal berikut:

Auth & Navigation

  • Login dan navigate ke Dashboard
  • Klik menu Kontrol → tidak logout
  • Klik menu Histori → tidak logout
  • Buka drawer dan klik menu → tidak logout
  • Test dengan koneksi internet ON/OFF
  • Test dengan token yang akan expired

Sensor Automation

  • Aktifkan mode Sensor
  • Set soil moisture di bawah batas bawah (misal: 25%)
  • Cek pompa aktif dalam < 5 detik
  • Cek valve pot yang tepat aktif (soil_1 → mosvet_3, dst)
  • Cek log di console untuk tracking
  • Test dengan multiple pot di bawah threshold bersamaan
  • Test cooldown period (2 menit)

Edge Cases

  • Test saat Firebase disconnect
  • Test saat sensor data tidak valid (0, null, string)
  • Test saat automation service crash
  • Test multiple user logout/login

Logging untuk Debugging

Untuk monitor aktivitas, cek console log dengan pattern:

Sensor Mode:

🌡️ Sensor Mode: Started
🌡️ Checking thresholds: batas_bawah=30, batas_atas=80
🌡️ soil_1 = 25 (threshold: 30)
⚠️ soil_1 (25) < batasBawah (30) → Triggering watering for POT 1
💧 Starting watering: POT 1 (mosvet_3)
🌡️ Target: soil_1 should reach >= 80 (currently: 25)
💧 POT 1 watering: 5s, soil_1: 35
💧 POT 1 watering: 10s, soil_1: 50
✅ POT 1 reached target: 80 >= 80
✅ Sensor Mode: Watering completed for POT 1 (15s)

Cooldown:

⏳ POT 1: Cooldown active (1 min remaining)

Errors:

❌ Error watering pot by sensor: [error message]
❌ Error during cleanup: [error message]

Rekomendasi Lanjutan

  1. Tambah UI Indicator: Tampilkan status automation (active/inactive) di Dashboard
  2. Notification: Push notification saat pompa aktif otomatis
  3. History Log: Simpan log automation ke Firebase untuk review
  4. Manual Override: Button untuk force stop automation
  5. Sensor Calibration: UI untuk kalibrasi sensor soil moisture

Kontak

Jika masih ada masalah setelah update ini, catat:

  1. Timestamp kejadian
  2. Screenshot console log
  3. Nilai sensor saat kejadian
  4. Action yang dilakukan user

Happy Gardening! 🌱