sayali #34
@@ -103,7 +103,6 @@ class CustomerDeviceInfoController extends Controller
|
||||
], 200);
|
||||
}
|
||||
|
||||
// ✅ Aggregate ThingsBoard Data
|
||||
foreach ($customer->users as $user) {
|
||||
foreach ($user->assets as $asset) {
|
||||
$tbGood = 0;
|
||||
|
||||
@@ -25,7 +25,6 @@ class TelemetryController extends Controller
|
||||
|
||||
public function telemetryData($assetId)
|
||||
{
|
||||
// ✅ Fetch devices with profiles
|
||||
$devices = Device::with('deviceProfile')
|
||||
->where('asset_id', $assetId)
|
||||
->get();
|
||||
@@ -42,12 +41,10 @@ class TelemetryController extends Controller
|
||||
foreach ($devices as $device) {
|
||||
$telemetry = [];
|
||||
|
||||
// ✅ Fetch key names from timeseries_key_master associated with the device profile
|
||||
$keyNames = TimeseriesKeyMaster::where('device_profile_xid', $device->device_profile_id)
|
||||
->pluck('key_name')
|
||||
->toArray();
|
||||
|
||||
// ✅ Fetch telemetry data
|
||||
$telemetryResponse = $this->customerInfoService->getTelemetryData($device, $keyNames, $startTs, $endTs);
|
||||
|
||||
|
||||
@@ -99,9 +96,8 @@ class TelemetryController extends Controller
|
||||
foreach ($devices as $device) {
|
||||
$telemetry = [];
|
||||
|
||||
// ✅ Fetch key names from timeseries_key_master associated with the device profile
|
||||
$keyNames = TimeseriesKeyMaster::where('device_profile_xid', $device->device_profile_id)
|
||||
->pluck('key_name')
|
||||
->pluck('key_name','display_name')
|
||||
->toArray();
|
||||
|
||||
// ✅ Fetch telemetry data
|
||||
@@ -114,7 +110,8 @@ class TelemetryController extends Controller
|
||||
$telemetry[] = [
|
||||
'key_name' => $keyName,
|
||||
'timestamp' => $item['ts'] ?? null,
|
||||
'value' => $item['value'] ?? null
|
||||
'value' => $item['value'] ?? null,
|
||||
'display_name' => $keyName,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -123,6 +120,7 @@ class TelemetryController extends Controller
|
||||
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,
|
||||
@@ -133,7 +131,126 @@ class TelemetryController extends Controller
|
||||
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]);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use App\Services\AdminService;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Request;
|
||||
|
||||
class CustomerInfoService
|
||||
{
|
||||
@@ -45,171 +46,6 @@ class CustomerInfoService
|
||||
}
|
||||
}
|
||||
|
||||
// public function getTelemetryData($devices, $startTs, $endTs, $limit = 100)
|
||||
// {
|
||||
// try {
|
||||
// // Get ThingsBoard token from AdminService
|
||||
// $token = $this->adminService->getToken();
|
||||
|
||||
// if (!$token) {
|
||||
// Log::error("Failed to authenticate with ThingsBoard.");
|
||||
// return ['error' => 'Authentication failed'];
|
||||
// }
|
||||
|
||||
// $baseUrl = env('THINGSBOARD_URL', 'http://65.0.131.117:8080');
|
||||
// $telemetryData = [];
|
||||
|
||||
// foreach ($devices as $device) {
|
||||
// $deviceToken = $device->token;
|
||||
|
||||
// // Include asset_id, device_profile_id, and device name
|
||||
// $assetId = $device->asset_id;
|
||||
// $deviceProfileId = $device->device_profile_id;
|
||||
// $deviceName = $device->name;
|
||||
|
||||
// if (!$deviceToken) {
|
||||
// Log::warning("Device token missing for device: {$deviceName} (ID: {$device->id})");
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// $keys = $device->timeseriesKeys->pluck('key_name')->implode(',');
|
||||
|
||||
// if (empty($keys)) {
|
||||
// Log::warning("No telemetry keys found for device: {$deviceName} (Token: {$deviceToken})");
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// // Make the telemetry API call
|
||||
// $response = Http::withHeaders([
|
||||
// 'X-Authorization' => "Bearer $token",
|
||||
// 'Accept' => 'application/json',
|
||||
// ])->get("{$baseUrl}/api/plugins/telemetry/DEVICE/{$deviceToken}/values/timeseries", [
|
||||
// 'keys' => $keys,
|
||||
// 'startTs' => $startTs,
|
||||
// 'endTs' => $endTs,
|
||||
// 'limit' => $limit,
|
||||
// 'useStrictDataTypes' => 'false',
|
||||
// ]);
|
||||
|
||||
// if (!$response->successful()) {
|
||||
// Log::error("Failed to fetch telemetry for device: {$deviceName} (Token: {$deviceToken})");
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// $data = $response->json();
|
||||
|
||||
// // Format telemetry data with asset_id, device_profile_id, and name as key
|
||||
// $formattedTelemetry = [];
|
||||
|
||||
// if (!empty($data)) {
|
||||
// foreach ($data as $key => $values) {
|
||||
// foreach ($values as $item) {
|
||||
// $formattedTelemetry[] = [
|
||||
// 'key' => $key,
|
||||
// 'value' => $item['value'],
|
||||
// 'ts' => $item['ts']
|
||||
// ];
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// $telemetryData[] = [
|
||||
// 'asset_id' => $assetId,
|
||||
// 'device_profile_id' => $deviceProfileId,
|
||||
// 'name' => $deviceName,
|
||||
// 'telemetry' => $formattedTelemetry,
|
||||
// ];
|
||||
// }
|
||||
|
||||
// return $telemetryData;
|
||||
|
||||
// } catch (\Exception $e) {
|
||||
// Log::error("Error fetching telemetry data: " . $e->getMessage());
|
||||
// return ['error' => 'Failed to fetch telemetry data'];
|
||||
// }
|
||||
// }
|
||||
|
||||
// public function getTelemetryData($devices, $startTs, $endTs)
|
||||
// {
|
||||
// $token = $this->adminService->getToken();
|
||||
|
||||
// if (!$token) {
|
||||
// Log::error('Failed to fetch ThingsBoard token');
|
||||
// return ['error' => 'Failed to fetch ThingsBoard token'];
|
||||
// }
|
||||
|
||||
// $baseUrl = env('THINGSBOARD_URL');
|
||||
|
||||
// $headers = [
|
||||
// 'Authorization: Bearer ' . $token,
|
||||
// 'accept: application/json'
|
||||
// ];
|
||||
|
||||
// $allTelemetry = [];
|
||||
|
||||
// foreach ($devices as $device) {
|
||||
// $deviceId = $device->id;
|
||||
// $keys = $device->timeseriesKeys->pluck('key_name')->filter()->implode(',');
|
||||
|
||||
// if (empty($keys)) {
|
||||
// Log::warning("No telemetry keys found for device: {$device->name}");
|
||||
// $allTelemetry[$deviceId] = [
|
||||
// 'status' => 'error',
|
||||
// 'message' => 'No telemetry keys found'
|
||||
// ];
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// $url = "$baseUrl/api/plugins/telemetry/DEVICE/{$deviceId}/values/timeseries"
|
||||
// . "?keys={$keys}&startTs={$startTs}&endTs={$endTs}&limit=100";
|
||||
|
||||
// $ch = curl_init($url);
|
||||
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
// curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
|
||||
// $response = curl_exec($ch);
|
||||
// $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
// $error = curl_error($ch);
|
||||
// curl_close($ch);
|
||||
|
||||
// if ($error || $httpCode !== 200) {
|
||||
// Log::error("Failed to fetch telemetry for device: {$device->name} (ID: {$deviceId})", [
|
||||
// 'http_code' => $httpCode,
|
||||
// 'error' => $error,
|
||||
// 'url' => $url,
|
||||
// 'response' => $response
|
||||
// ]);
|
||||
|
||||
// $allTelemetry[$deviceId] = [
|
||||
// 'status' => 'error',
|
||||
// 'message' => "Failed to fetch telemetry. HTTP Code: $httpCode, Error: $error"
|
||||
// ];
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// $telemetry = json_decode($response, true);
|
||||
|
||||
// if (json_last_error() !== JSON_ERROR_NONE) {
|
||||
// Log::error("Failed to decode telemetry response for device: {$device->name}", [
|
||||
// 'response' => $response
|
||||
// ]);
|
||||
|
||||
// $allTelemetry[$deviceId] = [
|
||||
// 'status' => 'error',
|
||||
// 'message' => 'Invalid telemetry response format'
|
||||
// ];
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// $allTelemetry[$deviceId] = [
|
||||
// 'status' => 'success',
|
||||
// 'telemetry' => $telemetry
|
||||
// ];
|
||||
// }
|
||||
|
||||
// return $allTelemetry; // Return telemetry data mapped by device_id
|
||||
// }
|
||||
|
||||
|
||||
|
||||
public function getTelemetryData($device, $keyNames, $startTs, $endTs)
|
||||
@@ -231,8 +67,8 @@ class CustomerInfoService
|
||||
$response = Http::withHeaders([
|
||||
'Authorization' => "Bearer $token",
|
||||
'Accept' => 'application/json'
|
||||
])->get("$baseUrl/api/plugins/telemetry/DEVICE/58bf81a0-0619-11f0-a9dc-45dd276e4cd5/values/timeseries", [
|
||||
// ])->get("$baseUrl/api/plugins/telemetry/DEVICE/{$deviceId}/values/timeseries", [
|
||||
// ])->get("$baseUrl/api/plugins/telemetry/DEVICE/58bf81a0-0619-11f0-a9dc-45dd276e4cd5/values/timeseries", [
|
||||
])->get("$baseUrl/api/plugins/telemetry/DEVICE/{$deviceId}/values/timeseries", [
|
||||
|
||||
'keys' => $keys,
|
||||
// 'keys' => 'MechanicalHealth_valueInPercent',
|
||||
@@ -290,8 +126,65 @@ class CustomerInfoService
|
||||
$response = Http::withHeaders([
|
||||
'Authorization' => "Bearer $token",
|
||||
'Accept' => 'application/json'
|
||||
])->get("$baseUrl/api/plugins/telemetry/DEVICE/58bf81a0-0619-11f0-a9dc-45dd276e4cd5/values/timeseries", [
|
||||
// ])->get("$baseUrl/api/plugins/telemetry/DEVICE/{$deviceId}/values/timeseries", [
|
||||
// ])->get("$baseUrl/api/plugins/telemetry/DEVICE/58bf81a0-0619-11f0-a9dc-45dd276e4cd5/values/timeseries", [
|
||||
])->get("$baseUrl/api/plugins/telemetry/DEVICE/{$deviceId}/values/timeseries", [
|
||||
|
||||
'keys' => $keys,
|
||||
'startTs' => $startTs,
|
||||
'interval' => $endTs,
|
||||
'limit' => 100,
|
||||
'useStrictDataTypes' => false
|
||||
]);
|
||||
|
||||
|
||||
|
||||
// Check if the response was successful
|
||||
if (!$response->successful()) {
|
||||
Log::error("Failed to fetch telemetry for device: {$device->name} (ID: {$deviceId})", [
|
||||
'http_code' => $response->status(),
|
||||
'url' => $response->effectiveUri(),
|
||||
'response' => $response->body()
|
||||
]);
|
||||
|
||||
return ['error' => "Failed to fetch telemetry. HTTP Code: " . $response->status()];
|
||||
}
|
||||
|
||||
// Decode the telemetry response
|
||||
$telemetry = $response->json();
|
||||
|
||||
if (json_last_error() !== JSON_ERROR_NONE) {
|
||||
Log::error("Failed to decode telemetry response for device: {$device->name}", [
|
||||
'response' => $response->body()
|
||||
]);
|
||||
|
||||
return ['error' => 'Invalid telemetry response format'];
|
||||
}
|
||||
|
||||
return $telemetry;
|
||||
}
|
||||
|
||||
public function getTelemetryDataDeviceDiagonostic($device, $keyNames, $startTs, $endTs)
|
||||
{
|
||||
|
||||
$token = $this->adminService->getToken();
|
||||
|
||||
if (!$token) {
|
||||
Log::error('Failed to fetch ThingsBoard token');
|
||||
return ['error' => 'Failed to fetch ThingsBoard token'];
|
||||
}
|
||||
|
||||
$baseUrl = env('THINGSBOARD_URL');
|
||||
$deviceId = $device->id;
|
||||
|
||||
$keys = implode(',', $keyNames);
|
||||
|
||||
|
||||
|
||||
$response = Http::withHeaders([
|
||||
'Authorization' => "Bearer $token",
|
||||
'Accept' => 'application/json'
|
||||
// ])->get("$baseUrl/api/plugins/telemetry/DEVICE/58bf81a0-0619-11f0-a9dc-45dd276e4cd5/values/timeseries", [
|
||||
])->get("$baseUrl/api/plugins/telemetry/DEVICE/{$deviceId}/values/timeseries", [
|
||||
|
||||
'keys' => $keys,
|
||||
// 'keys' => 'MechanicalHealth_valueInPercent',
|
||||
@@ -330,6 +223,4 @@ class CustomerInfoService
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,9 @@ Route::post('user-login', [AuthController::class, 'login']);
|
||||
Route::get('/customer-device-info/{customerId}',[CustomerDeviceInfoController::class,'customerDeviceInfo']);
|
||||
Route::get('/telemetry-data/{assetId}',[TelemetryController::class,'telemetryData']);
|
||||
Route::get('/telemetry-data-device/{deviceId}',[TelemetryController::class,'telemetryDataDevice']);
|
||||
Route::post('/telemetry-data-device-diagnostic/{deviceId}',[TelemetryController::class,'telemetryDataDeviceDiagnostic']);
|
||||
|
||||
|
||||
|
||||
// Route::post('/user-login', [AuthController::class, 'login']);
|
||||
Route::middleware(['customerApiBasicAuth'])->group(function () {
|
||||
|
||||
Reference in New Issue
Block a user