5.2 KiB
5.2 KiB
🔍 ANALISIS MASALAH PENJADWALAN
❌ MASALAH TERIDENTIFIKASI
1. Railway Worker TIDAK TERINSTALL DI RAILWAY
Dari screenshot Railway Anda sebelumnya:
- Source Repo:
awisnuu/myreppril - Branch:
main - Root Directory: TIDAK DI-SET
PROBLEM: Railway mencoba build dari root folder, tapi kode worker ada di subfolder railway-worker/
2. File package.json Tidak Di-Push ke GitHub
Railway membutuhkan:
- ✅
worker.js - ✅
package.json - ✅
railway.jsonatau root directory config
Kalau file tidak ada di GitHub repo, Railway tidak bisa build.
✅ YANG SUDAH BENAR
Flutter Side (Sudah Oke ✓)
// waktu_config_page.dart line 578-583
await _dbService.updateKontrolConfig({
'waktu_1': _jadwalPenyiraman[0]['jamMulai'], // Format: "07:30"
'waktu_2': _jadwalPenyiraman[1]['jamMulai'], // Format: "17:00"
'durasi_1': durasi1Detik, // Dalam detik
'durasi_2': durasi2Detik, // Dalam detik
'waktu': _isWaktuModeActive, // true/false
});
Path Firebase: /kontrol/
- ✅
waktu= true/false (toggle mode) - ✅
waktu_1= "07:30" (string HH:mm) - ✅
waktu_2= "17:00" (string HH:mm) - ✅
durasi_1= 60 (integer seconds) - ✅
durasi_2= 60 (integer seconds)
Worker Side (Sudah Oke ✓)
// worker.js line 175-204
const kontrolConfig = snapshot.val();
if (!kontrolConfig || !kontrolConfig.waktu) return;
const currentTime = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`;
// Check Jadwal 1
if (kontrolConfig.waktu_1 && kontrolConfig.waktu_1 === currentTime) {
// Trigger penyiraman
}
Worker membaca path yang SAMA: /kontrol/
- ✅ Format waktu cocok: "HH:mm"
- ✅ Check interval: 30 detik
- ✅ Debouncing: Prevent double trigger
🚨 ROOT CAUSE
Railway worker TIDAK JALAN karena:
Issue #1: Root Directory Tidak Di-Set
Railway tidak tahu folder mana yang harus di-build.
Solution: Set Root Directory di Railway Settings:
railway-worker
Issue #2: File Belum Di-Push ke GitHub
Worker files mungkin hanya ada di local, belum di-commit/push.
Solution:
git add railway-worker/
git commit -m "Add Railway worker for 24/7 scheduling"
git push origin main
Issue #3: Environment Variables Belum Di-Set
Railway butuh Firebase credentials.
Solution: Add di Railway Variables:
FIREBASE_PROJECT_IDFIREBASE_CLIENT_EMAILFIREBASE_PRIVATE_KEYFIREBASE_DATABASE_URL
🎯 FORMAT DATA YANG BENAR
Firebase /kontrol/ Structure:
{
"kontrol": {
"waktu": true, // ← Mode waktu ON/OFF
"waktu_1": "07:30", // ← Jadwal 1 (HH:mm string)
"waktu_2": "17:00", // ← Jadwal 2 (HH:mm string)
"durasi_1": 60, // ← Durasi 1 (seconds integer)
"durasi_2": 60, // ← Durasi 2 (seconds integer)
"otomatis": false, // ← Mode sensor ON/OFF
"batas_bawah": 40,
"batas_atas": 100
}
}
Worker Logic:
// Cek setiap 30 detik
if (kontrolConfig.waktu === true) {
const now = new Date();
const currentTime = "07:30"; // Format sama dengan waktu_1/waktu_2
if (kontrolConfig.waktu_1 === currentTime) {
// TRIGGER PENYIRAMAN
}
}
✅ Format sudah MATCH antara Flutter dan Worker!
🔧 LANGKAH PERBAIKAN
Step 1: Push Worker Files ke GitHub
cd f:\ApsGo\ApsGo
git status
git add railway-worker/
git commit -m "Add Railway worker for 24/7 automation"
git push origin main
Step 2: Set Root Directory di Railway
- Railway Dashboard → Select service
myreppril - Settings tab
- Cari "Root Directory" atau "Build" section
- Set:
railway-worker - Save
Step 3: Add Environment Variables
Di Railway Settings → Variables:
FIREBASE_PROJECT_ID=project-ta-a119e
FIREBASE_CLIENT_EMAIL=firebase-adminsdk-xxxxx@project-ta-a119e.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----
FIREBASE_DATABASE_URL=https://project-ta-a119e-default-rtdb.firebaseio.com
Step 4: Redeploy
Railway akan auto-redeploy setelah:
- Root directory di-set
- Environment variables ditambahkan
Step 5: Monitor Logs
Railway Logs → Harus muncul:
🚀 Starting ApsGo Railway Worker...
✅ Firebase Admin initialized
✅ Redis connected
✅ Waktu Mode scheduler started (check every 30s)
🧪 TESTING
Test Manual:
- Set jadwal di APK (misalnya 2 menit dari sekarang)
- Pastikan
/kontrol/waktu= true di Firebase - Tunggu 2 menit
- Cek Railway logs → Harus ada:
🕐 JADWAL 1 TRIGGERED: 07:30 📌 Added to queue: jadwal_1 💧 Processing Job...
📊 KESIMPULAN
✅ TIDAK ADA MASALAH DI:
- Flutter code (sudah benar menulis ke Firebase)
- Worker code (sudah benar membaca dari Firebase)
- Format data (sudah compatible)
- Path Firebase (sama-sama
/kontrol/)
❌ MASALAH DI:
- Railway deployment (worker belum jalan)
- Root directory belum di-set
- Environment variables mungkin belum lengkap
🎯 ACTION REQUIRED:
- Push railway-worker ke GitHub
- Set root directory di Railway
- Verify environment variables
- Redeploy & monitor logs