baseUrl = env('THINGSBOARD_URL', 'http://65.0.131.117:8080'); $this->username = env('THINGSBOARD_USERNAME', 'tenant1@thingsboard.org'); $this->password = env('THINGSBOARD_PASSWORD', 'tenant1'); } public function getToken() { if (Cache::has('thingsboard_token')) { return Cache::get('thingsboard_token'); } $response = Http::withHeaders([ 'accept' => 'application/json', 'Content-Type' => 'application/json', ]) ->post("{$this->baseUrl}/api/auth/login", [ 'username' => $this->username, 'password' => $this->password, ]); if ($response->successful()) { $token = $response->json('token'); Cache::put('thingsboard_token', $token, now()->addMinutes(15)); return $token; } else { Log::error("ThingsBoard Authentication Failed: " . $response->body()); throw new Exception('Unable to authenticate with ThingsBoard: ' . $response->body()); } } public function createOrUpdateAlarm(array $data) { $token = $this->getToken(); $payload = [ 'type' => $data['type'] ?? null, 'severity' => $data['severity'] ?? null, 'acknowledged' => $data['acknowledged'] ?? null, 'cleared' => $data['cleared'] ?? Carbon::now()->timestamp, 'startTs' => $data['startTs'] ?? Carbon::now()->timestamp, 'endTs' => $data['endTs'] ?? Carbon::now()->timestamp, 'originator' => [ 'id' => $data['originator'] ?? null, 'entityType' => 'DEVICE' ], 'assigneeId' => [ 'id' => $data['assigneeId'] ?? null, 'entityType' => 'USER' ], 'details' => $data['details'] ?? [], 'propagate' => $data['propagate'] ?? false, 'propagateToOwner' => $data['propagateToOwner'] ?? false, ]; // Optional fields if (!empty($data['id'])) { $payload['id'] = [ 'id' => $data['id'], 'entityType' => 'ALARM' ]; } $url = "{$this->baseUrl}/api/alarm"; $method = 'post'; $response = Http::withHeaders([ 'Authorization' => "Bearer $token", 'Accept' => 'application/json', 'Content-Type' => 'application/json', ])->post($url, $payload); if (!$response->successful()) { Log::error("API Error Response:", ['body' => $response->body()]); throw new Exception('API Error: ' . $response->body()); } $apiResponse = $response->json(); return $apiResponse; } public function deleteDevice(array $data) { $token = $this->getToken(); $url = "{$this->baseUrl}/api/device/{$data['deviceId']}"; $response = Http::withHeaders([ 'Authorization' => "Bearer $token", 'Accept' => 'application/json', ])->delete($url); // If response body is empty, assume success if ($response->status() === 200 && empty($response->body())) { return ['message' => 'Device deleted successfully']; } if ($response->successful()) { return $response->json(); } else { throw new Exception('Failed to create Device: ' . $response->body()); Log::info('API Response:', ['response' => $response]); } throw new Exception('Failed to create user: ' . $response->body()); } }