8.0 KiB
🚨 SOLUSI LENGKAP: Penjadwalan Tidak Masuk Railway
📋 HASIL ANALISIS
✅ Yang SUDAH BENAR:
- Flutter Code - Data penjadwalan ditulis dengan benar ke Firebase
- Worker Code - Logic membaca dan execute sudah benar
- Format Data - Compatible antara Flutter dan Worker
- Git Repository - railway-worker sudah di-commit dan push
❌ KEMUNGKINAN MASALAH:
- Railway Root Directory belum di-set
- Environment Variables belum lengkap/salah
- Redis service belum di-add ke Railway
- Data penjadwalan belum di-set dari Flutter
🔧 LANGKAH PERBAIKAN (STEP-BY-STEP)
STEP 1: Verifikasi Data Di Firebase Console
- Buka Firebase Console
- Pilih project: project-ta-951b4
- Klik Realtime Database di sidebar
- Cek path
/kontrol/
Yang HARUS ADA:
{
"kontrol": {
"waktu": true, ← MUST BE TRUE!
"waktu_1": "07:30", ← Format HH:mm string
"waktu_2": "17:00", ← Format HH:mm string
"durasi_1": 60, ← Integer (seconds)
"durasi_2": 60, ← Integer (seconds)
"otomatis": false,
"batas_bawah": 40,
"batas_atas": 100
}
}
Jika data TIDAK ADA atau waktu = false:
- Buka Flutter app
- Masuk ke Kontrol Waktu
- Set jadwal
- Toggle "Aktif" menjadi ON
- Klik Simpan
STEP 2: Test Firebase Connection Dari Local
Di folder railway-worker, buat file .env:
cd f:\ApsGo\ApsGo\railway-worker
Create .env file (copy dari .env.example):
FIREBASE_PROJECT_ID=project-ta-951b4
FIREBASE_CLIENT_EMAIL=firebase-adminsdk-xxxxx@project-ta-951b4.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nYourKeyHere\n-----END PRIVATE KEY-----\n"
FIREBASE_DATABASE_URL=https://project-ta-951b4-default-rtdb.firebaseio.com
Cara dapat Firebase credentials:
- Firebase Console → Project Settings
- Service Accounts tab
- Klik "Generate New Private Key"
- Download JSON file
- Copy value dari JSON:
project_id→ FIREBASE_PROJECT_IDclient_email→ FIREBASE_CLIENT_EMAILprivate_key→ FIREBASE_PRIVATE_KEY (ganti \n dengan \n)- Database URL bisa dari Realtime Database page
Test connection:
cd railway-worker
npm install
node test-firebase-connection.js
Expected output:
✅ Firebase initialized
✅ DATA FOUND! Structure:
✅ DATA STRUCTURE VALID
✅ WAKTU MODE ENABLED
Jika error:
- Check credentials (terutama PRIVATE_KEY format)
- Pastikan Database URL benar
- Pastikan Firebase Rules mengizinkan read/write
STEP 3: Setup Railway - Root Directory
- Login ke Railway: https://railway.app
- Select Project: mellow-cat
- Select Service: myreppril
- Klik tab "Settings"
- Scroll ke section "Build"
- Cari field "Root Directory"
- Isi dengan:
railway-worker - Save (auto-save)
PENTING: Tanpa ini, Railway akan build dari root folder dan gagal!
STEP 4: Add Redis Database
- Di Railway project dashboard
- Klik tombol "+ New"
- Pilih "Database"
- Pilih "Add Redis"
- Tunggu provisioning selesai
Railway akan auto-inject environment variables:
REDIS_HOSTREDIS_PORTREDIS_PASSWORD
STEP 5: Set Environment Variables
Di Railway → Service myreppril → Tab "Variables"
ADD THESE:
| Variable Name | Value |
|---|---|
FIREBASE_PROJECT_ID |
project-ta-951b4 |
FIREBASE_CLIENT_EMAIL |
firebase-adminsdk-xxxxx@project-ta-951b4.iam.gserviceaccount.com |
FIREBASE_PRIVATE_KEY |
-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY----- |
FIREBASE_DATABASE_URL |
https://project-ta-951b4-default-rtdb.firebaseio.com |
⚠️ PENTING untuk PRIVATE_KEY:
- Harus dalam format string dengan
\n(backslash-n), BUKAN newline sebenarnya - Contoh:
-----BEGIN PRIVATE KEY-----\nMIIEvQIBADA...\n-----END PRIVATE KEY-----\n - Copy dari JSON file service account, tapi ganti newline dengan
\n
Cara mudah:
// Di PowerShell atau Node.js console
const fs = require('fs');
const key = JSON.parse(fs.readFileSync('service-account.json')).private_key;
console.log(key); // Ini sudah format dengan \n
STEP 6: Redeploy Railway
- Setelah set Root Directory & Variables
- Klik tab "Deployments"
- Klik "Redeploy" atau biarkan auto-deploy
- Tunggu build selesai (2-3 menit)
STEP 7: Monitor Logs
- Klik tab "Logs" (di navigation bar atas)
- Enable "Follow logs" (toggle di kanan atas)
Expected logs saat startup:
🚀 Starting ApsGo Railway Worker...
📡 Firebase Project: project-ta-951b4
📦 Redis: redis.railway.internal:6379
✅ Firebase Admin initialized
✅ Redis connected
✅ Waktu Mode scheduler started (check every 30s)
✅ Sensor Mode monitoring started
✨ ApsGo Railway Worker is running!
Jika ada error:
Firebase initialization failed→ Check credentialsRedis error→ Pastikan Redis database sudah di-addCannot find module→ Check Root Directory setting
STEP 8: Test Penjadwalan
Cara 1: Set jadwal dekat waktu sekarang
- Buka Flutter app
- Kontrol Waktu → Set Jadwal 1 = (waktu sekarang + 2 menit)
- Durasi = 10 detik
- Toggle "Aktif" = ON
- Simpan
- Tunggu 2 menit
- Cek Railway logs
Expected di logs:
🕐 JADWAL 1 TRIGGERED: 14:30
📌 Added to queue: jadwal_1_2026-02-10_14:30
💧 Processing Job: jadwal_1_...
Type: waktu_jadwal_1
Pots: [1, 2, 3, 4, 5]
Duration: 10s
🔛 Turning ON: mosvet_1, mosvet_3, mosvet_4, mosvet_5, mosvet_6, mosvet_7
⏳ Waiting 10s...
🔚 Turning OFF: mosvet_1, mosvet_3, mosvet_4, mosvet_5, mosvet_6, mosvet_7
✅ Worker completed job jadwal_1_...
📊 History logged: 2026-02-10 14:30
Cara 2: Check Firebase langsung
- Firebase Console → Realtime Database
- Monitor path
/kontrol/waktu - Monitor path
/aktuator/(harus berubah dari false → true → false)
🐛 TROUBLESHOOTING CHECKLIST
❌ "No logs at all in Railway"
- Root directory =
railway-worker? - Environment variables complete?
- Redis database added?
- Check Deployments tab for build errors
❌ "Logs show but no schedule triggers"
- Firebase
/kontrol/waktu= true? - Jadwal sudah di-set di Flutter?
- Format waktu benar (HH:mm string)?
- Current time match jadwal?
❌ "Firebase initialization failed"
- FIREBASE_PRIVATE_KEY format benar (dengan \n)?
- SERVICE_ACCOUNT email benar?
- Database URL benar?
- Firebase Rules allow read/write?
❌ "Redis connection error"
- Redis database sudah di-add di Railway?
- REDIS_HOST/PORT/PASSWORD auto-injected?
📊 CARA CEK DATA FIREBASE DARI FLUTTER
Tambahkan button debug di Flutter (temporary):
ElevatedButton(
onPressed: () async {
final data = await FirebaseDatabase.instance.ref('kontrol').get();
print('KONTROL DATA: ${data.value}');
},
child: Text('Debug: Print Kontrol Data'),
)
Check debug console untuk melihat data yang tersimpan.
🎯 QUICK TEST SCRIPT
Jalankan dari terminal:
# Test 1: Check Firebase data
cd f:\ApsGo\ApsGo\railway-worker
node test-firebase-connection.js
# Test 2: Check queue (if worker running)
node check-queue.js
📞 LANGKAH SELANJUTNYA
Setelah mengikuti STEP 1-8:
- Screenshot Railway Logs yang muncul
- Screenshot Firebase Console (path /kontrol/)
- Screenshot Railway Settings (Root Directory & Variables)
Dengan screenshot tersebut, saya bisa bantu troubleshoot lebih lanjut jika masih ada masalah!
✅ CHECKLIST FINAL
Sebelum test:
- Data jadwal ada di Firebase
/kontrol/ waktu= true di Firebase- Railway root directory =
railway-worker - 4 Firebase env variables di Railway
- Redis database added di Railway
- Worker logs muncul di Railway
- Jadwal set 2-3 menit dari sekarang untuk test
Jika semua checked, penjadwalan PASTI jalan! ✨