mirror of
https://github.com/home-assistant/core.git
synced 2025-04-26 02:07:54 +00:00
Filter out duplicate logbook states (#32427)
This commit is contained in:
parent
8f6651af3d
commit
fed23030d6
@ -199,6 +199,9 @@ def humanify(hass, events):
|
|||||||
"""
|
"""
|
||||||
domain_prefixes = tuple(f"{dom}." for dom in CONTINUOUS_DOMAINS)
|
domain_prefixes = tuple(f"{dom}." for dom in CONTINUOUS_DOMAINS)
|
||||||
|
|
||||||
|
# Track last states to filter out duplicates
|
||||||
|
last_state = {}
|
||||||
|
|
||||||
# Group events in batches of GROUP_BY_MINUTES
|
# Group events in batches of GROUP_BY_MINUTES
|
||||||
for _, g_events in groupby(
|
for _, g_events in groupby(
|
||||||
events, lambda event: event.time_fired.minute // GROUP_BY_MINUTES
|
events, lambda event: event.time_fired.minute // GROUP_BY_MINUTES
|
||||||
@ -236,9 +239,15 @@ def humanify(hass, events):
|
|||||||
# Yield entries
|
# Yield entries
|
||||||
for event in events_batch:
|
for event in events_batch:
|
||||||
if event.event_type == EVENT_STATE_CHANGED:
|
if event.event_type == EVENT_STATE_CHANGED:
|
||||||
|
|
||||||
to_state = State.from_dict(event.data.get("new_state"))
|
to_state = State.from_dict(event.data.get("new_state"))
|
||||||
|
|
||||||
|
# Filter out states that become same state again (force_update=True)
|
||||||
|
# or light becoming different color
|
||||||
|
if last_state.get(to_state.entity_id) == to_state.state:
|
||||||
|
continue
|
||||||
|
|
||||||
|
last_state[to_state.entity_id] = to_state.state
|
||||||
|
|
||||||
domain = to_state.domain
|
domain = to_state.domain
|
||||||
|
|
||||||
# Skip all but the last sensor state
|
# Skip all but the last sensor state
|
||||||
|
@ -1484,3 +1484,36 @@ async def test_humanify_script_started_event(hass):
|
|||||||
assert event2["domain"] == "script"
|
assert event2["domain"] == "script"
|
||||||
assert event2["message"] == "started"
|
assert event2["message"] == "started"
|
||||||
assert event2["entity_id"] == "script.bye"
|
assert event2["entity_id"] == "script.bye"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_humanify_same_state(hass):
|
||||||
|
"""Test humanifying Script Run event."""
|
||||||
|
state_50 = ha.State("light.kitchen", "on", {"brightness": 50}).as_dict()
|
||||||
|
state_100 = ha.State("light.kitchen", "on", {"brightness": 100}).as_dict()
|
||||||
|
state_200 = ha.State("light.kitchen", "on", {"brightness": 200}).as_dict()
|
||||||
|
|
||||||
|
events = list(
|
||||||
|
logbook.humanify(
|
||||||
|
hass,
|
||||||
|
[
|
||||||
|
ha.Event(
|
||||||
|
EVENT_STATE_CHANGED,
|
||||||
|
{
|
||||||
|
"entity_id": "light.kitchen",
|
||||||
|
"old_state": state_50,
|
||||||
|
"new_state": state_100,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
ha.Event(
|
||||||
|
EVENT_STATE_CHANGED,
|
||||||
|
{
|
||||||
|
"entity_id": "light.kitchen",
|
||||||
|
"old_state": state_100,
|
||||||
|
"new_state": state_200,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
assert len(events) == 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user