6.5 KiB
6.5 KiB
🐛 Debugging Guide - Railway Worker
Masalah yang Ditemukan
1️⃣ Log Scheduler Tidak Muncul
Penyebab:
- Kondisi logging
now.getSeconds() < 60tidak 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
/aktuatortidak 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
- Check Railway logs untuk
CHECK #Xsetiap menit - Pastikan counter naik:
CHECK #1, #2, #3... - Jika tidak ada, worker crash atau interval tidak jalan
Test 2: Test Jadwal Manual
- Lihat log
CURRENT TIME ANALYSISuntuk waktu saat ini - Set
waktu_1di Firebase = waktu saat ini + 2 menit- Contoh: Sekarang 10:30 → set
waktu_1: "10:32"
- Contoh: Sekarang 10:30 → set
- Tunggu 2 menit
- Harus muncul log
JADWAL 1 TRIGGERED: 10:32
Test 3: Verifikasi Queue
- Saat jadwal trigger, cek log
Queue status: - Pastikan ada
1 activeatau1 waiting - Kemudian lihat
Processing Job:muncul
Test 4: Verifikasi Firebase Aktuator
- Saat job running, buka Firebase Console
- Lihat node
/aktuator - Pastikan mosvet yang relevan =
true - 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 CHECKuntuk 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 #Xsetiap 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
/aktuatordi Firebase berubah nilai - Setelah durasi, aktuator OFF dan muncul log history
🎯 Expected Behavior
Normal Flow:
- Worker start → Diagnostic checks (5 detik)
- First check immediately → CHECK #1
- Check setiap 60 detik → CHECK #2, #3, #4...
- Saat match → TRIGGERED
- Add to queue → Queue status updated
- Worker process job → Aktuator ON
- Wait duration → Progress logs setiap 10s
- Duration done → Aktuator OFF
- 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
- Monitor Railway logs secara real-time saat testing
- Gunakan waktu + 2 menit untuk test (beri waktu buffer)
- Cek Firebase Console bersamaan dengan Railway logs
- Screenshot error logs jika ada masalah untuk analisis
- Restart worker setelah update kode atau environment variable
📞 Support
Jika masih ada masalah setelah ikuti guide ini:
- Export Railway logs (10 menit terakhir)
- Screenshot Firebase
/kontrolnode - Screenshot Firebase
/aktuatornode - Catat waktu test dilakukan
- Dokumentasikan expected vs actual behavior