TKK_E32230814/DIAGNOSIS_PENJADWALAN.md

211 lines
5.2 KiB
Markdown

# 🔍 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 ✓)
```dart
// 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 ✓)
```javascript
// 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:**
```bash
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:
```json
{
"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:
```javascript
// 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
```bash
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:
- [x] Flutter code (sudah benar menulis ke Firebase)
- [x] Worker code (sudah benar membaca dari Firebase)
- [x] Format data (sudah compatible)
- [x] 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