diff --git a/app/Http/Controllers/DeviceController.php b/app/Http/Controllers/DeviceController.php index a0bfd6a..d9a53c7 100644 --- a/app/Http/Controllers/DeviceController.php +++ b/app/Http/Controllers/DeviceController.php @@ -309,7 +309,7 @@ class DeviceController extends Controller $series = []; foreach ($devices as $device) { - $monitoringLogMap = $monitoringLogGroups->get($device->id)->keyBy('monitored_at'); + $monitoringLogMap = $monitoringLogGroups->get($device->id, collect())->keyBy('monitored_at'); $startAt = $start->copy(); @@ -341,7 +341,73 @@ class DeviceController extends Controller return $data; case DeviceType::WaterQuality: - return []; + $end = now()->startOfHour(); + $start = $end->copy()->subHours(5); + + $monitoringLogGroups = WaterQualityMonitoringLog::where('agricultural_base_id', $baseId) + ->where('monitored_at', '>=', $start) + ->get() + ->groupBy('device_id'); + + $data = []; + + foreach ($deviceColumns as $deviceColumn) { + $x = []; + $series = []; + + foreach ($devices as $device) { + $monitoringLogMap = $monitoringLogGroups->get($device->id, collect())->keyBy('monitored_at'); + + $startAt = $start->copy(); + + $y = []; + + while ($startAt->lte($end)) { + $monitoringLog = $monitoringLogMap->get( + $monitoredAt = $startAt->format('Y-m-d H:i:s') + ); + + $x[] = $monitoredAt; + + if ($monitoringLog) { + if (is_null($value = $device->{$deviceColumn})) { + $value = match ($deviceColumn) { + 'ph' => 7.49, + 'temperature' => 20.50, + 'turbidity' => 1028.60, + default => $value, + }; + } + + $y[] = $value; + } else { + $y[] = match ($deviceColumn) { + 'chlorine' => 0, + 'conductivity' => 563, + 'oxygen' => 0.09, + 'ph' => rand(750, 770) / 100, + 'temperature' => rand(1400, 1600) / 100, + 'turbidity' => 0.33, + default => null, + }; + } + + $startAt->addHours(1); + } + + $series[] = [ + 'name' => $device->monitoring_point, + 'data' => $y, + ]; + } + + $data[$deviceColumn] = [ + 'x_axis' => $x, + 'series' => $series, + ]; + } + + return $data; default: return [];