Files
backend_vib360_laravel/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php

91 lines
3.1 KiB
PHP
Raw Normal View History

2025-03-24 13:31:06 +05:30
<?php
namespace App\Http\Controllers\APIS\CustomerApi;
use App\Http\Controllers\Controller;
use App\Models\Asset;
use App\Models\Device;
2025-03-25 11:34:55 +05:30
use App\Models\TimeseriesKeyMaster;
2025-03-24 13:31:06 +05:30
use App\Services\CustomerInfoService;
2025-03-25 11:34:55 +05:30
use Illuminate\Container\Attributes\DB;
2025-03-24 13:31:06 +05:30
use Illuminate\Http\Request;
2025-03-25 11:34:55 +05:30
use Illuminate\Support\Facades\DB as FacadesDB;
2025-03-24 13:31:06 +05:30
use Illuminate\Support\Facades\Http;
class TelemetryController extends Controller
{
protected $customerInfoService;
public function __construct(CustomerInfoService $customerInfoService)
{
$this->customerInfoService = $customerInfoService;
}
2025-03-25 11:34:55 +05:30
2025-03-24 13:31:06 +05:30
public function telemetryData($assetId)
{
2025-03-25 11:34:55 +05:30
// ✅ Fetch devices with profiles
$devices = Device::with('deviceProfile')
2025-03-24 13:31:06 +05:30
->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;
2025-03-25 11:34:55 +05:30
$response = [];
2025-03-24 13:31:06 +05:30
foreach ($devices as $device) {
2025-03-25 11:34:55 +05:30
$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();
2025-03-25 11:34:55 +05:30
// ✅ Fetch telemetry data
$telemetryResponse = $this->customerInfoService->getTelemetryData($device, $keyNames, $startTs, $endTs);
foreach ($keysData as $keyData) {
$keyName = $keyData->key_name;
2025-03-24 13:31:06 +05:30
2025-03-25 11:34:55 +05:30
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
2025-03-25 11:34:55 +05:30
];
}
}
}
2025-03-24 13:31:06 +05:30
2025-03-25 11:34:55 +05:30
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,
];
}
2025-03-24 13:31:06 +05:30
}
2025-03-25 11:34:55 +05:30
return response()->json(['telemetry' => $response]);
2025-03-24 13:31:06 +05:30
}
}