1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-08 17:49:37 +01:00

Fix Saunum session parameters to use timedelta (#163962)

This commit is contained in:
mettolen
2026-02-24 23:14:09 +02:00
committed by GitHub
parent 7894a80728
commit e514faf0bc
3 changed files with 29 additions and 14 deletions
+9 -4
View File
@@ -3,6 +3,7 @@
from __future__ import annotations
import asyncio
from datetime import timedelta
from typing import Any
from pysaunum import MAX_TEMPERATURE, MIN_TEMPERATURE, SaunumException
@@ -241,9 +242,9 @@ class LeilSaunaClimate(LeilSaunaEntity, ClimateEntity):
async def async_start_session(
self,
duration: int = 120,
duration: timedelta = timedelta(minutes=120),
target_temperature: int = 80,
fan_duration: int = 10,
fan_duration: timedelta = timedelta(minutes=10),
) -> None:
"""Start a sauna session with custom parameters."""
if self.coordinator.data.door_open:
@@ -254,11 +255,15 @@ class LeilSaunaClimate(LeilSaunaEntity, ClimateEntity):
try:
# Set all parameters before starting the session
await self.coordinator.client.async_set_sauna_duration(duration)
await self.coordinator.client.async_set_sauna_duration(
int(duration.total_seconds() // 60)
)
await self.coordinator.client.async_set_target_temperature(
target_temperature
)
await self.coordinator.client.async_set_fan_duration(fan_duration)
await self.coordinator.client.async_set_fan_duration(
int(fan_duration.total_seconds() // 60)
)
await self.coordinator.client.async_start_session()
except SaunumException as err:
raise HomeAssistantError(
+14 -4
View File
@@ -2,6 +2,8 @@
from __future__ import annotations
from datetime import timedelta
from pysaunum import MAX_DURATION, MAX_FAN_DURATION, MAX_TEMPERATURE, MIN_TEMPERATURE
import voluptuous as vol
@@ -27,14 +29,22 @@ def async_setup_services(hass: HomeAssistant) -> None:
SERVICE_START_SESSION,
entity_domain=CLIMATE_DOMAIN,
schema={
vol.Optional(ATTR_DURATION, default=120): vol.All(
cv.positive_int, vol.Range(min=1, max=MAX_DURATION)
vol.Optional(ATTR_DURATION, default=timedelta(minutes=120)): vol.All(
cv.time_period,
vol.Range(
min=timedelta(minutes=1),
max=timedelta(minutes=MAX_DURATION),
),
),
vol.Optional(ATTR_TARGET_TEMPERATURE, default=80): vol.All(
cv.positive_int, vol.Range(min=MIN_TEMPERATURE, max=MAX_TEMPERATURE)
),
vol.Optional(ATTR_FAN_DURATION, default=10): vol.All(
cv.positive_int, vol.Range(min=1, max=MAX_FAN_DURATION)
vol.Optional(ATTR_FAN_DURATION, default=timedelta(minutes=10)): vol.All(
cv.time_period,
vol.Range(
min=timedelta(minutes=1),
max=timedelta(minutes=MAX_FAN_DURATION),
),
),
},
func="async_start_session",
+6 -6
View File
@@ -1,8 +1,9 @@
"""Tests for Saunum services."""
from dataclasses import replace
from unittest.mock import MagicMock
from pysaunum import SaunumData, SaunumException
from pysaunum import SaunumException
import pytest
from homeassistant.components.saunum.const import DOMAIN
@@ -36,9 +37,9 @@ async def test_start_session_success(
SERVICE_START_SESSION,
{
ATTR_ENTITY_ID: "climate.saunum_leil",
ATTR_DURATION: 120,
ATTR_DURATION: {"hours": 2, "minutes": 0, "seconds": 0},
ATTR_TARGET_TEMPERATURE: 80,
ATTR_FAN_DURATION: 10,
ATTR_FAN_DURATION: {"minutes": 10},
},
blocking=True,
)
@@ -73,11 +74,10 @@ async def test_start_session_door_open(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_saunum_client: MagicMock,
mock_saunum_data: SaunumData,
) -> None:
"""Test start_session service fails when door is open."""
mock_saunum_client.async_get_data.return_value = SaunumData(
**{**mock_saunum_data.__dict__, "door_open": True}
mock_saunum_client.async_get_data.return_value = replace(
mock_saunum_client.async_get_data.return_value, door_open=True
)
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)