285 lines
6.9 KiB
Markdown
285 lines
6.9 KiB
Markdown
# 📱 Panduan Sistem Penjad walan Baru - Flutter App
|
|
|
|
## ✨ Fitur Baru
|
|
|
|
Sistem penjadwalan ApsGo telah diupgrade dengan fitur:
|
|
|
|
✅ **Multiple Jadwal** - Tidak lagi terbatas 2 jadwal saja
|
|
✅ **Flexible Pot Selection** - Setiap jadwal bisa pilih pot mana yang aktif
|
|
✅ **Per-Schedule Config** - Tiap jadwal punya durasi & pompa sendiri
|
|
✅ **Enable/Disable** - Matikan jadwal tanpa hapus data
|
|
✅ **Real-time Sync** - Langsung sync dengan Firebase & Railway Worker
|
|
|
|
## 📁 File Baru yang Dibuat
|
|
|
|
### Models
|
|
- `lib/models/jadwal_model.dart` - Data model untuk jadwal
|
|
|
|
### Services
|
|
- `lib/services/jadwal_service.dart` - CRUD operations untuk jadwal Firebase
|
|
|
|
### Screens
|
|
- `lib/screens/jadwal_management_page.dart` - List & manage all jadwal
|
|
- `lib/screens/jadwal_form_page.dart` - Add/edit jadwal form
|
|
|
|
### Config
|
|
- `firebase-structure-complete.json` - Struktur Firebase lengkap
|
|
|
|
## 🗄️ Struktur Firebase Baru
|
|
|
|
```json
|
|
{
|
|
"kontrol": {
|
|
"waktu": true,
|
|
"sensor": false,
|
|
"otomatis": true,
|
|
|
|
"jadwal_1": {
|
|
"aktif": true,
|
|
"waktu": "08:00",
|
|
"durasi": 60,
|
|
"pot_aktif": [1, 2, 3],
|
|
"pompa_air": true,
|
|
"pompa_pupuk": false
|
|
},
|
|
"jadwal_2": {
|
|
"aktif": true,
|
|
"waktu": "09:00",
|
|
"durasi": 45,
|
|
"pot_aktif": [4, 5],
|
|
"pompa_air": true,
|
|
"pompa_pupuk": true
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## 🚀 Cara Setup
|
|
|
|
### 1. Copy Struktur Firebase
|
|
|
|
1. Buka Firebase Console → Realtime Database
|
|
2. Edit `/kontrol` node
|
|
3. Tambahkan jadwal sesuai contoh di atas
|
|
4. Atau import dari `firebase-structure-complete.json`
|
|
|
|
### 2. Update Dependency (Jika Perlu)
|
|
|
|
Pastikan `pubspec.yaml` sudah punya:
|
|
|
|
```yaml
|
|
dependencies:
|
|
firebase_database: ^latest_version
|
|
shared_preferences: ^latest_version
|
|
```
|
|
|
|
### 3. Update Navigation
|
|
|
|
File `lib/screens/kontrol_page.dart` sudah diupdate untuk navigasi ke JadwalManagementPage.
|
|
|
|
## 📱 Cara Menggunakan di App
|
|
|
|
### Akses Jadwal Management
|
|
|
|
1. Buka app ApsGo
|
|
2. Tap tab **Kontrol**
|
|
3. Tap button **Waktu**
|
|
4. Akan muncul **Jadwal Management Page**
|
|
|
|
### Tambah Jadwal Baru
|
|
|
|
1. Di Jadwal Management Page, tap tombol **+ Tambah Jadwal**
|
|
2. Isi form:
|
|
- **Waktu**: Pilih jam berapa jadwal akan jalan
|
|
- **Durasi**: Berapa menit penyiraman (auto convert ke detik)
|
|
- **Pilih Pot**: Centang pot mana yang akan disiram
|
|
- **Pompa Air**: Toggle on/off
|
|
- **Pompa Pupuk**: Toggle on/off
|
|
- **Status Jadwal**: Aktif or nonaktif
|
|
3. Tap **TAMBAH JADWAL**
|
|
|
|
### Edit Jadwal
|
|
|
|
1. Di list jadwal, tap button **Edit**
|
|
2. Ubah settingan yang diinginkan
|
|
3. Tap **SIMPAN PERUBAHAN**
|
|
|
|
### Aktifkan/Nonaktifkan Jadwal
|
|
|
|
Gunakan **Switch** di kanan atas setiap jadwal card untuk toggle on/off cepat.
|
|
|
|
### Duplikat Jadwal
|
|
|
|
1. Tap button **Duplikat** di jadwal yang ingin dicopy
|
|
2. Jadwal baru otomatis dibuat dengan ID baru (status: nonaktif)
|
|
3. Edit jadwal baru sesuai kebutuhan
|
|
|
|
### Hapus Jadwal
|
|
|
|
1. Tap icon **🗑️** (trash) di jadwal yang ingin dihapus
|
|
2. Konfirmasi penghapusan
|
|
|
|
## 🎨 UI Features
|
|
|
|
### Jadwal Management Page
|
|
|
|
- **Mode Waktu Toggle**: Enable/disable semua jadwal sekaligus
|
|
- **Jadwal Cards**: Menampilkan semua jadwal dengan info lengkap
|
|
- **Color Coding**: Hijau = aktif, Abu-abu = nonaktif
|
|
- **Real-time Updates**: Pull to refresh untuk sync terbaru
|
|
|
|
### Jadwal Form Page
|
|
|
|
- **Time Picker**: Native Android/iOS time picker
|
|
- **Duration Input**: Input menit, auto convert ke detik
|
|
- **Pot Selection**: Visual checkboxes untuk 5 pot
|
|
- **Quick Actions**: "Pilih Semua" & "Bersihkan"
|
|
- **Validation**: Auto validasi sebelum save
|
|
|
|
## ⚠️ Catatan Penting
|
|
|
|
### Kompatibilitas dengan Worker
|
|
|
|
Worker Railway sudah updated untuk support format baru. Kedua sistem (lama & baru) masih compatible:
|
|
|
|
**Format Lama** (masih jalan):
|
|
```json
|
|
{
|
|
"waktu_1": "08:00",
|
|
"durasi_1": 60
|
|
}
|
|
```
|
|
|
|
**Format Baru** (recommended):
|
|
```json
|
|
{
|
|
"jadwal_1": {
|
|
"aktif": true,
|
|
"waktu": "08:00",
|
|
"durasi": 60,
|
|
"pot_aktif": [1, 2, 3],
|
|
"pompa_air": true,
|
|
"pompa_pupuk": false
|
|
}
|
|
}
|
|
```
|
|
|
|
### Migration Path
|
|
|
|
Tidak perlu migrate semua sekaligus. Sistem bisa pakai campuran format lama & baru.
|
|
|
|
**Recommended migration:**
|
|
1. Biarkan format lama tetap jalan
|
|
2. Tambah jadwal baru dengan format baru
|
|
3. Test jadwal baru beberapa hari
|
|
4. Hapus format lama setelah yakin
|
|
|
|
## 🔧 Troubleshooting
|
|
|
|
### Jadwal tidak muncul di app
|
|
|
|
**Check:**
|
|
1. Firebase connected? (Check Firebase console)
|
|
2. Struktur Firebase benar?
|
|
3. Node path: `/kontrol/jadwal_X`
|
|
|
|
### Jadwal tidak trigger di worker
|
|
|
|
**Check:**
|
|
1. Worker running di Railway?
|
|
2. `kontrol.waktu` = `true`?
|
|
3. `jadwal_X.aktif` = `true`?
|
|
4. Format waktu "HH:MM" (2 digit)?
|
|
5. Check Railway logs
|
|
|
|
### Pot tidak menyala
|
|
|
|
**Check:**
|
|
1. `pot_aktif` array benar? `[1, 2, 3]`
|
|
2. Pot number 1-5 (bukan 0-4)
|
|
3. Check aktuator di Firebase
|
|
4. Hardware connection OK?
|
|
|
|
## 📊 Testing Checklist
|
|
|
|
Sebelum production, test:
|
|
|
|
- [ ] Add jadwal baru
|
|
- [ ] Edit jadwal existing
|
|
- [ ] Toggle jadwal aktif/nonaktif
|
|
- [ ] Duplikat jadwal
|
|
- [ ] Hapus jadwal
|
|
- [ ] Toggle mode waktu on/off
|
|
- [ ] Test jadwal trigger di waktu yang ditentukan
|
|
- [ ] Test multiple pot selection
|
|
- [ ] Test pompa air on/off per jadwal
|
|
- [ ] Test pompa pupuk on/off per jadwal
|
|
- [ ] Test pull to refresh
|
|
- [ ] Test dengan 5+ jadwal sekaligus
|
|
|
|
## 🎯 Contoh Use Case
|
|
|
|
### Use Case 1: Rumah simple
|
|
|
|
**Kebutuhan**: Siram semua pot 2x sehari (pagi & sore)
|
|
|
|
**Setup**:
|
|
```
|
|
Jadwal 1: 08:00 → Pot [1,2,3,4,5] → 60s
|
|
Jadwal 2: 16:00 → Pot [1,2,3,4,5] → 60s
|
|
```
|
|
|
|
### Use Case 2: Per-pot berbeda
|
|
|
|
**Kebutuhan**:
|
|
- Pot 1&2: 3x sehari (pagi, siang, sore)
|
|
- Pot 3&4: 2x sehari (pagi, sore)
|
|
- Pot 5: 1x sehari (pagi)
|
|
|
|
**Setup**:
|
|
```
|
|
Jadwal 1: 07:00 → Pot [1,2] → 60s
|
|
Jadwal 2: 08:00 → Pot [3,4,5] → 60s
|
|
Jadwal 3: 12:00 → Pot [1,2] → 45s
|
|
Jadwal 4: 16:00 → Pot [3,4] → 50s
|
|
Jadwal 5: 17:00 → Pot [1,2] → 40s
|
|
```
|
|
|
|
### Use Case 3: Different durations
|
|
|
|
**Kebutuhan**: Setiap pot punya durasi berbeda
|
|
|
|
**Setup**:
|
|
```
|
|
Jadwal 1: 08:00 → Pot [1] → 30s (Fast)
|
|
Jadwal 2: 08:05 → Pot [2] → 60s (Medium)
|
|
Jadwal 3: 08:10 → Pot [3] → 90s (Long)
|
|
Jadwal 4: 08:15 → Pot [4] → 45s
|
|
Jadwal 5: 08:20 → Pot [5] → 75s
|
|
```
|
|
|
|
## 📝 Best Practices
|
|
|
|
1. **Naming Convention**: Gunakan `jadwal_1`, `jadwal_2`, dst (agar auto-detect worker)
|
|
2. **Time Format**: Selalu 2 digit "HH:MM" (misal: "08:00" bukan "8:0")
|
|
3. **Duration**: Input dalam menit di app, akan auto convert ke detik
|
|
4. **pot_aktif**: Gunakan array number [1, 2, 3], bukan string
|
|
5. **Testing**: Test jadwal baru dengan status nonaktif dulu sebelum aktifkan
|
|
|
|
## 🔗 Related Files
|
|
|
|
- Worker: `railway-worker/worker.js` (sudah updated)
|
|
- Firebase Guide: `railway-worker/FLEXIBLE_SCHEDULE_GUIDE.md`
|
|
- Example Firebase: `firebase-structure-complete.json`
|
|
|
|
---
|
|
|
|
## 💡 Tips
|
|
|
|
- Gunakan **Duplikat** untuk cepat bikin jadwal mirip
|
|
- **Pull to refresh** untuk sync perubahan dari Firebase/Worker
|
|
- **Mode Waktu toggle** untuk disable semua jadwal sekaligus
|
|
- Jadwal dengan **pot kosong** akan di-skip otomatis
|
|
|
|
Selamat menggunakan sistem penjadwalan baru! 🚀🌱
|