device_name ? [$req->device_name] : getDevices(); $data = []; foreach ($deviceNames as $deviceName) { $builder = SensorData::select( DB::raw('AVG(pressure) as pressure'), DB::raw('AVG(distance) as distance') ); // Tambahkan kolom waktu berdasarkan filter if ($req->by == 'date') { $builder = $builder->addSelect(DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d") as waktu')); } else if ($req->by == 'month') { $builder = $builder->addSelect(DB::raw('DATE_FORMAT(created_at, "%Y-%m") as waktu')); } else if ($req->by == 'year') { $builder = $builder->addSelect(DB::raw('DATE_FORMAT(created_at, "%Y") as waktu')); } else { $builder = $builder->addSelect(DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d %H:00") as waktu')); } // Filter dan grup data berdasarkan waktu $data[$deviceName] = $builder ->where('device_name', 'like', "%$deviceName%") ->groupByRaw('waktu') ->get(); } return [ 'message' => 'Data has been fetched', 'data' => $data, ]; } public function coba($deviceName, Request $request) { if ($deviceName === 'klampisan') { $deviceNames = ['klampisan_atas', 'klampisan_bawah']; } else { $deviceNames = [$deviceName]; } $start_date = $request->get('start_date'); $end_date = $request->get('end_date'); $sensors = collect(); $grouped = collect(); if ($start_date && $end_date) { $request->validate([ 'start_date' => 'required|date', 'end_date' => 'required|date', ]); $start_date = date('Y-m-d H:i:s', strtotime($start_date)); $end_date = date('Y-m-d H:i:s', strtotime($end_date)); $sensors = DB::table('sensor_data') ->selectRaw('device_name, DATE_FORMAT(created_at, "%Y-%m-%d %H:00:00") as interval_time, MAX(distance) as max_distance') ->whereIn('device_name', $deviceNames) ->whereBetween('created_at', [$start_date, $end_date]) ->groupBy('device_name', 'interval_time') ->orderBy('interval_time') ->get(); $grouped = $sensors->groupBy('device_name'); } return view('admin.pages.dataprint', [ 'deviceName' => $deviceName, 'sensors' => $sensors, 'groupedSensors' => $grouped, 'start_date' => $start_date, 'end_date' => $end_date, ]); } public function data($deviceName, Request $request) { $start_date = $request->get('start_date'); $end_date = $request->get('end_date'); $sensors = collect(); if ($start_date && $end_date) { $request->validate([ 'start_date' => 'required|date', 'end_date' => 'required|date', ]); $sensors = DB::table('sensor_data as s1') ->joinSub( DB::table('sensor_data') ->selectRaw('MAX(created_at) as max_time, DATE_FORMAT(created_at, "%Y-%m-%d %H:30:00") as interval_time, MAX(distance) as last_distance') ->where('device_name', $deviceName) ->whereBetween('created_at', [$start_date, $end_date]) ->groupBy('interval_time'), 's2', 's1.created_at', '=', 's2.max_time' ) ->select('s2.interval_time', 's2.last_distance') ->get(); } return view('admin.pages.dataprint', compact('deviceName', 'sensors', 'start_date', 'end_date')); } public function export(Request $request) { // Mengambil parameter yang dikirimkan dari form ekspor $start_date = $request->get('start_date'); $end_date = $request->get('end_date'); $device_name = $request->get('device_name'); // Ambil data sensor yang sudah difilter berdasarkan rentang tanggal dan device_name $sensors = DB::table('sensor_data as s1') ->joinSub( DB::table('sensor_data') ->selectRaw('MAX(created_at) as max_time, DATE_FORMAT(created_at, "%Y-%m-%d %H:30:00") as interval_time, MAX(distance) as last_distance') ->where('device_name', $device_name) ->whereBetween('created_at', [$start_date, $end_date]) ->groupBy('interval_time'), 's2', 's1.created_at', '=', 's2.max_time' ) ->select('s2.interval_time', 's2.last_distance') ->get(); // Kirim data ke export return Excel::download(new DataExport($sensors), 'sensor_data_' . $device_name . '.xlsx'); }}