diff --git a/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php b/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php index 5a63a9b..c006e84 100644 --- a/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php +++ b/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php @@ -639,24 +639,28 @@ class TelemetryController extends Controller public function telemetryDataDevice(Request $request) { try { + Log::info('Telemetry request received', ['request_data' => $request->all()]); + $token = readHeaderToken(); if (!$token) { + Log::warning('Unauthorized access attempt: Missing token'); return response()->json([ 'success' => false, - 'error' => 'Authorization token required' + 'error' => 'Authorization token required' ], 401); } $validator = Validator::make($request->all(), [ 'device_id' => 'required|string', - 'startTs' => 'nullable|string', - 'endTs' => 'nullable|string', + 'startTs' => 'nullable|string', + 'endTs' => 'nullable|string', ]); if ($validator->fails()) { + Log::error('Validation failed', ['errors' => $validator->errors()]); return response()->json([ 'success' => false, - 'error' => $validator->errors()->first() + 'error' => $validator->errors()->first() ], 400); } @@ -665,6 +669,8 @@ class TelemetryController extends Controller $endTs = $request->input('endTs') ?: null; try { + Log::info('Fetching device telemetry', ['device_id' => $deviceId]); + $deviceWithTelemetry = Device::with([ 'deviceProfile', 'timeseriesKeys' => function ($query) { @@ -679,19 +685,16 @@ class TelemetryController extends Controller ->firstOrFail(); $displayKeys = $deviceWithTelemetry->timeseriesKeys->pluck('key_name')->toArray(); + $deviceProfileName = strtolower($deviceWithTelemetry->deviceProfile->name ?? ''); - if (empty($displayKeys)) { - return response()->json([ - 'success' => true, - 'telemetry' => [ - 'device_id' => (string) $deviceWithTelemetry->id, - 'device_name' => $deviceWithTelemetry->name, - 'device_profile_name' => $deviceWithTelemetry->deviceProfile->name, - 'device_profile_id' => (string) $deviceWithTelemetry->device_profile_id, - 'telemetry_data' => [], - ] - ], 200); - } + Log::info('Device profile and keys retrieved', [ + 'device_profile' => $deviceProfileName, + 'display_keys' => $displayKeys + ]); + + // Pressure key condition + $pressureKey = 'Pressure_value'; + $pressureActive = false; $telemetryResponse = $this->customerInfoService->getTelemetryDataDevice( $deviceWithTelemetry, @@ -701,62 +704,99 @@ class TelemetryController extends Controller $token ); - - if (!is_array($telemetryResponse)) { + Log::error('Invalid telemetry data format received'); throw new \Exception("Invalid telemetry data format received from service"); } + // Check if the device has "Gas Engine Profile" or "Engine Profile" in its profile name + if ( + (strpos($deviceProfileName, 'gas engine profile') !== false || strpos($deviceProfileName, 'engine profile') !== false) + && isset($telemetryResponse[$pressureKey]) + && is_array($telemetryResponse[$pressureKey]) + ) { + foreach ($telemetryResponse[$pressureKey] as $pressureData) { + if (!empty($pressureData['value']) && floatval($pressureData['value']) > 0) { + $pressureActive = true; + break; + } + } + } + + Log::info('Telemetry data processed', [ + 'pressure_value' => $pressureActive, + 'telemetry_keys' => array_keys($telemetryResponse) + ]); + + // Filter telemetry data based on display keys $filteredResponse = array_intersect_key($telemetryResponse, array_flip($displayKeys)); + // Add Pressure key if condition is met + if (isset($telemetryResponse[$pressureKey])) { + $filteredResponse[$pressureKey] = $telemetryResponse[$pressureKey]; + } + $telemetry = collect($filteredResponse) ->flatMap(function ($items, $keyName) use ($deviceWithTelemetry) { $keyData = $deviceWithTelemetry->timeseriesKeys->firstWhere('key_name', $keyName); return collect($items)->map(function ($item) use ($keyName, $keyData) { return [ - 'key_name' => $keyName, - 'timestamp' => $item['ts'] ?? null, - 'value' => $item['value'] ?? null, - 'display_name' => $keyData->display_name ?? $keyName, - 'display_on_dashboard' => $keyData->display_on_dashboard ?? false, - 'display_on_popup' => $keyData->display_on_popup ?? false + 'key_name' => $keyName, + 'timestamp' => $item['ts'] ?? null, + 'value' => $item['value'] ?? null, + 'display_name' => $keyData->display_name ?? $keyName, + 'display_on_dashboard' => $keyData->display_on_dashboard ?? false, + 'display_on_popup' => $keyData->display_on_popup ?? false ]; }); }) ->values() ->all(); + Log::info('Telemetry response successfully generated', ['device_id' => $deviceId]); + return response()->json([ 'success' => true, 'telemetry' => [ - 'device_id' => (string) $deviceWithTelemetry->id, - 'device_name' => $deviceWithTelemetry->name, - 'device_profile_name' => $deviceWithTelemetry->deviceProfile->name, - 'device_profile_id' => (string) $deviceWithTelemetry->device_profile_id, - 'telemetry_data' => $telemetry, + 'device_id' => (string) $deviceWithTelemetry->id, + 'device_name' => $deviceWithTelemetry->name, + 'device_profile_name' => $deviceWithTelemetry->deviceProfile->name, + 'device_profile_id' => (string) $deviceWithTelemetry->device_profile_id, + 'pressure_value' => $pressureActive, // Updated response + 'telemetry_data' => $telemetry, ] ], 200); } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) { + Log::error('Device not found', ['device_id' => $deviceId]); return response()->json([ 'success' => false, - 'error' => 'Device not found' + 'error' => 'Device not found' ], 404); } catch (\Exception $e) { + Log::error('Failed to fetch telemetry data', [ + 'device_id' => $deviceId, + 'error' => $e->getMessage() + ]); return response()->json([ 'success' => false, - 'error' => 'Failed to fetch telemetry data', + 'error' => 'Failed to fetch telemetry data', 'details' => config('app.debug') ? $e->getMessage() : null ], 503); } } catch (\Exception $e) { + Log::critical('Internal server error', ['error' => $e->getMessage()]); return response()->json([ 'success' => false, - 'error' => 'Internal server error', + 'error' => 'Internal server error', 'details' => config('app.debug') ? $e->getMessage() : null ], 500); } } + + + + // public function telemetryDataDeviceDiagnostic(Request $request, $deviceId) // { // $devices = Device::with('deviceProfile')