import os import time from .audit import audit_tool_call import requests THINGSBOARD_BASE_URL = os.getenv("THINGSBOARD_BASE_URL", "http://localhost:8081") THINGSBOARD_TOKEN = os.getenv("THINGSBOARD_TOKEN", "") def _headers(): if THINGSBOARD_TOKEN: return {"X-Authorization": f"Bearer {THINGSBOARD_TOKEN}"} return {} def get_latest_telemetry(device_id: str, metric: str, window: int = 3600): _t = time.time() # Using deviceId with JWT token (admin). If using device token, adapt externally. url = f"{THINGSBOARD_BASE_URL}/api/plugins/telemetry/DEVICE/{device_id}/values/timeseries" params = {"keys": metric, "startTs": "", "endTs": ""} r = requests.get(url, headers=_headers(), params=params, timeout=20) r.raise_for_status() out = r.json() audit_tool_call("tool_thingsboard_read.get_latest_telemetry", {"device_id": device_id, "metric": metric}, {"ok": True}, True, int((time.time()-_t)*1000)) return out def get_device_status(device_id: str): _t = time.time() url = f"{THINGSBOARD_BASE_URL}/api/device/info/{device_id}" r = requests.get(url, headers=_headers(), timeout=20) r.raise_for_status() out = r.json() audit_tool_call("tool_thingsboard_read.get_latest_telemetry", {"device_id": device_id, "metric": metric}, {"ok": True}, True, int((time.time()-_t)*1000)) return out