customerInfoService = $customerInfoService; } public function telemetryDataAsset(Request $request) { $validator = Validator::make($request->all(), [ 'asset_id' => 'required|string', ]); if ($validator->fails()) { return jsonResponseWithErrorMessage($validator->errors()->first(), 400); } $assetId = $request->input('asset_id'); $devices = Device::with('deviceProfile') ->where('asset_id', $assetId) ->get(); if ($devices->isEmpty()) { return response()->json(['error' => 'No devices found for the asset'], 404); } $startTs = now()->subHours(1)->timestamp * 1000; $endTs = now()->timestamp * 1000; $response = []; foreach ($devices as $device) { $telemetry = []; // ✅ Fetch key names along with additional columns from timeseries_key_master $keysData = TimeseriesKeyMaster::where('device_profile_xid', $device->device_profile_id) ->where(function ($query) { $query->where('display_on_dashboard', true) ->orWhere('display_on_popup', true); }) ->get(['key_name', 'display_name', 'display_on_dashboard', 'display_on_popup']); $keyNames = $keysData->pluck('key_name')->toArray(); $telemetryResponse = $this->customerInfoService->getTelemetryData($device, $keyNames, $startTs, $endTs); foreach ($keysData as $keyData) { $keyName = $keyData->key_name; if (isset($telemetryResponse[$keyName])) { foreach ($telemetryResponse[$keyName] as $item) { $telemetry[] = [ 'key_name' => $keyName, 'display_name' => $keyData->display_name, 'display_on_dashboard' => $keyData->display_on_dashboard, 'display_on_popup' => $keyData->display_on_popup, 'timestamp' => $item['ts'] ?? null, 'value' => $item['value'] ?? null ]; } } } if (!empty($telemetry)) { $response[] = [ 'device_id' => (string) $device->id, 'device_profile_name' => (string) $device->deviceProfile->name, 'asset_id' => (string) $device->asset_id, 'device_profile_id' => (string) $device->device_profile_id, 'telemetry' => $telemetry, ]; } } return response()->json(['telemetry' => $response]); } }