Add comprehensive debugging guide for scheduler and aktuator issues
This commit is contained in:
parent
76bb751962
commit
025c39a4f0
|
|
@ -0,0 +1,241 @@
|
||||||
|
# 🐛 Debugging Guide - Railway Worker
|
||||||
|
|
||||||
|
## Masalah yang Ditemukan
|
||||||
|
|
||||||
|
### 1️⃣ **Log Scheduler Tidak Muncul**
|
||||||
|
|
||||||
|
**Penyebab:**
|
||||||
|
- Kondisi logging `now.getSeconds() < 60` tidak efektif
|
||||||
|
- Interval check 60 detik tidak sinkron dengan menit yang tepat
|
||||||
|
- Tidak ada konfirmasi bahwa fungsi `checkScheduledWatering()` berjalan
|
||||||
|
|
||||||
|
**Solusi:**
|
||||||
|
✅ Tambah counter untuk track setiap check
|
||||||
|
✅ Log setiap kali fungsi dipanggil: `⏱️ CHECK #X`
|
||||||
|
✅ Log detail setiap 3 check atau setiap 5 menit
|
||||||
|
✅ Jalankan check pertama kali setelah 5 detik (tidak tunggu 60 detik)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2️⃣ **Aktuator Tidak Trigger**
|
||||||
|
|
||||||
|
**Kemungkinan Penyebab:**
|
||||||
|
- Node `/aktuator` tidak ada di Firebase
|
||||||
|
- Format waktu tidak match dengan jadwal
|
||||||
|
- Queue tidak menjalankan job
|
||||||
|
- Firebase update gagal tanpa error log
|
||||||
|
|
||||||
|
**Solusi:**
|
||||||
|
✅ Validasi node aktuator saat startup
|
||||||
|
✅ Log verbose untuk setiap Firebase update
|
||||||
|
✅ Verify state aktuator setelah update
|
||||||
|
✅ Log queue status (active/waiting jobs)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Log Baru yang Akan Muncul
|
||||||
|
|
||||||
|
### Saat Startup (5 detik pertama):
|
||||||
|
```
|
||||||
|
🔧 RUNNING DIAGNOSTIC CHECKS...
|
||||||
|
🕐 CURRENT TIME ANALYSIS:
|
||||||
|
Server Local: Wed Feb 11 2026 10:20:05 GMT+0700
|
||||||
|
Asia/Jakarta: 11/2/2026, 10.20.05
|
||||||
|
TZ Env: Asia/Jakarta
|
||||||
|
HH:MM Format: 10:20
|
||||||
|
|
||||||
|
📋 FIREBASE KONTROL:
|
||||||
|
Mode Waktu: ENABLED ✅
|
||||||
|
Waktu 1: 10:18
|
||||||
|
Waktu 2: 09:00
|
||||||
|
|
||||||
|
🔍 CHECKING AKTUATOR NODE...
|
||||||
|
✅ Aktuator node exists:
|
||||||
|
mosvet_1: false
|
||||||
|
mosvet_2: false
|
||||||
|
...
|
||||||
|
|
||||||
|
🚀 Running first schedule check immediately...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setiap 60 Detik:
|
||||||
|
```
|
||||||
|
⏱️ CHECK #1: 10:20:15 | Mode: ✅
|
||||||
|
⏱️ CHECK #2: 10:21:15 | Mode: ✅
|
||||||
|
⏱️ CHECK #3: 10:22:15 | Mode: ✅
|
||||||
|
📅 Date: 2026-02-11
|
||||||
|
🕐 Current: 10:22 (11/2/2026, 10.22.15)
|
||||||
|
Mode Waktu: ✅ ENABLED
|
||||||
|
Jadwal 1: 10:18
|
||||||
|
Jadwal 2: 09:00
|
||||||
|
```
|
||||||
|
|
||||||
|
### Saat Jadwal Match:
|
||||||
|
```
|
||||||
|
⏱️ CHECK #8: 10:25:00 | Mode: ✅
|
||||||
|
📅 Date: 2026-02-11
|
||||||
|
🕐 Current: 10:25 (11/2/2026, 10.25.00)
|
||||||
|
Mode Waktu: ✅ ENABLED
|
||||||
|
Jadwal 1: 10:25 🔔 MATCH!
|
||||||
|
Jadwal 2: 09:00
|
||||||
|
|
||||||
|
🕐 JADWAL 1 TRIGGERED: 10:25
|
||||||
|
🎯 Attempting to add job to queue...
|
||||||
|
✅ Successfully added to queue: jadwal_1_2026-02-11_10:25
|
||||||
|
📊 Queue status: 1 active, 0 waiting
|
||||||
|
|
||||||
|
💧 Processing Job: jadwal_1_2026-02-11_10:25
|
||||||
|
Type: waktu_jadwal_1
|
||||||
|
Pots: [1, 2, 3, 4, 5]
|
||||||
|
Duration: 300s
|
||||||
|
🔛 Turning ON: mosvet_1, mosvet_2, mosvet_3, mosvet_4, mosvet_5, mosvet_6, mosvet_7
|
||||||
|
📌 Firebase path: aktuator
|
||||||
|
📝 Updates: {
|
||||||
|
"mosvet_1": true,
|
||||||
|
"mosvet_2": true,
|
||||||
|
...
|
||||||
|
}
|
||||||
|
✅ Firebase update successful
|
||||||
|
🔍 Verified aktuator state: { ... }
|
||||||
|
⏳ 300s remaining...
|
||||||
|
⏳ 290s remaining...
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Saat Sensor Trigger:
|
||||||
|
```
|
||||||
|
🌡️ SENSOR CHECK #10 | Mode Otomatis: ✅
|
||||||
|
|
||||||
|
🌡️ SENSOR TRIGGERED: POT 1
|
||||||
|
Soil moisture: 35% < 40%
|
||||||
|
Mode: smart, Duration: 600s
|
||||||
|
📌 Added to queue: sensor-pot-1-...
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Cara Testing
|
||||||
|
|
||||||
|
### Test 1: Verifikasi Worker Berjalan
|
||||||
|
1. Check Railway logs untuk `CHECK #X` setiap menit
|
||||||
|
2. Pastikan counter naik: `CHECK #1, #2, #3...`
|
||||||
|
3. Jika tidak ada, worker crash atau interval tidak jalan
|
||||||
|
|
||||||
|
### Test 2: Test Jadwal Manual
|
||||||
|
1. Lihat log `CURRENT TIME ANALYSIS` untuk waktu saat ini
|
||||||
|
2. Set `waktu_1` di Firebase = waktu saat ini + 2 menit
|
||||||
|
- Contoh: Sekarang 10:30 → set `waktu_1: "10:32"`
|
||||||
|
3. Tunggu 2 menit
|
||||||
|
4. Harus muncul log `JADWAL 1 TRIGGERED: 10:32`
|
||||||
|
|
||||||
|
### Test 3: Verifikasi Queue
|
||||||
|
1. Saat jadwal trigger, cek log `Queue status:`
|
||||||
|
2. Pastikan ada `1 active` atau `1 waiting`
|
||||||
|
3. Kemudian lihat `Processing Job:` muncul
|
||||||
|
|
||||||
|
### Test 4: Verifikasi Firebase Aktuator
|
||||||
|
1. Saat job running, buka Firebase Console
|
||||||
|
2. Lihat node `/aktuator`
|
||||||
|
3. Pastikan mosvet yang relevan = `true`
|
||||||
|
4. Setelah durasi selesai, harus kembali `false`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚨 Troubleshooting
|
||||||
|
|
||||||
|
### Problem: Log CHECK tidak muncul
|
||||||
|
**Diagnosis:** Worker crash atau interval tidak jalan
|
||||||
|
**Solution:**
|
||||||
|
- Check Railway logs untuk error
|
||||||
|
- Restart worker di Railway Dashboard
|
||||||
|
|
||||||
|
### Problem: CHECK muncul tapi tidak TRIGGERED
|
||||||
|
**Diagnosis:** Format waktu tidak match
|
||||||
|
**Solution:**
|
||||||
|
- Cek log detail (setiap 3 check): lihat "Current: HH:MM"
|
||||||
|
- Bandingkan dengan "Jadwal 1: HH:MM" di Firebase
|
||||||
|
- Pastikan format sama persis (2 digit: "09:00" bukan "9:00")
|
||||||
|
|
||||||
|
### Problem: TRIGGERED tapi tidak Processing
|
||||||
|
**Diagnosis:** Queue error atau Redis disconnect
|
||||||
|
**Solution:**
|
||||||
|
- Cek log `HEALTH CHECK` untuk Redis status
|
||||||
|
- Cek log `Successfully added to queue`
|
||||||
|
- Restart Redis service jika perlu
|
||||||
|
|
||||||
|
### Problem: Processing tapi aktuator tidak ON
|
||||||
|
**Diagnosis:** Firebase update gagal atau node tidak ada
|
||||||
|
**Solution:**
|
||||||
|
- Cek log `Firebase update successful`
|
||||||
|
- Cek log `Verified aktuator state`
|
||||||
|
- Lihat Firebase Console untuk konfirmasi nilai
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Checklist Debugging
|
||||||
|
|
||||||
|
- [ ] Worker menghasilkan log `CHECK #X` setiap menit
|
||||||
|
- [ ] Counter naik terus (tidak reset tanpa alasan)
|
||||||
|
- [ ] Mode Waktu menunjukkan ✅ ENABLED di Firebase
|
||||||
|
- [ ] Format waktu di log match dengan jadwal (HH:MM)
|
||||||
|
- [ ] Saat match, muncul "🔔 MATCH!"
|
||||||
|
- [ ] Muncul "JADWAL X TRIGGERED"
|
||||||
|
- [ ] Muncul "Successfully added to queue"
|
||||||
|
- [ ] Queue status menunjukkan job active/waiting
|
||||||
|
- [ ] Muncul "Processing Job:"
|
||||||
|
- [ ] Muncul "Firebase update successful"
|
||||||
|
- [ ] Muncul "Verified aktuator state"
|
||||||
|
- [ ] Node `/aktuator` di Firebase berubah nilai
|
||||||
|
- [ ] Setelah durasi, aktuator OFF dan muncul log history
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Expected Behavior
|
||||||
|
|
||||||
|
**Normal Flow:**
|
||||||
|
1. Worker start → Diagnostic checks (5 detik)
|
||||||
|
2. First check immediately → CHECK #1
|
||||||
|
3. Check setiap 60 detik → CHECK #2, #3, #4...
|
||||||
|
4. Saat match → TRIGGERED
|
||||||
|
5. Add to queue → Queue status updated
|
||||||
|
6. Worker process job → Aktuator ON
|
||||||
|
7. Wait duration → Progress logs setiap 10s
|
||||||
|
8. Duration done → Aktuator OFF
|
||||||
|
9. Log history → Complete
|
||||||
|
|
||||||
|
**Timeline Example:**
|
||||||
|
```
|
||||||
|
10:20:05 - Worker start + diagnostics
|
||||||
|
10:20:10 - First check (CHECK #1)
|
||||||
|
10:21:10 - CHECK #2
|
||||||
|
10:22:10 - CHECK #3 (detail log)
|
||||||
|
10:23:10 - CHECK #4
|
||||||
|
10:24:10 - CHECK #5
|
||||||
|
10:25:10 - CHECK #6 (detail log) + JADWAL TRIGGERED!
|
||||||
|
10:25:15 - Job processing started
|
||||||
|
10:25:15 - Aktuator ON
|
||||||
|
10:30:15 - Aktuator OFF (after 300s)
|
||||||
|
10:30:15 - History logged
|
||||||
|
10:30:15 - Job completed
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 Tips
|
||||||
|
|
||||||
|
1. **Monitor Railway logs secara real-time** saat testing
|
||||||
|
2. **Gunakan waktu + 2 menit** untuk test (beri waktu buffer)
|
||||||
|
3. **Cek Firebase Console** bersamaan dengan Railway logs
|
||||||
|
4. **Screenshot error logs** jika ada masalah untuk analisis
|
||||||
|
5. **Restart worker** setelah update kode atau environment variable
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📞 Support
|
||||||
|
|
||||||
|
Jika masih ada masalah setelah ikuti guide ini:
|
||||||
|
1. Export Railway logs (10 menit terakhir)
|
||||||
|
2. Screenshot Firebase `/kontrol` node
|
||||||
|
3. Screenshot Firebase `/aktuator` node
|
||||||
|
4. Catat waktu test dilakukan
|
||||||
|
5. Dokumentasikan expected vs actual behavior
|
||||||
Loading…
Reference in New Issue