1 """TOLO Sauna climate controls (main sauna control)."""
3 from __future__
import annotations
10 TARGET_TEMPERATURE_MAX,
11 TARGET_TEMPERATURE_MIN,
28 from .const
import DOMAIN
29 from .coordinator
import ToloSaunaUpdateCoordinator
30 from .entity
import ToloSaunaCoordinatorEntity
36 async_add_entities: AddEntitiesCallback,
38 """Set up climate controls for TOLO Sauna."""
39 coordinator = hass.data[DOMAIN][entry.entry_id]
44 """Sauna climate control."""
46 _attr_fan_modes = [FAN_ON, FAN_OFF]
47 _attr_hvac_modes = [HVACMode.OFF, HVACMode.HEAT, HVACMode.DRY]
48 _attr_max_humidity = TARGET_HUMIDITY_MAX
49 _attr_max_temp = TARGET_TEMPERATURE_MAX
50 _attr_min_humidity = TARGET_HUMIDITY_MIN
51 _attr_min_temp = TARGET_TEMPERATURE_MIN
53 _attr_precision = PRECISION_WHOLE
54 _attr_supported_features = (
55 ClimateEntityFeature.TARGET_TEMPERATURE
56 | ClimateEntityFeature.TARGET_HUMIDITY
57 | ClimateEntityFeature.FAN_MODE
58 | ClimateEntityFeature.TURN_OFF
59 | ClimateEntityFeature.TURN_ON
61 _attr_target_temperature_step = 1
62 _attr_temperature_unit = UnitOfTemperature.CELSIUS
63 _enable_turn_on_off_backwards_compatibility =
False
66 self, coordinator: ToloSaunaUpdateCoordinator, entry: ConfigEntry
68 """Initialize TOLO Sauna Climate entity."""
75 """Return current temperature."""
76 return self.coordinator.data.status.current_temperature
80 """Return current humidity."""
81 return self.coordinator.data.status.current_humidity
85 """Return target temperature."""
86 return self.coordinator.data.settings.target_temperature
90 """Return target humidity."""
91 return self.coordinator.data.settings.target_humidity
95 """Get current HVAC mode."""
96 if self.coordinator.data.status.power_on:
99 not self.coordinator.data.status.power_on
100 and self.coordinator.data.status.fan_on
107 """Execute HVAC action."""
108 if self.coordinator.data.status.calefaction == Calefaction.HEAT:
109 return HVACAction.HEATING
110 if self.coordinator.data.status.calefaction == Calefaction.KEEP:
111 return HVACAction.IDLE
112 if self.coordinator.data.status.calefaction == Calefaction.INACTIVE:
113 if self.coordinator.data.status.fan_on:
114 return HVACAction.DRYING
115 return HVACAction.OFF
120 """Return current fan mode."""
121 if self.coordinator.data.status.fan_on:
127 if hvac_mode == HVACMode.OFF:
129 if hvac_mode == HVACMode.HEAT:
131 if hvac_mode == HVACMode.DRY:
136 self.coordinator.client.set_fan_on(fan_mode == FAN_ON)
139 """Set desired target humidity."""
140 self.coordinator.client.set_target_humidity(humidity)
143 """Set desired target temperature."""
144 if (temperature := kwargs.get(ATTR_TEMPERATURE))
is None:
147 self.coordinator.client.set_target_temperature(round(temperature))
150 """Shortcut for setting power and fan of TOLO device on one method."""
151 self.coordinator.client.set_power_on(power_on)
152 self.coordinator.client.set_fan_on(fan_on)
None set_temperature(self, **Any kwargs)
int target_temperature(self)
None __init__(self, ToloSaunaUpdateCoordinator coordinator, ConfigEntry entry)
int current_temperature(self)
None set_hvac_mode(self, HVACMode hvac_mode)
int target_humidity(self)
None set_humidity(self, int humidity)
None _set_power_and_fan(self, bool power_on, bool fan_on)
HVACAction|None hvac_action(self)
int current_humidity(self)
None set_fan_mode(self, str fan_mode)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)