TKK_E32230814/JADWAL_FLUTTER_GUIDE.md

6.9 KiB

📱 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

{
  "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:

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):

{
  "waktu_1": "08:00",
  "durasi_1": 60
}

Format Baru (recommended):

{
  "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
  • 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! 🚀🌱