1 """YoLink Thermostat."""
3 from __future__
import annotations
7 from yolink.const
import ATTR_DEVICE_THERMOSTAT
8 from yolink.thermostat_request_builder
import ThermostatRequestBuilder, ThermostatState
11 ATTR_TARGET_TEMP_HIGH,
27 from .const
import DOMAIN
28 from .coordinator
import YoLinkCoordinator
29 from .entity
import YoLinkEntity
32 "cool": HVACMode.COOL,
33 "heat": HVACMode.HEAT,
34 "auto": HVACMode.AUTO,
38 HA_MODEL_2_YOLINK = {v: k
for k, v
in YOLINK_MODEL_2_HA.items()}
40 YOLINK_ACTION_2_HA = {
41 "cool": HVACAction.COOLING,
42 "heat": HVACAction.HEATING,
43 "idle": HVACAction.IDLE,
49 config_entry: ConfigEntry,
50 async_add_entities: AddEntitiesCallback,
52 """Set up YoLink Thermostat from a config entry."""
53 device_coordinators = hass.data[DOMAIN][config_entry.entry_id].device_coordinators
56 for device_coordinator
in device_coordinators.values()
57 if device_coordinator.device.device_type == ATTR_DEVICE_THERMOSTAT
63 """YoLink Climate Entity."""
66 _enable_turn_on_off_backwards_compatibility =
False
70 config_entry: ConfigEntry,
71 coordinator: YoLinkCoordinator,
73 """Init YoLink Thermostat."""
74 super().
__init__(config_entry, coordinator)
89 ClimateEntityFeature.FAN_MODE
90 | ClimateEntityFeature.PRESET_MODE
91 | ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
92 | ClimateEntityFeature.TURN_OFF
93 | ClimateEntityFeature.TURN_ON
98 """Update HA Entity State."""
99 normal_state = state.get(
"state")
100 if normal_state
is not None:
106 self.
_attr_hvac_mode_attr_hvac_mode = YOLINK_MODEL_2_HA.get(normal_state.get(
"mode"))
108 eco_setting = state.get(
"eco")
109 if eco_setting
is not None:
111 PRESET_NONE
if eco_setting.get(
"mode") ==
"on" else PRESET_ECO
116 """Set new target hvac mode."""
117 if (hvac_mode_id := HA_MODEL_2_YOLINK.get(hvac_mode))
is None:
118 raise ValueError(f
"Received an invalid hvac mode: {hvac_mode}")
120 ThermostatRequestBuilder.set_state_request(
121 ThermostatState(mode=hvac_mode_id)
129 ThermostatRequestBuilder.set_state_request(ThermostatState(fan=fan_mode))
135 """Set temperature."""
136 target_temp_low = kwargs.get(ATTR_TARGET_TEMP_LOW)
137 target_temp_high = kwargs.get(ATTR_TARGET_TEMP_HIGH)
138 if target_temp_low
is not None:
140 ThermostatRequestBuilder.set_state_request(
141 ThermostatState(lowTemp=target_temp_low)
145 if target_temp_high
is not None:
147 ThermostatRequestBuilder.set_state_request(
148 ThermostatState(highTemp=target_temp_high)
155 """Set preset mode."""
156 eco_params =
"on" if preset_mode == PRESET_ECO
else "off"
157 await self.
call_devicecall_device(ThermostatRequestBuilder.set_eco_request(eco_params))
158 self.
_attr_preset_mode_attr_preset_mode = PRESET_ECO
if eco_params ==
"on" else PRESET_NONE
_attr_target_temperature_high
_attr_target_temperature_low
None async_set_fan_mode(self, str fan_mode)
None update_entity_state(self, dict[str, Any] state)
None async_set_hvac_mode(self, HVACMode hvac_mode)
None async_set_temperature(self, **Any kwargs)
_attr_current_temperature
None async_set_preset_mode(self, str preset_mode)
None __init__(self, ConfigEntry config_entry, YoLinkCoordinator coordinator)
None call_device(self, ClientRequest request)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)