TKK_E32230814/railway-worker/WATERING_MODE_CHANGES.md

7.6 KiB
Raw Blame History

Dokumentasi Perubahan Mode Penyiraman

Serial Bergiliran dengan Break 30 Detik

Tanggal Update: June 2, 2026
Versi: 2.0 - Sequential Mode


📋 Ringkasan Perubahan

Sistem penyiraman telah diubah dari mode paralel menjadi mode serial bergiliran:

Sebelumnya (Paralel)

Jam 06:00 → Pot 1, Pot 2, Pot 3 semua ON bersamaan
           → Semua tunggu 60 detik
           → Semua OFF bersamaan
Total waktu: 60 detik

Sekarang (Serial Bergiliran)

Jam 06:00 → Pot 1 ON
           → Pot 1 tunggu 60 detik
           → Pot 1 OFF
           → Break 30 detik
Jam 06:01 → Pot 2 ON
           → Pot 2 tunggu 60 detik
           → Pot 2 OFF
           → Break 30 detik
Jam 06:02 → Pot 3 ON
           → Pot 3 tunggu 60 detik
           → Pot 3 OFF
Total waktu: 3 menit 40 detik

🎯 Penjelasan Teknis

1. Mode Fixed (Durasi Tetap)

Karakteristik:

  • Setiap pot disiram dengan durasi yang sama (sesuai setting durasi jadwal/threshold)
  • Pompa air/pupuk tetap ON selama loop (untuk efisiensi aliran)
  • Break 30 detik antar pot untuk stabilisasi

Rumus Total Waktu:

Total = (Jumlah Pot × Durasi Per Pot) + ((Jumlah Pot - 1) × 30 detik)

Contoh:

  • 3 pot, durasi 60s per pot → Total: 180s + 60s = 240 detik (4 menit)
  • 5 pot, durasi 120s per pot → Total: 600s + 120s = 720 detik (12 menit)

Proses Detail untuk 3 Pot:

[06:00:00] Pompa ON + Pot 1 Valve ON
[06:00:60] Pot 1 Valve OFF (pompa tetap ON)
[06:01:00] BREAK - menunggu 30 detik
[06:01:30] Pompa ON + Pot 2 Valve ON
[06:02:30] Pot 2 Valve OFF (pompa tetap ON)
[06:03:00] BREAK - menunggu 30 detik
[06:03:30] Pompa ON + Pot 3 Valve ON
[06:04:30] Pot 3 Valve OFF + Pompa OFF
[06:04:30] ✅ Penyiraman Selesai

2. Mode Smart (Sensor-Based)

Karakteristik:

  • Setiap pot dimonitor secara INDIVIDUAL dengan sensornya
  • Pot berhenti saat soil moisture mencapai target (batas_atas)
  • Maksimal durasi per pot = setting durasi (timeout safety)
  • Break 30 detik antar pot

Monitoring Interval: 2 detik (cek sensor setiap 2 detik)

Contoh Execution:

[06:00:00] Pompa ON + Pot 1 Valve ON
           → Monitor: 30% < 70% target
[06:00:02] → Monitor: 35% < 70% target
[06:00:04] → Monitor: 40% < 70% target
[06:02:00] → Monitor: 70% == 70% TARGET REACHED! ✅
           Pot 1 Valve OFF (pompa tetap ON)
[06:02:00] BREAK - menunggu 30 detik
[06:02:30] Pompa ON + Pot 2 Valve ON
           → Monitor: 25% < 70% target
[06:02:32] → Monitor: 35% < 70% target
[06:03:30] → Monitor: 70% == 70% TARGET REACHED! ✅
           Pot 2 Valve OFF (pompa tetap ON)
[06:04:00] BREAK - menunggu 30 detik
[06:04:30] Pompa ON + Pot 3 Valve ON
           → Monitor: 28% < 70% target
[06:05:15] → Monitor: 70% == 70% TARGET REACHED! ✅
           Pot 3 Valve OFF + Pompa OFF
[06:05:15] ✅ Penyiraman Selesai

Total waktu smart mode = VARIABLE (tergantung kecepatan mencapai target)

3. Break 30 Detik

Tujuan:

  • Stabilisasi tanah setelah penyiraman
  • Memastikan air merata
  • Menunggu sensor stabilisasi
  • Meringankan beban pompa

Durasi: Tetap 30 detik (tidak dapat dikonfigurasi saat ini)


⚙️ Implementasi pada Firebase

Jadwal (Waktu Mode)

// Firebase struktur
jadwal_1: {
  aktif: true,
  waktu: "06:00",           // Jam mulai
  pot_aktif: [1, 2, 3],     // Pot yang akan disiram (BERGILIRAN)
  durasi: 60,               // Durasi PER POT (dalam detik)
  pompa_air: true,
  pompa_pupuk: false
}

Contoh eksekusi:

  • Jadwal 1 jam 06:00 dengan pot [1,2,3] durasi 60s
  • Dimulai jam 06:00, selesai jam 06:03:40

Threshold (Sensor Mode)

// Firebase struktur
threshold_1: {
  aktif: true,
  pot_aktif: [1, 2, 3],     // Pot yang akan disiram (BERGILIRAN)
  batas_bawah: 30,          // Trigger saat <= 30%
  batas_atas: 70,           // Stop saat >= 70% (per pot)
  durasi: 600,              // Maksimal durasi PER POT (dalam detik)
  smart_mode: true,         // Gunakan sensor monitoring
  pompa_air: true,
  pompa_pupuk: true
}

Contoh eksekusi:

  • Threshold 1 terdeteksi pada pot [1,2,3]
  • Pot 1 dimonitor: stop saat 70% (misal 180 detik)
  • Break 30 detik
  • Pot 2 dimonitor: stop saat 70% (misal 120 detik)
  • Break 30 detik
  • Pot 3 dimonitor: stop saat 70% (misal 150 detik)
  • Total: ~9 menit (variable)

🔒 Keamanan & Safety

Mekanisme Safety

  1. Verification setelah ON: Cek Firebase untuk konfirmasi valve sudah ON
  2. Error Handling: Jika ada error, semua mosvet (valve) langsung OFF
  3. Timeout Protection: Smart mode memiliki maksimal durasi per pot
  4. Retry Logic: Update Firebase dengan retry hingga 3 kali

Off Command

Pompa OFF hanya dilakukan SETELAH semua pot selesai
Ini mencegah pompa mati di tengah penyiraman pot berikutnya

📊 History Logging

Data yang Dicatat

{
  timestamp: 1234567890000,
  source: "server",
  type: "waktu_jadwal_1",           // Tipe penyiraman
  pots: [1, 2, 3],                  // Pot yang disiram
  duration: 240,                    // Total durasi ACTUAL (termasuk break)
  soil_1: 72,                       // Sensor data saat log
  soil_2: 68,
  soil_3: 74
}

Durasi Dicatat

  • Fixed Mode: Total waktu = (pot × durasi) + ((pot-1) × 30s break)
  • Smart Mode: Total waktu ACTUAL saat semua pot mencapai target atau timeout

🚨 Perubahan Perilaku vs Sebelumnya

Aspek Sebelumnya Sekarang
Eksekusi Pot Paralel (bersamaan) Serial (bergiliran)
Break Antar Pot Tidak ada 30 detik
Durasi Total untuk semua pot Per pot
Total Waktu Lebih cepat Lebih lama (~3x)
Efek Pompa Beban max Beban stabil
Sensor Stability Kurang akurat Lebih akurat per-pot

⏱️ Estimasi Waktu Eksekusi

Fixed Mode (60 detik per pot)

1 pot  → ~60 detik
2 pot  → ~150 detik (2m 30s)
3 pot  → ~240 detik (4m)
4 pot  → ~330 detik (5m 30s)
5 pot  → ~420 detik (7m)

Smart Mode (Variable)

3 pot  → 5-15 menit (tergantung kondisi tanah)
5 pot  → 10-30 menit (tergantung kondisi tanah)

🔔 Notifikasi Perubahan

Notifikasi Jadwal (Fixed Mode)

Sebelumnya:
"Pada jam 06:00 akan dilakukan penyiraman untuk pot 1, 2, 3."

Sekarang:
"Penyiraman bergiliran untuk pot 1, 2, 3 dimulai dari jam 06:00. 
Setiap pot disiram 60s dengan jeda 30 detik."

Notifikasi Threshold (Smart Mode)

Tetap sama, hanya ada penanda "bergiliran" untuk clarity.


🐛 Troubleshooting

Jika Penyiraman Tidak Bergiliran

  1. Cek Firebase /kontrol/jadwal_* atau /kontrol/threshold_*
  2. Pastikan pot_aktif adalah array, bukan single value
  3. Cek log: kata kunci "SEQUENTIAL WATERING" harus muncul

Jika Break 30 Detik Tidak Terjadi

  1. Cek log: kata kunci "BREAK 30 DETIK" harus muncul
  2. Verifikasi durasi break di kode: BREAK_BETWEEN_POTS_MS = 30000 (ms)

Jika Pompa Tidak OFF

  1. Cek log untuk error pada langkah terakhir
  2. Manual OFF via Firebase /aktuator/mosvet_1 dan /aktuator/mosvet_2

🔄 Rollback (Kembali ke Paralel)

Jika ingin kembali ke mode paralel, hubungi developer untuk revert perubahan worker.js ke versi sebelumnya.


📝 Catatan Developer

  • Mode bergiliran dipilih untuk: stabilitas sensor, efisiensi pompa, dan kontrol lebih baik
  • Break 30 detik hardcoded (bisa dikonfigurasi via env var jika perlu)
  • Backward compatible: struktur Firebase tidak berubah
  • Tested pada: 1-5 pot configuration

Update Next? Rencana mungkin:

  • Make break duration configurable
  • Per-pot sensor tolerance tuning
  • Priority-based watering (pot priority order)
  • Concurrent threshold + schedule handling