BEHAVIOR-001: learn and predict actuator actions

This commit is contained in:
2026-06-14 10:37:59 +02:00
parent 6305f52cd2
commit fa250216be
34 changed files with 1614 additions and 489 deletions

View File

@@ -9,7 +9,14 @@ from app.ha.exceptions import HaClientError
from app.ha.client import HaClient
from app.ha.discovery import DiscoveredEntity, discover_entities
from app.ha.history import EntityHistorySeries, normalize_history_payload
from app.ha.history import (
EntityHistorySeries,
LogbookEntry,
StateHistorySeries,
normalize_history_payload,
normalize_logbook_payload,
normalize_state_history_payload,
)
from app.ha.models import HaEntitySummary
logger = logging.getLogger(__name__)
@@ -45,6 +52,7 @@ class HaReader:
HaEntitySummary(
entity_id=entity_id,
domain=domain,
state=_optional_str(item.get("state")),
state_class=_optional_str(attributes.get("state_class")),
device_class=_optional_str(attributes.get("device_class")),
unit_of_measurement=_optional_str(attributes.get("unit_of_measurement")),
@@ -77,6 +85,32 @@ class HaReader:
payload = self._client.get_history(entity_ids, start_time, end_time)
return normalize_history_payload(payload)
def read_state_history(
self,
entity_ids: list[str],
start_time: datetime,
end_time: datetime,
) -> Sequence[StateHistorySeries]:
payload = self._client.get_history(entity_ids, start_time, end_time)
return normalize_state_history_payload(payload)
def read_logbook(
self,
entity_id: str,
start_time: datetime,
end_time: datetime,
) -> Sequence[LogbookEntry]:
payload = self._client.get_logbook(entity_id, start_time, end_time)
return normalize_logbook_payload(payload, entity_id)
def call_service(
self,
domain: str,
service: str,
service_data: dict[str, object],
) -> Sequence[object]:
return self._client.call_service(domain, service, service_data)
def _optional_str(value: object) -> str | None:
if value is None or value == "":