HA improvements: entity overflow fix, live % fetch on device page, searchable entity dropdown
This commit is contained in:
+29
-2
@@ -21,7 +21,7 @@ class HomeAssistantClient:
|
||||
def enabled(self) -> bool:
|
||||
return self._enabled
|
||||
|
||||
def get_state(self, entity_id: str) -> int | None:
|
||||
def get_state(self, entity_id: str, timeout: int = 10) -> int | None:
|
||||
"""Fetch the current state of a HA entity and return it as an integer.
|
||||
|
||||
Returns None if HA is not configured, the entity is not found,
|
||||
@@ -31,10 +31,37 @@ class HomeAssistantClient:
|
||||
return None
|
||||
url = f"{self._base_url}/api/states/{entity_id}"
|
||||
try:
|
||||
resp = requests.get(url, headers=self._headers, timeout=10)
|
||||
resp = requests.get(url, headers=self._headers, timeout=timeout)
|
||||
resp.raise_for_status()
|
||||
state = resp.json().get("state")
|
||||
return int(float(state))
|
||||
except (requests.RequestException, ValueError, TypeError, KeyError) as exc:
|
||||
logger.warning("HA API error for %s: %s", entity_id, exc)
|
||||
return None
|
||||
|
||||
def list_battery_entities(self) -> list[dict]:
|
||||
"""Return all HA entities that look like battery sensors.
|
||||
|
||||
Includes entities where device_class == 'battery' or 'battery' appears
|
||||
in the entity_id. Returns [] when disabled or on any error.
|
||||
"""
|
||||
if not self._enabled:
|
||||
return []
|
||||
url = f"{self._base_url}/api/states"
|
||||
try:
|
||||
resp = requests.get(url, headers=self._headers, timeout=15)
|
||||
resp.raise_for_status()
|
||||
result = []
|
||||
for s in resp.json():
|
||||
eid = s.get("entity_id", "")
|
||||
attrs = s.get("attributes", {})
|
||||
if (attrs.get("device_class") == "battery"
|
||||
or "battery" in eid.lower()):
|
||||
result.append({
|
||||
"entity_id": eid,
|
||||
"friendly_name": attrs.get("friendly_name", eid),
|
||||
})
|
||||
return sorted(result, key=lambda x: x["entity_id"])
|
||||
except (requests.RequestException, ValueError, TypeError) as exc:
|
||||
logger.warning("HA list_battery_entities error: %s", exc)
|
||||
return []
|
||||
|
||||
Reference in New Issue
Block a user