Improve learning discovery and dashboard i18n
This commit is contained in:
@@ -78,7 +78,6 @@ class HaClient:
|
||||
"filter_entity_id": ",".join(entity_ids),
|
||||
"end_time": end_time.isoformat(),
|
||||
"minimal_response": "1",
|
||||
"no_attributes": "1",
|
||||
},
|
||||
)
|
||||
if not isinstance(payload, list):
|
||||
|
||||
@@ -21,6 +21,7 @@ class EntityHistorySeries(BaseModel):
|
||||
class StateHistoryPoint(BaseModel):
|
||||
timestamp: datetime
|
||||
state: str
|
||||
attributes: dict[str, object] = {}
|
||||
|
||||
|
||||
class StateHistorySeries(BaseModel):
|
||||
@@ -81,8 +82,22 @@ def normalize_state_history_payload(payload: object) -> list[StateHistorySeries]
|
||||
timestamp = _parse_timestamp(
|
||||
raw_entry.get("last_changed") or raw_entry.get("last_updated")
|
||||
)
|
||||
if not points or points[-1].state != raw_state:
|
||||
points.append(StateHistoryPoint(timestamp=timestamp, state=raw_state))
|
||||
attributes = raw_entry.get("attributes")
|
||||
if not isinstance(attributes, dict):
|
||||
attributes = {}
|
||||
if (
|
||||
not points
|
||||
or points[-1].state != raw_state
|
||||
or _relevant_state_attributes(points[-1].attributes)
|
||||
!= _relevant_state_attributes(attributes)
|
||||
):
|
||||
points.append(
|
||||
StateHistoryPoint(
|
||||
timestamp=timestamp,
|
||||
state=raw_state,
|
||||
attributes=_relevant_state_attributes(attributes),
|
||||
)
|
||||
)
|
||||
if entity_id is not None and points:
|
||||
points.sort(key=lambda point: point.timestamp)
|
||||
normalized.append(StateHistorySeries(entity_id=entity_id, points=points))
|
||||
@@ -176,3 +191,16 @@ def _optional_string(value: object) -> str | None:
|
||||
if value is None or value == "":
|
||||
return None
|
||||
return str(value)
|
||||
|
||||
|
||||
def _relevant_state_attributes(attributes: dict[str, object]) -> dict[str, object]:
|
||||
keys = {
|
||||
"brightness",
|
||||
"color_temp",
|
||||
"color_temp_kelvin",
|
||||
"effect",
|
||||
"hs_color",
|
||||
"rgb_color",
|
||||
"xy_color",
|
||||
}
|
||||
return {key: attributes[key] for key in keys if key in attributes}
|
||||
|
||||
Reference in New Issue
Block a user