197 lines
5.2 KiB
Markdown
197 lines
5.2 KiB
Markdown
## ✅ STATUS: SETUP COMPLETE & FULLY TESTED!
|
|
|
|
Firebase Realtime Database telah berhasil disetup dan ditest untuk aplikasi IoT Laravel Anda!
|
|
|
|
### Test Results:
|
|
- ✅ Firebase Connection: **SUCCESS**
|
|
- ✅ Sensor Data Save: **SUCCESS** (Local ID: 6, Firebase Key: -OVA6h9GDiDxkrQVcJnW)
|
|
- ✅ Actuator Data Save: **SUCCESS** (Local ID: 5, Firebase Key: -OVA6jljxG2AiHmDSCm1)
|
|
- ✅ Umur Tanaman Data Save: **SUCCESS** (Local ID: 6, Firebase Key: -OVA9-BIlPolcOJVD43p)
|
|
- ✅ Realtime Data Retrieval: **SUCCESS**
|
|
- ✅ API Routes: **WORKING**
|
|
- ✅ Laravel Views Integration: **COMPLETE**
|
|
|
|
### Laravel Pages Updated:
|
|
- ✅ **Sensor Page**: Displays Local Database + Firebase data with tabs
|
|
- ✅ **Actuator Page**: Ready for Local Database + Firebase data with tabs
|
|
- ✅ **Umur Tanaman Page**: Ready for Local Database + Firebase data with tabs
|
|
- ✅ **Report Page**: Combines all data sources with date filtering + CSV export
|
|
|
|
### Data Counts:
|
|
- 📊 Firebase Sensor Records: **1**
|
|
- 📊 Firebase Actuator Records: **1**
|
|
- 📊 Firebase Umur Tanaman Records: **2**
|
|
- 📊 Total Firebase Records: **4**
|
|
|
|
## Struktur yang Telah Dibuat:
|
|
|
|
### 1. **Konfigurasi Firebase**
|
|
- ✅ `config/firebase.php` - Konfigurasi Firebase
|
|
- ✅ `app/Providers/FirebaseServiceProvider.php` - Service Provider
|
|
- ✅ `app/Services/FirebaseService.php` - Service class untuk Firebase operations
|
|
|
|
### 2. **Controller & API**
|
|
- ✅ `app/Http/Controllers/FirebaseController.php` - Controller untuk API Firebase
|
|
- ✅ `routes/api.php` - API routes untuk IoT devices
|
|
|
|
### 3. **Environment Configuration**
|
|
- ✅ Variable Firebase di `.env` file
|
|
|
|
## Cara Setup Firebase Project:
|
|
|
|
### Step 1: Buat Firebase Project
|
|
1. Buka [Firebase Console](https://console.firebase.google.com/)
|
|
2. Klik "Add project" atau "Create a project"
|
|
3. Masukkan nama project (contoh: `iot-hidroponik`)
|
|
4. Ikuti wizard setup
|
|
|
|
### Step 2: Enable Realtime Database
|
|
1. Di Firebase Console, pilih project Anda
|
|
2. Klik "Realtime Database" di sidebar
|
|
3. Klik "Create Database"
|
|
4. Pilih "Start in test mode" (untuk development)
|
|
5. Pilih location (contoh: `asia-southeast1`)
|
|
|
|
### Step 3: Dapatkan Database URL
|
|
1. Di halaman Realtime Database, copy URL database
|
|
2. Format URL: `https://YOUR_PROJECT_ID-default-rtdb.asia-southeast1.firebasedatabase.app/`
|
|
|
|
### Step 4: Buat Service Account
|
|
1. Buka "Project Settings" (gear icon)
|
|
2. Klik tab "Service accounts"
|
|
3. Klik "Generate new private key"
|
|
4. Download file JSON yang dihasilkan
|
|
5. Rename file menjadi `service-account.json`
|
|
6. Pindahkan ke `storage/app/firebase/service-account.json`
|
|
|
|
### Step 5: Update Environment Variables
|
|
Update file `.env` dengan nilai dari Firebase:
|
|
|
|
```env
|
|
FIREBASE_DATABASE_URL=https://YOUR_PROJECT_ID-default-rtdb.asia-southeast1.firebasedatabase.app/
|
|
FIREBASE_PROJECT_ID=your-project-id
|
|
```
|
|
|
|
## API Endpoints yang Tersedia:
|
|
|
|
### Testing & Setup
|
|
- `POST /api/firebase/test-connection` - Test koneksi Firebase
|
|
|
|
### Data Input (untuk IoT devices)
|
|
- `POST /api/iot/sensor` - Kirim data sensor
|
|
```json
|
|
{
|
|
"suhu": 25.5,
|
|
"kelembaban": 65.2
|
|
}
|
|
```
|
|
|
|
- `POST /api/iot/actuator` - Kirim data actuator
|
|
```json
|
|
{
|
|
"nama": "Pompa Air",
|
|
"status": "ON"
|
|
}
|
|
```
|
|
|
|
### Data Retrieval
|
|
- `GET /api/firebase/realtime-data` - Ambil data real-time
|
|
- `POST /api/firebase/sync-from-firebase` - Sync data dari Firebase ke database lokal
|
|
|
|
### Control
|
|
- `POST /api/firebase/update-actuator` - Update status actuator
|
|
```json
|
|
{
|
|
"firebase_key": "firebase-key-here",
|
|
"status": "OFF"
|
|
}
|
|
```
|
|
|
|
## Struktur Data di Firebase:
|
|
|
|
```
|
|
{
|
|
"sensor_data": {
|
|
"push_key_1": {
|
|
"suhu": 25.5,
|
|
"kelembaban": 65.2,
|
|
"timestamp": "2025-07-15T05:36:00.000Z",
|
|
"created_at": 1642234567
|
|
}
|
|
},
|
|
"actuator_data": {
|
|
"push_key_1": {
|
|
"nama": "Pompa Air",
|
|
"status": "ON",
|
|
"timestamp": "2025-07-15T05:36:00.000Z",
|
|
"created_at": 1642234567
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Testing Connection:
|
|
|
|
Setelah setup, test koneksi dengan:
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8000/api/firebase/test-connection
|
|
```
|
|
|
|
## ESP32/Arduino Code Example:
|
|
|
|
```cpp
|
|
#include <WiFi.h>
|
|
#include <HTTPClient.h>
|
|
#include <ArduinoJson.h>
|
|
|
|
const char* ssid = "YOUR_WIFI_SSID";
|
|
const char* password = "YOUR_WIFI_PASSWORD";
|
|
const char* serverURL = "http://your-domain.com/api/iot";
|
|
|
|
void sendSensorData(float suhu, float kelembaban) {
|
|
if(WiFi.status() == WL_CONNECTED) {
|
|
HTTPClient http;
|
|
http.begin(serverURL + String("/sensor"));
|
|
http.addHeader("Content-Type", "application/json");
|
|
|
|
StaticJsonDocument<200> doc;
|
|
doc["suhu"] = suhu;
|
|
doc["kelembaban"] = kelembaban;
|
|
|
|
String jsonString;
|
|
serializeJson(doc, jsonString);
|
|
|
|
int httpResponseCode = http.POST(jsonString);
|
|
|
|
if(httpResponseCode > 0) {
|
|
Serial.println("Data sent successfully");
|
|
}
|
|
|
|
http.end();
|
|
}
|
|
}
|
|
```
|
|
|
|
## Security Notes:
|
|
|
|
1. **Jangan commit service-account.json ke git**
|
|
2. **Set Firebase Rules untuk production:**
|
|
```json
|
|
{
|
|
"rules": {
|
|
".read": "auth != null",
|
|
".write": "auth != null"
|
|
}
|
|
}
|
|
```
|
|
3. **Gunakan authentication untuk production**
|
|
|
|
## Troubleshooting:
|
|
|
|
1. **Connection failed**: Pastikan Database URL benar
|
|
2. **Permission denied**: Check Firebase Rules
|
|
3. **Service account error**: Pastikan file service-account.json valid
|
|
|
|
Firebase Realtime Database siap digunakan! 🚀
|