Add tado service set temperature offset (#45014)
This commit is contained in:
parent
622906965d
commit
f2a8ccdbae
6 changed files with 99 additions and 2 deletions
|
@ -46,6 +46,8 @@ from .const import (
|
|||
TADO_SWING_ON,
|
||||
TADO_TO_HA_FAN_MODE_MAP,
|
||||
TADO_TO_HA_HVAC_MODE_MAP,
|
||||
TADO_TO_HA_OFFSET_MAP,
|
||||
TEMP_OFFSET,
|
||||
TYPE_AIR_CONDITIONING,
|
||||
TYPE_HEATING,
|
||||
)
|
||||
|
@ -63,6 +65,13 @@ CLIMATE_TIMER_SCHEMA = {
|
|||
vol.Required(ATTR_TEMPERATURE): vol.Coerce(float),
|
||||
}
|
||||
|
||||
SERVICE_TEMP_OFFSET = "set_climate_temperature_offset"
|
||||
ATTR_OFFSET = "offset"
|
||||
|
||||
CLIMATE_TEMP_OFFSET_SCHEMA = {
|
||||
vol.Required(ATTR_OFFSET, default=0): vol.Coerce(float),
|
||||
}
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities
|
||||
|
@ -80,6 +89,12 @@ async def async_setup_entry(
|
|||
"set_timer",
|
||||
)
|
||||
|
||||
platform.async_register_entity_service(
|
||||
SERVICE_TEMP_OFFSET,
|
||||
CLIMATE_TEMP_OFFSET_SCHEMA,
|
||||
"set_temp_offset",
|
||||
)
|
||||
|
||||
if entities:
|
||||
async_add_entities(entities, True)
|
||||
|
||||
|
@ -89,13 +104,15 @@ def _generate_entities(tado):
|
|||
entities = []
|
||||
for zone in tado.zones:
|
||||
if zone["type"] in [TYPE_HEATING, TYPE_AIR_CONDITIONING]:
|
||||
entity = create_climate_entity(tado, zone["name"], zone["id"])
|
||||
entity = create_climate_entity(
|
||||
tado, zone["name"], zone["id"], zone["devices"][0]
|
||||
)
|
||||
if entity:
|
||||
entities.append(entity)
|
||||
return entities
|
||||
|
||||
|
||||
def create_climate_entity(tado, name: str, zone_id: int):
|
||||
def create_climate_entity(tado, name: str, zone_id: int, device_info: dict):
|
||||
"""Create a Tado climate entity."""
|
||||
capabilities = tado.get_capabilities(zone_id)
|
||||
_LOGGER.debug("Capabilities for zone %s: %s", zone_id, capabilities)
|
||||
|
@ -178,6 +195,7 @@ def create_climate_entity(tado, name: str, zone_id: int):
|
|||
supported_hvac_modes,
|
||||
supported_fan_modes,
|
||||
support_flags,
|
||||
device_info,
|
||||
)
|
||||
return entity
|
||||
|
||||
|
@ -200,6 +218,7 @@ class TadoClimate(TadoZoneEntity, ClimateEntity):
|
|||
supported_hvac_modes,
|
||||
supported_fan_modes,
|
||||
support_flags,
|
||||
device_info,
|
||||
):
|
||||
"""Initialize of Tado climate entity."""
|
||||
self._tado = tado
|
||||
|
@ -208,6 +227,8 @@ class TadoClimate(TadoZoneEntity, ClimateEntity):
|
|||
self.zone_id = zone_id
|
||||
self.zone_type = zone_type
|
||||
self._unique_id = f"{zone_type} {zone_id} {tado.home_id}"
|
||||
self._device_info = device_info
|
||||
self._device_id = self._device_info["shortSerialNo"]
|
||||
|
||||
self._ac_device = zone_type == TYPE_AIR_CONDITIONING
|
||||
self._supported_hvac_modes = supported_hvac_modes
|
||||
|
@ -236,6 +257,8 @@ class TadoClimate(TadoZoneEntity, ClimateEntity):
|
|||
|
||||
self._tado_zone_data = None
|
||||
|
||||
self._tado_zone_temp_offset = {}
|
||||
|
||||
self._async_update_zone_data()
|
||||
|
||||
async def async_added_to_hass(self):
|
||||
|
@ -362,6 +385,17 @@ class TadoClimate(TadoZoneEntity, ClimateEntity):
|
|||
hvac_mode=CONST_MODE_HEAT, target_temp=temperature, duration=time_period
|
||||
)
|
||||
|
||||
def set_temp_offset(self, offset):
|
||||
"""Set offset on the entity."""
|
||||
|
||||
_LOGGER.debug(
|
||||
"Setting temperature offset for device %s setting to (%d)",
|
||||
self._device_id,
|
||||
offset,
|
||||
)
|
||||
|
||||
self._tado.set_temperature_offset(self._device_id, offset)
|
||||
|
||||
def set_temperature(self, **kwargs):
|
||||
"""Set new target temperature."""
|
||||
temperature = kwargs.get(ATTR_TEMPERATURE)
|
||||
|
@ -427,6 +461,11 @@ class TadoClimate(TadoZoneEntity, ClimateEntity):
|
|||
return [TADO_SWING_ON, TADO_SWING_OFF]
|
||||
return None
|
||||
|
||||
@property
|
||||
def device_state_attributes(self):
|
||||
"""Return temperature offset."""
|
||||
return self._tado_zone_temp_offset
|
||||
|
||||
def set_swing_mode(self, swing_mode):
|
||||
"""Set swing modes for the device."""
|
||||
self._control_hvac(swing_mode=swing_mode)
|
||||
|
@ -435,6 +474,16 @@ class TadoClimate(TadoZoneEntity, ClimateEntity):
|
|||
def _async_update_zone_data(self):
|
||||
"""Load tado data into zone."""
|
||||
self._tado_zone_data = self._tado.data["zone"][self.zone_id]
|
||||
# Assign offset values to mapped attributes
|
||||
for offset_key, attr in TADO_TO_HA_OFFSET_MAP.items():
|
||||
if (
|
||||
self._device_id in self._tado.data["device"]
|
||||
and offset_key
|
||||
in self._tado.data["device"][self._device_id][TEMP_OFFSET]
|
||||
):
|
||||
self._tado_zone_temp_offset[attr] = self._tado.data["device"][
|
||||
self._device_id
|
||||
][TEMP_OFFSET][offset_key]
|
||||
self._current_tado_fan_speed = self._tado_zone_data.current_fan_speed
|
||||
self._current_tado_hvac_mode = self._tado_zone_data.current_hvac_mode
|
||||
self._current_tado_hvac_action = self._tado_zone_data.current_hvac_action
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue