customerInfoService = $customerInfoService; } public function telemetryData($assetId) { $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 = []; $keyNames = TimeseriesKeyMaster::where('device_profile_xid', $device->device_profile_id) ->pluck('key_name') ->toArray(); $telemetryResponse = $this->customerInfoService->getTelemetryData($device, $keyNames, $startTs, $endTs); foreach ($keyNames as $keyName) { if (isset($telemetryResponse[$keyName])) { foreach ($telemetryResponse[$keyName] as $item) { $telemetry[] = [ 'key_name' => $keyName, '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]); } public function telemetryDataDevice($deviceId) { $devices = Device::with('deviceProfile') ->where('id', $deviceId) ->get(); if ($devices->isEmpty()) { return response()->json(['error' => 'No devices found'], 404); } $startTs = now()->subHours(1)->timestamp * 1000; $endTs = now()->timestamp * 1000; $response = []; foreach ($devices as $device) { $telemetry = []; $keyNames = TimeseriesKeyMaster::where('device_profile_xid', $device->device_profile_id) ->pluck('key_name','display_name') ->toArray(); // ✅ Fetch telemetry data $telemetryResponse = $this->customerInfoService->getTelemetryDataDevice($device, $keyNames, $startTs, $endTs); foreach ($keyNames as $keyName) { if (isset($telemetryResponse[$keyName])) { foreach ($telemetryResponse[$keyName] as $item) { $telemetry[] = [ 'key_name' => $keyName, 'timestamp' => $item['ts'] ?? null, 'value' => $item['value'] ?? null, 'display_name' => $keyName, ]; } } } if (!empty($telemetry)) { $response[] = [ 'device_id' => (string) $device->id, 'device_name' => $device->name, 'device_profile_name' => (string) $device->deviceProfile->name, 'device_profile_id' => (string) $device->device_profile_id, 'telemetry' => $telemetry, ]; } } return response()->json(['telemetry' => $response]); } public function telemetryDataDeviceDiagnostic(Request $request, $deviceId) { $devices = Device::with('deviceProfile') ->where('id', $deviceId) ->get(); if ($devices->isEmpty()) { return response()->json(['error' => 'No devices found'], 404); } $startTs = $request->has('start_date') ? strtotime($request->start_date) * 1000 : null; $endTs = $request->has('end_date') ? strtotime($request->end_date) * 1000 : null; $response = []; foreach ($devices as $device) { $telemetry = []; $keyNames = TimeseriesKeyMaster::where('device_profile_xid', $device->device_profile_id) ->pluck('key_name', 'display_name') ->toArray(); $telemetryResponse = $this->customerInfoService->getTelemetryDataDeviceDiagonostic($device, $keyNames, $startTs, $endTs); foreach ($keyNames as $keyName) { if (isset($telemetryResponse[$keyName])) { foreach ($telemetryResponse[$keyName] as $item) { $timestamp = $item['ts'] ?? null; // ✅ Filter telemetry by timestamp range if ($timestamp && $timestamp >= $startTs && $timestamp <= $endTs) { $telemetry[] = [ 'key_name' => $keyName, 'timestamp' => $timestamp, 'start_date' => $startTs, 'end_date' => $endTs, 'value' => $item['value'] ?? null, 'display_name' => $keyName, ]; } } } } if (!empty($telemetry)) { $response[] = [ 'device_id' => (string) $device->id, 'device_name' => $device->name, 'device_profile_name' => (string) $device->deviceProfile->name, 'device_profile_id' => (string) $device->device_profile_id, 'telemetry' => $telemetry, ]; } } return response()->json(['telemetry' => $response]); } // public function telemetryDataDeviceDiagnostic(Request $request, $deviceId) // { // // Fetch devices // $devices = Device::with('deviceProfile') // ->where('id', $deviceId) // ->get(); // if ($devices->isEmpty()) { // return response()->json(['error' => 'No devices found'], 404); // } // // Get start and end timestamps from request parameters // $startTs = $request->has('start_date') ? strtotime($request->start_date) * 1000 : null; // $endTs = $request->has('end_date') ? strtotime($request->end_date) * 1000 : null; // if (!$startTs || !$endTs) { // return response()->json(['error' => 'Start date and end date are required'], 400); // } // $response = []; // foreach ($devices as $device) { // $telemetry = []; // $keyNames = TimeseriesKeyMaster::where('device_profile_xid', $device->device_profile_id) // ->pluck('key_name', 'display_name') // ->toArray(); // $telemetryResponse = $this->customerInfoService->getTelemetryDataDeviceDiagonostic($device, $keyNames, $startTs, $endTs); // foreach ($keyNames as $displayName => $keyName) { // if (isset($telemetryResponse[$keyName])) { // foreach ($telemetryResponse[$keyName] as $item) { // $itemTs = $item['timestamp'] ?? null; // // ✅ Filter only telemetry within the date range // if ($itemTs >= $startTs && $itemTs <= $endTs) { // $telemetry[] = [ // 'key_name' => $keyName, // 'value' => $item['value'] ?? null, // 'display_name' => $displayName, // 'timestamp' => $itemTs, // 'start_date' => $startTs, // 'end_date' => $endTs // ]; // } // } // } // } // if (!empty($telemetry)) { // $response[] = [ // 'device_id' => (string) $device->id, // 'device_name' => $device->name, // 'device_profile_name' => (string) $device->deviceProfile->name, // 'device_profile_id' => (string) $device->device_profile_id, // 'telemetry' => $telemetry, // ]; // } // } // return response()->json(['telemetry' => $response]); // } }