Source code for aioafero.v1.models.thermostat

"""Representation of an Afero Thermostat and its corresponding updates."""

from dataclasses import dataclass

from aioafero.v1.models import features

from .hvac_mixin import HVACMixin
from .resource import ResourceTypes
from .standard_mixin import StandardMixin


[docs] @dataclass(kw_only=True) class Thermostat(StandardMixin, HVACMixin): """Representation of an Afero Thermostat.""" type: ResourceTypes = ResourceTypes.THERMOSTAT safety_max_temp: features.TargetTemperatureFeature | None = None safety_min_temp: features.TargetTemperatureFeature | None = None @property def target_temperature_range(self) -> tuple[float, float]: """Range which the thermostat supports.""" return ( self.target_temperature_auto_heating.value, self.target_temperature_auto_cooling.value, )
[docs] def get_mode_to_check(self) -> str | None: """Determine the current mode of the thermostat.""" if not self.hvac_mode: return None if self.hvac_mode.mode in ["cool", "heat"]: return self.hvac_mode.mode if self.hvac_mode.previous_mode in ["cool", "heat"]: return self.hvac_mode.previous_mode return None
@property def supports_fan_mode(self) -> bool: """Can enable fan-only mode.""" return self.fan_mode is not None @property def supports_temperature_range(self) -> bool: """Range which the thermostat will heat / cool.""" if not self.hvac_mode or "auto" not in self.hvac_mode.supported_modes: return False return ( self.target_temperature_auto_cooling is not None and self.target_temperature_auto_heating is not None )
[docs] @dataclass class ThermostatPut: """States that can be updated for a Thermostat.""" fan_mode: features.ModeFeature | None = None hvac_mode: features.HVACModeFeature | None = None safety_max_temp: features.TargetTemperatureFeature | None = None safety_min_temp: features.TargetTemperatureFeature | None = None target_temperature_auto_heating: features.TargetTemperatureFeature | None = None target_temperature_auto_cooling: features.TargetTemperatureFeature | None = None target_temperature_heating: features.TargetTemperatureFeature | None = None target_temperature_cooling: features.TargetTemperatureFeature | None = None