7.4 KiB
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 pagitriggerAfternoonCapture()- Eksekusi panen sore dengan deltainitialize()- 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:
- ✅
pubspec.yaml- Sudah diupdate - ✅
lib/services/panen_scheduler.dart- Sudah dibuat - ✅
lib/services/panen_auto_capture_service.dart- Sudah dibuat - ✅
lib/providers/panen_provider.dart- Sudah diupdate - ⏳
lib/main.dart- KAMU EDIT SEKARANG (lihat QUICK_START_SCHEDULER.md) - ⏳
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 & troubleshootingMAIN_DART_EXAMPLE.dart- Contoh lengkap main.dartPENJELASAN_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 menitMAIN_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
- Device harus online saat jam 09:00 & 15:00
- Firebase connection harus aktif untuk save data
- Background execution berjalan even jika app minimized
- Battery optimization bisa block scheduler (perlu user adjustment)
📞 SUPPORT
Jika ada error:
-
Build error?
flutter clean flutter pub get flutter run -
Scheduler tidak jalan?
- Check: apakah
PanenScheduler.initialize()dipanggil di main()? - Check: AndroidManifest.xml sudah update?
- Check: Firebase connection active?
- Check: apakah
-
Data tidak tersimpan?
- Check: Firebase Realtime Database rules
- Check:
/riwayat/path bisa di-write? - Check: KandangProvider initialized?
-
Delta calculation salah?
- Check: Snapshot pagi tercatat di
_snapshotPagiHariIni - Check:
isPanenPagiRecordedToday()return true
- Check: Snapshot pagi tercatat di
📚 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
- Edit main.dart sesuai QUICK_START_SCHEDULER.md
- Run
flutter pub get - Build & test di device
- Monitor console untuk verify scheduler jalan
- Check Firebase untuk verify data tersimpan
- Celebrate! 🎉
Estimated Setup Time: 15-20 minutes Complexity Level: Medium Result: Fully automated egg collection system ✅