mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Add created_seconds to timer info and pass to ESPHome devices (#120364)
This commit is contained in:
parent
f5ff19d602
commit
d515a7f063
@ -467,7 +467,7 @@ def handle_timer_event(
|
|||||||
native_event_type,
|
native_event_type,
|
||||||
timer_info.id,
|
timer_info.id,
|
||||||
timer_info.name,
|
timer_info.name,
|
||||||
timer_info.seconds,
|
timer_info.created_seconds,
|
||||||
timer_info.seconds_left,
|
timer_info.seconds_left,
|
||||||
timer_info.is_active,
|
timer_info.is_active,
|
||||||
)
|
)
|
||||||
|
@ -93,6 +93,13 @@ class TimerInfo:
|
|||||||
This agent will be used to execute the conversation command.
|
This agent will be used to execute the conversation command.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
_created_seconds: int = 0
|
||||||
|
"""Number of seconds on the timer when it was created."""
|
||||||
|
|
||||||
|
def __post_init__(self) -> None:
|
||||||
|
"""Post initialization."""
|
||||||
|
self._created_seconds = self.seconds
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def seconds_left(self) -> int:
|
def seconds_left(self) -> int:
|
||||||
"""Return number of seconds left on the timer."""
|
"""Return number of seconds left on the timer."""
|
||||||
@ -103,6 +110,15 @@ class TimerInfo:
|
|||||||
seconds_running = int((now - self.updated_at) / 1e9)
|
seconds_running = int((now - self.updated_at) / 1e9)
|
||||||
return max(0, self.seconds - seconds_running)
|
return max(0, self.seconds - seconds_running)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def created_seconds(self) -> int:
|
||||||
|
"""Return number of seconds on the timer when it was created.
|
||||||
|
|
||||||
|
This value is increased if time is added to the timer, exceeding its
|
||||||
|
original created_seconds.
|
||||||
|
"""
|
||||||
|
return self._created_seconds
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def name_normalized(self) -> str:
|
def name_normalized(self) -> str:
|
||||||
"""Return normalized timer name."""
|
"""Return normalized timer name."""
|
||||||
@ -131,6 +147,7 @@ class TimerInfo:
|
|||||||
Seconds may be negative to remove time instead.
|
Seconds may be negative to remove time instead.
|
||||||
"""
|
"""
|
||||||
self.seconds = max(0, self.seconds_left + seconds)
|
self.seconds = max(0, self.seconds_left + seconds)
|
||||||
|
self._created_seconds = max(self._created_seconds, self.seconds)
|
||||||
self.updated_at = time.monotonic_ns()
|
self.updated_at = time.monotonic_ns()
|
||||||
|
|
||||||
def finish(self) -> None:
|
def finish(self) -> None:
|
||||||
|
@ -836,6 +836,7 @@ async def test_timer_events(
|
|||||||
connections={(dr.CONNECTION_NETWORK_MAC, mock_device.entry.unique_id)}
|
connections={(dr.CONNECTION_NETWORK_MAC, mock_device.entry.unique_id)}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
total_seconds = (1 * 60 * 60) + (2 * 60) + 3
|
||||||
await intent_helper.async_handle(
|
await intent_helper.async_handle(
|
||||||
hass,
|
hass,
|
||||||
"test",
|
"test",
|
||||||
@ -853,8 +854,32 @@ async def test_timer_events(
|
|||||||
VoiceAssistantTimerEventType.VOICE_ASSISTANT_TIMER_STARTED,
|
VoiceAssistantTimerEventType.VOICE_ASSISTANT_TIMER_STARTED,
|
||||||
ANY,
|
ANY,
|
||||||
"test timer",
|
"test timer",
|
||||||
3723,
|
total_seconds,
|
||||||
3723,
|
total_seconds,
|
||||||
|
True,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Increase timer beyond original time and check total_seconds has increased
|
||||||
|
mock_client.send_voice_assistant_timer_event.reset_mock()
|
||||||
|
|
||||||
|
total_seconds += 5 * 60
|
||||||
|
await intent_helper.async_handle(
|
||||||
|
hass,
|
||||||
|
"test",
|
||||||
|
intent_helper.INTENT_INCREASE_TIMER,
|
||||||
|
{
|
||||||
|
"name": {"value": "test timer"},
|
||||||
|
"minutes": {"value": 5},
|
||||||
|
},
|
||||||
|
device_id=dev.id,
|
||||||
|
)
|
||||||
|
|
||||||
|
mock_client.send_voice_assistant_timer_event.assert_called_with(
|
||||||
|
VoiceAssistantTimerEventType.VOICE_ASSISTANT_TIMER_UPDATED,
|
||||||
|
ANY,
|
||||||
|
"test timer",
|
||||||
|
total_seconds,
|
||||||
|
ANY,
|
||||||
True,
|
True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@ async def test_start_finish_timer(hass: HomeAssistant, init_components) -> None:
|
|||||||
assert timer.start_minutes is None
|
assert timer.start_minutes is None
|
||||||
assert timer.start_seconds == 0
|
assert timer.start_seconds == 0
|
||||||
assert timer.seconds_left == 0
|
assert timer.seconds_left == 0
|
||||||
|
assert timer.created_seconds == 0
|
||||||
|
|
||||||
if event_type == TimerEventType.STARTED:
|
if event_type == TimerEventType.STARTED:
|
||||||
timer_id = timer.id
|
timer_id = timer.id
|
||||||
@ -218,6 +219,7 @@ async def test_increase_timer(hass: HomeAssistant, init_components) -> None:
|
|||||||
timer_name = "test timer"
|
timer_name = "test timer"
|
||||||
timer_id: str | None = None
|
timer_id: str | None = None
|
||||||
original_total_seconds = -1
|
original_total_seconds = -1
|
||||||
|
seconds_added = 0
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def handle_timer(event_type: TimerEventType, timer: TimerInfo) -> None:
|
def handle_timer(event_type: TimerEventType, timer: TimerInfo) -> None:
|
||||||
@ -238,12 +240,14 @@ async def test_increase_timer(hass: HomeAssistant, init_components) -> None:
|
|||||||
+ (60 * timer.start_minutes)
|
+ (60 * timer.start_minutes)
|
||||||
+ timer.start_seconds
|
+ timer.start_seconds
|
||||||
)
|
)
|
||||||
|
assert timer.created_seconds == original_total_seconds
|
||||||
started_event.set()
|
started_event.set()
|
||||||
elif event_type == TimerEventType.UPDATED:
|
elif event_type == TimerEventType.UPDATED:
|
||||||
assert timer.id == timer_id
|
assert timer.id == timer_id
|
||||||
|
|
||||||
# Timer was increased
|
# Timer was increased
|
||||||
assert timer.seconds_left > original_total_seconds
|
assert timer.seconds_left > original_total_seconds
|
||||||
|
assert timer.created_seconds == original_total_seconds + seconds_added
|
||||||
updated_event.set()
|
updated_event.set()
|
||||||
elif event_type == TimerEventType.CANCELLED:
|
elif event_type == TimerEventType.CANCELLED:
|
||||||
assert timer.id == timer_id
|
assert timer.id == timer_id
|
||||||
@ -270,6 +274,7 @@ async def test_increase_timer(hass: HomeAssistant, init_components) -> None:
|
|||||||
await started_event.wait()
|
await started_event.wait()
|
||||||
|
|
||||||
# Adding 0 seconds has no effect
|
# Adding 0 seconds has no effect
|
||||||
|
seconds_added = 0
|
||||||
result = await intent.async_handle(
|
result = await intent.async_handle(
|
||||||
hass,
|
hass,
|
||||||
"test",
|
"test",
|
||||||
@ -288,6 +293,7 @@ async def test_increase_timer(hass: HomeAssistant, init_components) -> None:
|
|||||||
assert not updated_event.is_set()
|
assert not updated_event.is_set()
|
||||||
|
|
||||||
# Add 30 seconds to the timer
|
# Add 30 seconds to the timer
|
||||||
|
seconds_added = (1 * 60 * 60) + (5 * 60) + 30
|
||||||
result = await intent.async_handle(
|
result = await intent.async_handle(
|
||||||
hass,
|
hass,
|
||||||
"test",
|
"test",
|
||||||
@ -357,6 +363,7 @@ async def test_decrease_timer(hass: HomeAssistant, init_components) -> None:
|
|||||||
|
|
||||||
# Timer was decreased
|
# Timer was decreased
|
||||||
assert timer.seconds_left <= (original_total_seconds - 30)
|
assert timer.seconds_left <= (original_total_seconds - 30)
|
||||||
|
assert timer.created_seconds == original_total_seconds
|
||||||
|
|
||||||
updated_event.set()
|
updated_event.set()
|
||||||
elif event_type == TimerEventType.CANCELLED:
|
elif event_type == TimerEventType.CANCELLED:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user