# ๐Ÿš€ QUICK START - Scheduler Otomatis Panen ## โšก Setup dalam 5 Langkah ### Step 1: Pastikan pubspec.yaml Updated โœ… Cek di `pubspec.yaml` sudah ada: ```yaml dependencies: workmanager: ^0.5.1 ``` Kalau belum, jalankan: ```bash flutter pub add workmanager ``` ### Step 2: Copy 3 File Service (SUDAH DONE) โœ… Sudah di `lib/services/`: - `panen_scheduler.dart` โ† Background task scheduler - `panen_auto_capture_service.dart` โ† Bridge ke provider ### Step 3: Update PanenProvider โœ… (SUDAH DONE) โœ… Sudah ada: - Snapshot tracking properties - `captureScheduledPanenPagi()` method - `captureScheduledPanenSore()` method - Firebase save & restore methods ### Step 4: Update main.dart โณ (KAMU SEKARANG) **Edit `lib/main.dart` seperti ini:** ```dart import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:provider/provider.dart'; import 'firebase_options.dart'; // โœ… TAMBAH 2 IMPORT INI import 'lib/services/panen_scheduler.dart'; import 'lib/services/panen_auto_capture_service.dart'; // Import provider & page lain seperti biasa import 'lib/providers/panen_provider.dart'; import 'lib/providers/kandang_provider.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // Initialize Firebase await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); // โœ… TAMBAH BLOK INI (Initialize Scheduler) await PanenScheduler.initialize(); runApp(const MyApp()); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State createState() => _MyAppState(); } class _MyAppState extends State { late PanenProvider _panenProvider; late KandangProvider _kandangProvider; @override void initState() { super.initState(); _initializeServices(); } Future _initializeServices() async { // Create providers _panenProvider = PanenProvider(); _kandangProvider = KandangProvider(); // โœ… TAMBAH BLOK INI (Initialize auto-capture) await PanenAutoCaptureService.initialize(_panenProvider); } @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider.value(value: _panenProvider), ChangeNotifierProvider.value(value: _kandangProvider), // Provider lain... ], child: MaterialApp( title: 'TelurKu', theme: ThemeData(useMaterial3: true, primarySwatch: Colors.orange), home: const HomePage(), // Atau halaman home kamu ), ); } @override void dispose() { _panenProvider.dispose(); _kandangProvider.dispose(); super.dispose(); } } ``` ### Step 5: Test Manual (Optional) Tambahkan button di halaman Kontrol untuk testing: ```dart Consumer2( builder: (context, panenProvider, kandangProvider, _) { return Column( children: [ ElevatedButton( onPressed: () async { await PanenAutoCaptureService.triggerMorningCapture( panenProvider, kandangProvider, ); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('โœ… Panen Pagi triggered')), ); }, child: const Text('๐Ÿงช Test: Panen Pagi'), ), ElevatedButton( onPressed: () async { await PanenAutoCaptureService.triggerAfternoonCapture( panenProvider, kandangProvider, ); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('โœ… Panen Sore triggered')), ); }, child: const Text('๐Ÿงช Test: Panen Sore'), ), ], ); }, ) ``` --- ## ๐Ÿ“ Checklist - [ ] `pubspec.yaml` sudah punya `workmanager: ^0.5.1` - [ ] 2 file service ada di `lib/services/` - [ ] `PanenProvider` sudah updated dengan methods baru - [ ] `main.dart` sudah import scheduler & capture service - [ ] `main.dart` sudah call `PanenScheduler.initialize()` - [ ] `main.dart` sudah call `PanenAutoCaptureService.initialize()` - [ ] Run `flutter pub get` - [ ] Build & test --- ## ๐ŸŽฏ Testing ### Test Manual (Sebelum jam 09:00 atau 15:00) 1. Klik button "Test: Panen Pagi" di halaman Kontrol 2. Lihat Firebase real-time database (path: `/riwayat/`) 3. Verifikasi data tersimpan dengan benar ### Test Otomatis 1. Tunggu hingga jam 09:00 2. Cek console log: `โœ… Morning capture triggered` 3. Cek Firebase: data panen pagi sudah tersimpan 4. Tunggu jam 15:00 5. Cek delta calculation benar --- ## ๐Ÿ› Troubleshooting Cepat | Problem | Solution | |---------|----------| | "Scheduler tidak jalan" | Sudah jalankan `flutter pub get`? | | "Data tidak tersimpan FB" | Cek Firebase rules allow write | | "Delta calculation salah" | Cek snapshot pagi tercatat di Firebase | | "Build error" | Clean: `flutter clean` โ†’ `flutter pub get` | --- ## ๐Ÿ“Š Monitoring ### Lihat Logs Scheduler Di Android Studio: ``` Run > Logcat โ†’ search "Triggering" atau "captured" ``` ### Lihat Data di Firebase Console: https://console.firebase.google.com/ โ†’ Realtime Database โ†’ `riwayat/` folder ### Lihat State di App Dashboard akan menampilkan: - โœ… atau โณ status untuk Panen Pagi - โœ… atau โณ status untuk Panen Sore --- ## ๐ŸŽ‰ Done! Sistem scheduler otomatis sudah siap! **Kapan saja jam 09:00 dan 15:00 (24/7), sistem akan:** 1. โœ… Baca sensor dari Firebase 2. โœ… Hitung delta (sore - pagi) 3. โœ… Simpan ke Firebase `/riwayat/` 4. โœ… Update UI secara real-time Tidak perlu klik tombol lagi! ๐ŸŽŠ --- ## ๐Ÿ“š Dokumentasi Lengkap Lihat file ini untuk detail lebih lanjut: - `SCHEDULER_IMPLEMENTATION_GUIDE.md` - Setup lengkap & customization - `PENJELASAN_DASHBOARD_RIWAYAT.md` - Cara kerja dashboard & riwayat - `MAIN_DART_EXAMPLE.dart` - Contoh lengkap main.dart dengan UI --- **Questions?** Check console logs atau review SCHEDULER_IMPLEMENTATION_GUIDE.md ๐Ÿš€