lampuotomatis/app/Http/Controllers/DeviceController.php

71 lines
2.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Lamp;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class DeviceController extends Controller
{
public function control(Request $request)
{
$action = $request->input('action');
if ($action === 'on') {
// Contoh: nyalakan perangkat
DB::table('lamp_status')->update(['status' => 'ON', 'updated_at' => Carbon::now()]);
DB::table('control_logs')->insert(['action' => 'ON', 'triggered_by' => 'web', 'created_at' => Carbon::now(), 'updated_at' => Carbon::now()]);
} elseif ($action === 'off') {
DB::table('lamp_status')->update(['status' => 'OFF', 'updated_at' => Carbon::now()]);
DB::table('control_logs')->insert(['action' => 'OFF', 'triggered_by' => 'web', 'created_at' => Carbon::now(), 'updated_at' => Carbon::now()]);
} elseif ($action === 'auto') {
DB::table('lamp_status')->update(['status' => 'AUTO', 'updated_at' => Carbon::now()]);
}
return back()->with('status', "Perintah '$action' berhasil dikirim.");
}
public function getStatus()
{
$device = DB::table('lamp_status')->first();
if ($device) {
return response($device->status, 200);
} else {
return response('off', 404); // default jika device tidak ditemukan
}
}
public function storeSensorData(Request $request)
{
try {
DB::table('sensors')->insert([
'ldr_value' => $request->input('ldr_value'),
'motion_detected' => $request->input('motion_value'),
'sound_value' => $request->input('sound_value'),
'created_at' => now(),
]);
return response()->json(['message' => 'Data diterima']);
} catch (\Exception $e) {
Log::error('Gagal menyimpan sensor:', ['error' => $e->getMessage()]);
return response()->json(['error' => $e->getMessage()], 500);
}
}
public function storeLamp(Request $request)
{
$validated = $request->validate([
'mode' => 'required|string', // AUTO / MANUAL
'state' => 'required|boolean', // 1 = ON, 0 = OFF
]);
return response()->json(['message' => 'Lamp status saved']);
}
}