Browse Source

BACnet api test

peterguo 3 months ago
parent
commit
aae948968a

+ 5 - 1
app/Http/Controllers/API/ProjectController.php

@@ -49,6 +49,7 @@ use App\Models\RequirementGroup;
 use App\Repositories\ActionRepository;
 use App\Services\File\FileAssociationService;
 use App\Services\History\ModelChangeDetector;
+use App\Services\Project\ProjectBACnetService;
 use App\Services\Project\ProjectKanbanService;
 use App\Services\Project\ProjectGanttService;
 use App\Services\Project\ProjectTaskGroupViewService;
@@ -727,5 +728,8 @@ class ProjectController extends Controller
         ]);
     }
 
-
+    public function iotDevice(){
+        $data = (new ProjectBACnetService())->fetchDeviceObjects(['deviceId' => '100.AV1']);
+        return $this->success($data ?? []);
+    }
 }

+ 37 - 0
app/Services/Project/ProjectBACnetService.php

@@ -0,0 +1,37 @@
+<?php
+namespace App\Services\Project;
+use Illuminate\Support\Facades\Http;
+
+class ProjectBACnetService {
+    protected string $baseProxyUrl;
+    protected string $siteId = '10100';
+    protected array $queryParams = [
+        'skip' => 0,
+        'max-results' => 15,
+        'alt' => 'json'
+    ];
+    protected string $username;
+    protected string $password;
+
+    public function __construct()
+    {
+        $this->baseProxyUrl = config('bacnet.base_proxy_url');
+        $this->siteId = config('bacnet.site_id');
+        $this->username = config('bacnet.auth.username');
+        $this->password = config('bacnet.auth.password');
+    }
+
+    public function fetchDeviceObjects($params = [])
+    {
+        $url = "{$this->baseProxyUrl}/{$this->siteId}/{$params['deviceId']}";
+        $response = Http::withBasicAuth($this->username, $this->password)
+            ->timeout(30)
+            ->get($url, $this->queryParams);
+
+        if ($response->successful()) {
+           return $response->json();
+        } else {
+           throw new \Exception('API request failed: ' . $response->body());
+        }
+    }
+}

+ 10 - 0
config/bacnet.php

@@ -0,0 +1,10 @@
+<?php
+
+return [
+    'base_proxy_url' => env('BACNET_API_BASE_PROXY_URL'),
+    'site_id' => env('BACNET_API_SITE_ID', 'IFC'),
+    'auth' => [
+        'username' => env('BACNET_API_USERNAME'),
+        'password' => env('BACNET_API_PASSWORD'),
+    ],
+];

+ 2 - 0
routes/api.php

@@ -200,6 +200,8 @@ Route::middleware(['auth:sanctum','account.limit'])->group(function () {
             ->name("project.4s");
         Route::get("project-iot", [API\ProjectController::class, "iot"])
             ->name("project.iot");
+        Route::get("project-iot/{siteName}/{deviceNumber}", [API\ProjectController::class, "iotDevice"])
+            ->name("project.iotDevice");
 
 //        Route::get("project/{project}/not-link-asset-requirement", [API\ProjectController::class, "notLinkAssetRequirement"])
 //            ->name("project.not-link-asset-requirement"); //项目未关联的资产需求