5.9 KiB
5.9 KiB
🚀 QUICK START - Scheduler Otomatis Panen
⚡ Setup dalam 5 Langkah
Step 1: Pastikan pubspec.yaml Updated ✅
Cek di pubspec.yaml sudah ada:
dependencies:
workmanager: ^0.5.1
Kalau belum, jalankan:
flutter pub add workmanager
Step 2: Copy 3 File Service (SUDAH DONE)
✅ Sudah di lib/services/:
panen_scheduler.dart← Background task schedulerpanen_auto_capture_service.dart← Bridge ke provider
Step 3: Update PanenProvider ✅ (SUDAH DONE)
✅ Sudah ada:
- Snapshot tracking properties
captureScheduledPanenPagi()methodcaptureScheduledPanenSore()method- Firebase save & restore methods
Step 4: Update main.dart ⏳ (KAMU SEKARANG)
Edit lib/main.dart seperti ini:
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<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late PanenProvider _panenProvider;
late KandangProvider _kandangProvider;
@override
void initState() {
super.initState();
_initializeServices();
}
Future<void> _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<PanenProvider>.value(value: _panenProvider),
ChangeNotifierProvider<KandangProvider>.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:
Consumer2<PanenProvider, KandangProvider>(
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.yamlsudah punyaworkmanager: ^0.5.1- 2 file service ada di
lib/services/ PanenProvidersudah updated dengan methods barumain.dartsudah import scheduler & capture servicemain.dartsudah callPanenScheduler.initialize()main.dartsudah callPanenAutoCaptureService.initialize()- Run
flutter pub get - Build & test
🎯 Testing
Test Manual (Sebelum jam 09:00 atau 15:00)
- Klik button "Test: Panen Pagi" di halaman Kontrol
- Lihat Firebase real-time database (path:
/riwayat/) - Verifikasi data tersimpan dengan benar
Test Otomatis
- Tunggu hingga jam 09:00
- Cek console log:
✅ Morning capture triggered - Cek Firebase: data panen pagi sudah tersimpan
- Tunggu jam 15:00
- 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:
- ✅ Baca sensor dari Firebase
- ✅ Hitung delta (sore - pagi)
- ✅ Simpan ke Firebase
/riwayat/ - ✅ 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 & customizationPENJELASAN_DASHBOARD_RIWAYAT.md- Cara kerja dashboard & riwayatMAIN_DART_EXAMPLE.dart- Contoh lengkap main.dart dengan UI
Questions? Check console logs atau review SCHEDULER_IMPLEMENTATION_GUIDE.md 🚀