TKK_E32222628/hydrop_web/FIREBASE_SETUP.md

5.2 KiB

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
  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:

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

    {
      "suhu": 25.5,
      "kelembaban": 65.2
    }
    
  • POST /api/iot/actuator - Kirim data actuator

    {
      "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
    {
      "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:

curl -X POST http://localhost:8000/api/firebase/test-connection

ESP32/Arduino Code Example:

#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:
    {
      "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! 🚀