Skip to content

Commit e514faf

Browse files
authored
Fix Saunum session parameters to use timedelta (home-assistant#163962)
1 parent 7894a80 commit e514faf

3 files changed

Lines changed: 29 additions & 14 deletions

File tree

homeassistant/components/saunum/climate.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from __future__ import annotations
44

55
import asyncio
6+
from datetime import timedelta
67
from typing import Any
78

89
from pysaunum import MAX_TEMPERATURE, MIN_TEMPERATURE, SaunumException
@@ -241,9 +242,9 @@ async def async_set_preset_mode(self, preset_mode: str) -> None:
241242

242243
async def async_start_session(
243244
self,
244-
duration: int = 120,
245+
duration: timedelta = timedelta(minutes=120),
245246
target_temperature: int = 80,
246-
fan_duration: int = 10,
247+
fan_duration: timedelta = timedelta(minutes=10),
247248
) -> None:
248249
"""Start a sauna session with custom parameters."""
249250
if self.coordinator.data.door_open:
@@ -254,11 +255,15 @@ async def async_start_session(
254255

255256
try:
256257
# Set all parameters before starting the session
257-
await self.coordinator.client.async_set_sauna_duration(duration)
258+
await self.coordinator.client.async_set_sauna_duration(
259+
int(duration.total_seconds() // 60)
260+
)
258261
await self.coordinator.client.async_set_target_temperature(
259262
target_temperature
260263
)
261-
await self.coordinator.client.async_set_fan_duration(fan_duration)
264+
await self.coordinator.client.async_set_fan_duration(
265+
int(fan_duration.total_seconds() // 60)
266+
)
262267
await self.coordinator.client.async_start_session()
263268
except SaunumException as err:
264269
raise HomeAssistantError(

homeassistant/components/saunum/services.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from __future__ import annotations
44

5+
from datetime import timedelta
6+
57
from pysaunum import MAX_DURATION, MAX_FAN_DURATION, MAX_TEMPERATURE, MIN_TEMPERATURE
68
import voluptuous as vol
79

@@ -27,14 +29,22 @@ def async_setup_services(hass: HomeAssistant) -> None:
2729
SERVICE_START_SESSION,
2830
entity_domain=CLIMATE_DOMAIN,
2931
schema={
30-
vol.Optional(ATTR_DURATION, default=120): vol.All(
31-
cv.positive_int, vol.Range(min=1, max=MAX_DURATION)
32+
vol.Optional(ATTR_DURATION, default=timedelta(minutes=120)): vol.All(
33+
cv.time_period,
34+
vol.Range(
35+
min=timedelta(minutes=1),
36+
max=timedelta(minutes=MAX_DURATION),
37+
),
3238
),
3339
vol.Optional(ATTR_TARGET_TEMPERATURE, default=80): vol.All(
3440
cv.positive_int, vol.Range(min=MIN_TEMPERATURE, max=MAX_TEMPERATURE)
3541
),
36-
vol.Optional(ATTR_FAN_DURATION, default=10): vol.All(
37-
cv.positive_int, vol.Range(min=1, max=MAX_FAN_DURATION)
42+
vol.Optional(ATTR_FAN_DURATION, default=timedelta(minutes=10)): vol.All(
43+
cv.time_period,
44+
vol.Range(
45+
min=timedelta(minutes=1),
46+
max=timedelta(minutes=MAX_FAN_DURATION),
47+
),
3848
),
3949
},
4050
func="async_start_session",

tests/components/saunum/test_services.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
"""Tests for Saunum services."""
22

3+
from dataclasses import replace
34
from unittest.mock import MagicMock
45

5-
from pysaunum import SaunumData, SaunumException
6+
from pysaunum import SaunumException
67
import pytest
78

89
from homeassistant.components.saunum.const import DOMAIN
@@ -36,9 +37,9 @@ async def test_start_session_success(
3637
SERVICE_START_SESSION,
3738
{
3839
ATTR_ENTITY_ID: "climate.saunum_leil",
39-
ATTR_DURATION: 120,
40+
ATTR_DURATION: {"hours": 2, "minutes": 0, "seconds": 0},
4041
ATTR_TARGET_TEMPERATURE: 80,
41-
ATTR_FAN_DURATION: 10,
42+
ATTR_FAN_DURATION: {"minutes": 10},
4243
},
4344
blocking=True,
4445
)
@@ -73,11 +74,10 @@ async def test_start_session_door_open(
7374
hass: HomeAssistant,
7475
mock_config_entry: MockConfigEntry,
7576
mock_saunum_client: MagicMock,
76-
mock_saunum_data: SaunumData,
7777
) -> None:
7878
"""Test start_session service fails when door is open."""
79-
mock_saunum_client.async_get_data.return_value = SaunumData(
80-
**{**mock_saunum_data.__dict__, "door_open": True}
79+
mock_saunum_client.async_get_data.return_value = replace(
80+
mock_saunum_client.async_get_data.return_value, door_open=True
8181
)
8282
mock_config_entry.add_to_hass(hass)
8383
await hass.config_entries.async_setup(mock_config_entry.entry_id)

0 commit comments

Comments
 (0)