95 lines
3.9 KiB
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,
|
|
]);
|
|
}
|
|
}
|