TKK_E32230814/railway-worker/WATERING_MODE_CHANGES.md

285 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)
```javascript
// 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)
```javascript
// 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
```javascript
{
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