mirror of
https://github.com/home-assistant/core.git
synced 2025-04-25 09:47:52 +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)
|
||||
|
||||
# Track last states to filter out duplicates
|
||||
last_state = {}
|
||||
|
||||
# Group events in batches of GROUP_BY_MINUTES
|
||||
for _, g_events in groupby(
|
||||
events, lambda event: event.time_fired.minute // GROUP_BY_MINUTES
|
||||
@ -236,9 +239,15 @@ def humanify(hass, events):
|
||||
# Yield entries
|
||||
for event in events_batch:
|
||||
if event.event_type == EVENT_STATE_CHANGED:
|
||||
|
||||
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
|
||||
|
||||
# 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["message"] == "started"
|
||||
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