TIF_NGANJUK_E41211253/app/Http/Controllers/ChartController.php

95 lines
3.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\SensorData;
use Illuminate\Http\Request;
use Carbon\Carbon;
class ChartController extends Controller
{
public function getDistanceData(Request $request)
{
$filter = $request->get('filter');
$query = SensorData::query();
$timestamps = [];
$dataAtas = [];
$dataBawah = [];
switch ($filter) {
case 'second':
// Data per detik dalam 1 jam terakhir
$now = Carbon::now();
$oneHourAgo = Carbon::now()->subHour();
// Mengambil data untuk kedua perangkat
$sensorData = $query->whereBetween('created_at', [$oneHourAgo, $now])
->orderBy('created_at', 'asc')
->get();
foreach ($sensorData as $data) {
// Menyimpan timestamp dalam format H:i:s
$timestamps[] = $data->created_at->format('H:i:s');
if ($data->device_name === 'klampisan_atas') {
$dataAtas[] = round($data->distance, 2); // Pembulatan data
} elseif ($data->device_name === 'klampisan_bawah') {
$dataBawah[] = round($data->distance, 2); // Pembulatan data
}
}
break;
case 'hour':
// Data per jam dalam 24 jam terakhir
$today = Carbon::today();
$sensorData = $query->where('created_at', '>=', $today)
->selectRaw('HOUR(created_at) as hour, AVG(distance) as avg_distance, device_name')
->groupByRaw('HOUR(created_at), device_name') // Grup berdasarkan jam dan device_name
->orderBy('hour', 'asc')
->get();
foreach ($sensorData as $data) {
$timestamps[] = $data->hour . ":00"; // Format jam
if ($data->device_name === 'klampisan_atas') {
$dataAtas[$data->hour] = round($data->avg_distance, 2); // Rata-rata jarak
} elseif ($data->device_name === 'klampisan_bawah') {
$dataBawah[$data->hour] = round($data->avg_distance, 2); // Rata-rata jarak
}
}
// Memastikan semua jam dari 0 hingga 23 ada di timestamp
for ($i = 0; $i < 24; $i++) {
$timestamps[$i] = str_pad($i, 2, '0', STR_PAD_LEFT) . ":00"; // Menambahkan jam
$dataAtas[$i] = $dataAtas[$i] ?? 0; // Default 0 jika tidak ada data
$dataBawah[$i] = $dataBawah[$i] ?? 0; // Default 0 jika tidak ada data
}
break;
case 'today':
default:
// Data sepanjang hari ini per menit
$today = Carbon::today();
$sensorData = $query->whereDate('created_at', $today)
->orderBy('created_at', 'asc')
->get();
foreach ($sensorData as $data) {
// Menyimpan timestamp dalam format H:i
$timestamps[] = $data->created_at->format('H:i');
if ($data->device_name === 'klampisan_atas') {
$dataAtas[] = round($data->distance, 2); // Pembulatan data
} elseif ($data->device_name === 'klampisan_bawah') {
$dataBawah[] = round($data->distance, 2); // Pembulatan data
}
}
break;
}
return response()->json([
'timestamps' => $timestamps,
'atas' => $dataAtas,
'bawah' => $dataBawah,
]);
}
}