TKK_E32230814/DIAGNOSIS_PENJADWALAN.md

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.json atau 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_ID
  • FIREBASE_CLIENT_EMAIL
  • FIREBASE_PRIVATE_KEY
  • FIREBASE_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

  1. Railway Dashboard → Select service myreppril
  2. Settings tab
  3. Cari "Root Directory" atau "Build" section
  4. Set: railway-worker
  5. 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:

  1. Set jadwal di APK (misalnya 2 menit dari sekarang)
  2. Pastikan /kontrol/waktu = true di Firebase
  3. Tunggu 2 menit
  4. 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:

  1. Push railway-worker ke GitHub
  2. Set root directory di Railway
  3. Verify environment variables
  4. Redeploy & monitor logs