TKK_E32231105/RINGKASAN_SCHEDULER_SYSTEM.md

285 lines
7.4 KiB
Markdown

# 📋 RINGKASAN SISTEM SCHEDULER OTOMATIS PANEN
## 🎯 Apa yang Sudah Dibuat
### ✅ 1. Dependency Update
**File:** `pubspec.yaml`
```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:**
```dart
// 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
```bash
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:**
```dart
// 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`:
```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
```bash
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
```dart
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?**
```bash
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 ✅