mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 01:37:08 +00:00
Prevent history_stats from rejecting states when microseconds differ (#71704)
This commit is contained in:
parent
04af9698d3
commit
1dc15bb7c8
@ -96,7 +96,11 @@ class HistoryStats:
|
||||
new_data = False
|
||||
if event and event.data["new_state"] is not None:
|
||||
new_state: State = event.data["new_state"]
|
||||
if current_period_start <= new_state.last_changed <= current_period_end:
|
||||
if (
|
||||
current_period_start_timestamp
|
||||
<= floored_timestamp(new_state.last_changed)
|
||||
<= current_period_end_timestamp
|
||||
):
|
||||
self._history_current_period.append(new_state)
|
||||
new_data = True
|
||||
if not new_data and current_period_end_timestamp < now_timestamp:
|
||||
|
@ -1389,9 +1389,10 @@ async def test_measure_cet(hass, recorder_mock):
|
||||
assert hass.states.get("sensor.sensor4").state == "83.3"
|
||||
|
||||
|
||||
async def test_end_time_with_microseconds_zeroed(hass, recorder_mock):
|
||||
@pytest.mark.parametrize("time_zone", ["Europe/Berlin", "America/Chicago", "US/Hawaii"])
|
||||
async def test_end_time_with_microseconds_zeroed(time_zone, hass, recorder_mock):
|
||||
"""Test the history statistics sensor that has the end time microseconds zeroed out."""
|
||||
hass.config.set_time_zone("Europe/Berlin")
|
||||
hass.config.set_time_zone(time_zone)
|
||||
start_of_today = dt_util.now().replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
start_time = start_of_today + timedelta(minutes=60)
|
||||
t0 = start_time + timedelta(minutes=20)
|
||||
@ -1459,6 +1460,7 @@ async def test_end_time_with_microseconds_zeroed(hass, recorder_mock):
|
||||
async_fire_time_changed(hass, time_600)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("sensor.heatpump_compressor_today").state == "3.83"
|
||||
|
||||
rolled_to_next_day = start_of_today + timedelta(days=1)
|
||||
assert rolled_to_next_day.hour == 0
|
||||
assert rolled_to_next_day.minute == 0
|
||||
@ -1469,3 +1471,33 @@ async def test_end_time_with_microseconds_zeroed(hass, recorder_mock):
|
||||
async_fire_time_changed(hass, rolled_to_next_day)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("sensor.heatpump_compressor_today").state == "0.0"
|
||||
|
||||
rolled_to_next_day_plus_12 = start_of_today + timedelta(
|
||||
days=1, hours=12, microseconds=0
|
||||
)
|
||||
with freeze_time(rolled_to_next_day_plus_12):
|
||||
async_fire_time_changed(hass, rolled_to_next_day_plus_12)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("sensor.heatpump_compressor_today").state == "12.0"
|
||||
|
||||
rolled_to_next_day_plus_14 = start_of_today + timedelta(
|
||||
days=1, hours=14, microseconds=0
|
||||
)
|
||||
with freeze_time(rolled_to_next_day_plus_14):
|
||||
async_fire_time_changed(hass, rolled_to_next_day_plus_14)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("sensor.heatpump_compressor_today").state == "14.0"
|
||||
|
||||
rolled_to_next_day_plus_16_860000 = start_of_today + timedelta(
|
||||
days=1, hours=16, microseconds=860000
|
||||
)
|
||||
with freeze_time(rolled_to_next_day_plus_16_860000):
|
||||
hass.states.async_set("binary_sensor.heatpump_compressor_state", "off")
|
||||
async_fire_time_changed(hass, rolled_to_next_day_plus_16_860000)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
rolled_to_next_day_plus_18 = start_of_today + timedelta(days=1, hours=18)
|
||||
with freeze_time(rolled_to_next_day_plus_18):
|
||||
async_fire_time_changed(hass, rolled_to_next_day_plus_18)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("sensor.heatpump_compressor_today").state == "16.0"
|
||||
|
Loading…
x
Reference in New Issue
Block a user