TKK_E32230814/QUICK_SETUP_KONTROL1.md

186 lines
4.4 KiB
Markdown

# 🚀 Quick Setup Firebase Jadwal ke kontrol_1
## ✅ Yang Sudah Diupdate
1.**Worker.js** - Sekarang pakai path `/kontrol_1`
2.**jadwal_service.dart** - Flutter app pakai path `/kontrol_1`
3.**Setup script** - Script untuk push data otomatis ke Firebase
## 🔥 Cara Setup Data ke Firebase
### Opsi 1: Via Script (Recommended - Otomatis)
Jalankan script untuk langsung push data ke Firebase:
```bash
cd f:\ApsGo\ApsGo\railway-worker
node setup-firebase-jadwal.js
```
Script akan:
- ✅ Connect ke Firebase kamu
- ✅ Push data jadwal ke `/kontrol_1`
- ✅ Setup 5 jadwal (3 aktif, 2 nonaktif)
- ✅ Log summary hasil setup
**Output yang diharapkan:**
```
🚀 Starting Firebase setup...
📍 Path: /kontrol_1
✅ Firebase setup completed successfully!
📊 Summary:
- Path: /kontrol_1
- Mode Waktu: ENABLED
- Total Jadwal: 5
- Jadwal Aktif: 3
📝 Jadwal yang di-setup:
✅ jadwal_1: 08:00 → Pot [1, 2, 3] (60s)
✅ jadwal_2: 09:00 → Pot [4, 5] (45s)
✅ jadwal_3: 16:00 → Pot [1, 2, 3, 4, 5] (30s)
❌ jadwal_4: 12:00 → Pot [2, 4] (40s)
❌ jadwal_5: 18:00 → Pot [1, 5] (50s)
🎉 Done! Data sudah tersimpan di Firebase.
```
### Opsi 2: Manual via Firebase Console
1. Buka [Firebase Console](https://console.firebase.google.com)
2. Pilih project ApsGo
3. Klik **Realtime Database**
4. Klik `+` untuk add new node
5. Name: `kontrol_1`
6. Copy-paste JSON dari `firebase-structure-complete.json`
## 📱 Test Flutter App
Setelah data di-setup, test Flutter app:
```bash
cd f:\ApsGo\ApsGo
flutter pub get
flutter run
```
**Test checklist:**
- [ ] Buka tab **Kontrol**
- [ ] Tap button **Waktu**
- [ ] Lihat list jadwal (harus ada 5 jadwal)
- [ ] Toggle mode waktu on/off
- [ ] Tambah jadwal baru
- [ ] Edit jadwal existing
- [ ] Delete jadwal
## 🔄 Deploy ke Railway
Setelah verify lokal OK, push ke Railway:
```bash
cd railway-worker
git add .
git commit -m "feat: Update to use kontrol_1 path + flexible jadwal system"
git push origin main
```
Railway akan auto-deploy dalam 2-3 menit.
## 📊 Verify di Railway Logs
Setelah deploy, check logs Railway:
```
🚀 Starting ApsGo Railway Worker...
📍 Kontrol Path: /kontrol_1
✅ Firebase /kontrol_1 readable - waktu mode: ENABLED
📋 Total Jadwal: 3
✅ jadwal_1: 08:00 → Pot [1, 2, 3]
✅ jadwal_2: 09:00 → Pot [4, 5]
✅ jadwal_3: 16:00 → Pot [1, 2, 3, 4, 5]
```
## ⚠️ Troubleshooting
### Script error: "Firebase initialization failed"
**Check:**
1. File `.env` ada di folder `railway-worker`?
2. Environment variables lengkap?
```
FIREBASE_PROJECT_ID=...
FIREBASE_CLIENT_EMAIL=...
FIREBASE_PRIVATE_KEY=...
FIREBASE_DATABASE_URL=...
```
### Flutter app: "No jadwal found"
**Check:**
1. Path di `jadwal_service.dart` = `kontrol_1`? ✅ (sudah diupdate)
2. Data sudah di-push ke Firebase?
3. Firebase rules allow read?
### Worker tidak detect jadwal
**Check:**
1. Worker sudah redeploy dengan code terbaru?
2. Path di worker = `kontrol_1`? ✅ (sudah diupdate)
3. Railway logs show path `/kontrol_1`?
## 🔧 Ubah Path Kembali ke /kontrol
Jika mau pakai path `/kontrol` (bukan `/kontrol_1`):
**Worker.js:**
```javascript
const FIREBASE_PATHS = {
kontrol: 'kontrol', // Ubah dari 'kontrol_1' ke 'kontrol'
```
**jadwal_service.dart:**
```dart
static const String kontrolPath = 'kontrol'; // Ubah dari 'kontrol_1'
```
**Setup script:**
```javascript
await db.ref('kontrol').set(kontrolData); // Ubah dari 'kontrol_1'
```
## 📋 Summary Changes
**Files modified:**
-`railway-worker/worker.js` - Added FIREBASE_PATHS constant, updated all refs
-`lib/services/jadwal_service.dart` - Updated path to kontrol_1
-`railway-worker/setup-firebase-jadwal.js` - New script untuk setup
**Data structure:**
```
Firebase Root
├── aktuator/
├── data/
├── history/
├── kontrol/ ← Your existing data (unchanged)
└── kontrol_1/ ← New data with flexible jadwal
├── waktu: true
├── sensor: false
├── jadwal_1/
├── jadwal_2/
└── jadwal_3/
```
## 🎯 Next Steps
1. ✅ Run setup script: `node setup-firebase-jadwal.js`
2. ✅ Verify data di Firebase Console
3. ✅ Test Flutter app locally
4. ✅ Commit & push to Railway
5. ✅ Monitor Railway logs
6. ✅ Test jadwal trigger di waktu yang ditentukan
---
**Ready to go!** 🚀🌱
Jika ada error atau pertanyaan, check logs atau tanya!