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:
@@ -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(
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user