TKK_E32231105/RINGKASAN_SCHEDULER_SYSTEM.md

7.4 KiB

📋 RINGKASAN SISTEM SCHEDULER OTOMATIS PANEN

🎯 Apa yang Sudah Dibuat

1. Dependency Update

File: pubspec.yaml

dependencies:
  workmanager: ^0.5.1

2. Tiga Service Files Baru

A. lib/services/panen_scheduler.dart

Fungsi: Background scheduler yang menjalankan task jam 09:00 dan 15:00

  • Setup periodic tasks menggunakan workmanager
  • Hitung delay ke jam target berikutnya
  • Execute callback saat schedule hit

B. lib/services/panen_auto_capture_service.dart

Fungsi: Bridge antara scheduler dan provider

  • triggerMorningCapture() - Eksekusi panen pagi
  • triggerAfternoonCapture() - Eksekusi panen sore dengan delta
  • initialize() - Restore state saat app start

3. PanenProvider Update (Existing File)

File: lib/providers/panen_provider.dart

Tambahan:

// Snapshot tracking
Map<String, int> _snapshotPagiHariIni = {};
Map<String, int> _snapshotSoreHariIni = {};

// Methods baru:
getPanenPagiTodayValue(candangId)         // Get nilai pagi
getPanenSoreTodayValue(kandangId)         // Get nilai sore
isPanenPagiRecordedToday(kandangId)       // Cek sudah record pagi
isPanenSoreRecordedToday(kandangId)       // Cek sudah record sore
resetDailySnapshots()                     // Reset snapshot harian
captureScheduledPanenPagi(...)            // Auto-capture pagi
captureScheduledPanenSore(...)            // Auto-capture sore (dengan delta)
_savePanenToFirebase(panen)               // Save ke Firebase
loadTodaySnapshots()                      // Load snapshot dari Firebase
restorePanenHistoryFromFirebase()         // Restore data historical

📂 File-File yang Harus Dikerjakan

HARUS DIKERJAKAN:

  1. pubspec.yaml - Sudah diupdate
  2. lib/services/panen_scheduler.dart - Sudah dibuat
  3. lib/services/panen_auto_capture_service.dart - Sudah dibuat
  4. lib/providers/panen_provider.dart - Sudah diupdate
  5. lib/main.dart - KAMU EDIT SEKARANG (lihat QUICK_START_SCHEDULER.md)
  6. android/app/src/main/AndroidManifest.xml - Tambah permissions

DOKUMENTASI (Reference):

  • QUICK_START_SCHEDULER.md - Quick setup (3-5 menit)
  • SCHEDULER_IMPLEMENTATION_GUIDE.md - Detail lengkap & troubleshooting
  • MAIN_DART_EXAMPLE.dart - Contoh lengkap main.dart
  • PENJELASAN_DASHBOARD_RIWAYAT.md - Penjelasan existing system

🔧 LANGKAH IMPLEMENTASI

Step 1: Install Dependencies

cd d:\KULIAH\TA\TelurKu\telurku
flutter pub get

Step 2: Update main.dart

Buka lib/main.dart dan ikuti template di:

  • QUICK_START_SCHEDULER.md (short version) - 5 menit
  • MAIN_DART_EXAMPLE.dart (full example) - reference

Key changes:

// Import
import 'lib/services/panen_scheduler.dart';
import 'lib/services/panen_auto_capture_service.dart';

// Di main()
await PanenScheduler.initialize();

// Di _MyAppState.initState()
await PanenAutoCaptureService.initialize(_panenProvider);

Step 3: Update AndroidManifest.xml

Tambah di android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

Step 4: Test

flutter run

Tunggu hingga jam 09:00 atau 15:00, atau gunakan test button untuk manual trigger.


📊 ALUR KERJA OTOMATIS

JAM 09:00  (Pagi)
    ↓
Workmanager detect → Execute PanenScheduler task
    ↓
Read Firebase sensor (infra1, infra2)
    ↓
PanenAutoCaptureService.triggerMorningCapture()
    ↓
Loop setiap kandang → captureScheduledPanenPagi()
    ↓
Add to _panens + Save to Firebase
    ↓
✅ PANEN PAGI RECORDED

─────────────────────────────────

JAM 15:00 (Sore)
    ↓
Workmanager detect → Execute PanenScheduler task
    ↓
Read Firebase sensor (infra1, infra2)
    ↓
PanenAutoCaptureService.triggerAfternoonCapture()
    ↓
Loop setiap kandang → captureScheduledPanenSore()
    ↓
DELTA CALCULATION: sensorValue - snapshotPagi
    ↓
Add to _panens + Save to Firebase
    ↓
Reset daily snapshots
    ↓
✅ PANEN SORE RECORDED (dengan delta)

🎯 KEY FEATURES

Time-Windowing

  • Pagi (09:00): Akumulasi telur dari 15:01 kemarin hingga 09:00 hari ini (~18 jam)
  • Sore (15:00): Akumulasi telur dari 09:01 hingga 15:00 hari ini (~6 jam)

Snapshot Mechanism

  • Simpan nilai pagi agar bisa calculate delta sore
  • Cegah duplikasi data
  • Per-kandang tracking

Delta Calculation

Pagi: sensor_value = nilai teleor (langsung)
Sore: sensor_value - nilai_pagi = telur baru yang disimpan

Firebase Integration

  • /riwayat/ - Simpan history panen
  • /panen_snapshot/{date} - Simpan snapshot pagi & sore
  • Auto-restore saat app start

Auto Reset

  • Reset snapshot setelah panen sore selesai
  • Persiapan untuk hari berikutnya

📱 UI INDICATORS

Dashboard akan menampilkan status scheduler:

Status Scheduler Hari Ini:

🌅 Panen Pagi        🌆 Panen Sore
✅ Selesai (09:00)   ⏳ Menunggu (15:00)

Riwayat akan otomatis update dengan:

  • Total Produksi harian
  • Per-kandang detail (pagi & sore)
  • Delta values tercatat

BONUS FITUR

Manual Testing Buttons

Button: "Test: Trigger Panen Pagi"
Button: "Test: Trigger Panen Sore"
Button: "Reset Daily Snapshots"

(Tersedia di MAIN_DART_EXAMPLE.dart)

Debug Logging

Console akan menampilkan:

✅ Morning capture triggered for all kandang
✅ Afternoon capture triggered for all kandang
✅ Panen Pagi recorded untuk Kandang 1: 45 telur
✅ Panen Sore recorded untuk Kandang 1: 55 telur (delta: 100 - 45)

Firebase Backup

Semua data tersimpan di Firebase untuk:

  • Historical analysis
  • Recovery jika app crash
  • Multi-device sync (future)

🔐 IMPORTANT NOTES

  1. Device harus online saat jam 09:00 & 15:00
  2. Firebase connection harus aktif untuk save data
  3. Background execution berjalan even jika app minimized
  4. Battery optimization bisa block scheduler (perlu user adjustment)

📞 SUPPORT

Jika ada error:

  1. Build error?

    flutter clean
    flutter pub get
    flutter run
    
  2. Scheduler tidak jalan?

    • Check: apakah PanenScheduler.initialize() dipanggil di main()?
    • Check: AndroidManifest.xml sudah update?
    • Check: Firebase connection active?
  3. Data tidak tersimpan?

    • Check: Firebase Realtime Database rules
    • Check: /riwayat/ path bisa di-write?
    • Check: KandangProvider initialized?
  4. Delta calculation salah?

    • Check: Snapshot pagi tercatat di _snapshotPagiHariIni
    • Check: isPanenPagiRecordedToday() return true

📚 DOKUMENTASI

File Konten
QUICK_START_SCHEDULER.md Setup cepat (recommended!)
SCHEDULER_IMPLEMENTATION_GUIDE.md Detail teknis, customization, troubleshooting
MAIN_DART_EXAMPLE.dart Contoh main.dart lengkap dengan UI
PENJELASAN_DASHBOARD_RIWAYAT.md Cara kerja existing system

🚀 NEXT STEPS

  1. Edit main.dart sesuai QUICK_START_SCHEDULER.md
  2. Run flutter pub get
  3. Build & test di device
  4. Monitor console untuk verify scheduler jalan
  5. Check Firebase untuk verify data tersimpan
  6. Celebrate! 🎉

Estimated Setup Time: 15-20 minutes Complexity Level: Medium Result: Fully automated egg collection system