Source code for aioafero.v1.models.portable_ac

"""Representation of an Afero Portable AC and its corresponding updates."""

from dataclasses import dataclass, field

from aioafero.v1.models import features

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

mode_checks = {
    "auto-cool": "cool",
}


[docs] @dataclass(kw_only=True) class PortableAC(StandardMixin, HVACMixin): """Representation of an Afero Portable AC.""" type: ResourceTypes = ResourceTypes.PORTABLE_AC numbers: dict[tuple[str, str | None], features.NumbersFeature] | None selects: dict[tuple[str, str | None], features.SelectFeature] | None @property def supports_fan_mode(self) -> bool: """Can enable fan-only mode.""" return False
[docs] def get_mode_to_check(self) -> str | None: """Determine the current mode of the thermostat.""" if not self.hvac_mode: return None checked_mode = mode_checks.get(self.hvac_mode.mode, self.hvac_mode.mode) checked_prev_mode = mode_checks.get( self.hvac_mode.previous_mode, self.hvac_mode.previous_mode ) if checked_mode in [ "cool", "heat", ]: return checked_mode if checked_mode == "dehumidify": return checked_prev_mode return None
@property def supports_temperature_range(self) -> bool: """Range which the thermostat will heat / cool.""" return False
[docs] @dataclass class PortableACPut: """States that can be updated for a Portable AC.""" # This feels wrong but based on data dumps, setting timer increases the # current temperature by 1 to turn it on current_temperature: features.CurrentTemperatureFeature | None = None hvac_mode: features.HVACModeFeature | None = None target_temperature_cooling: features.TargetTemperatureFeature | None = None numbers: dict[tuple[str, str | None], features.NumbersFeature] | None = field( default_factory=dict, repr=False, init=False ) selects: dict[tuple[str, str | None], features.SelectFeature] | None = field( default_factory=dict, repr=False, init=False )