Use shorthand attributes in template vacuum (#70847)

This commit is contained in:
epenet 2022-04-27 09:00:00 +02:00 committed by GitHub
parent 21f9b19fad
commit 21badfc40f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -145,83 +145,63 @@ class TemplateVacuum(TemplateEntity, StateVacuumEntity):
self._template = config.get(CONF_VALUE_TEMPLATE)
self._battery_level_template = config.get(CONF_BATTERY_LEVEL_TEMPLATE)
self._fan_speed_template = config.get(CONF_FAN_SPEED_TEMPLATE)
self._supported_features = VacuumEntityFeature.START
self._attr_supported_features = VacuumEntityFeature.START
self._start_script = Script(hass, config[SERVICE_START], friendly_name, DOMAIN)
self._pause_script = None
if pause_action := config.get(SERVICE_PAUSE):
self._pause_script = Script(hass, pause_action, friendly_name, DOMAIN)
self._supported_features |= VacuumEntityFeature.PAUSE
self._attr_supported_features |= VacuumEntityFeature.PAUSE
self._stop_script = None
if stop_action := config.get(SERVICE_STOP):
self._stop_script = Script(hass, stop_action, friendly_name, DOMAIN)
self._supported_features |= VacuumEntityFeature.STOP
self._attr_supported_features |= VacuumEntityFeature.STOP
self._return_to_base_script = None
if return_to_base_action := config.get(SERVICE_RETURN_TO_BASE):
self._return_to_base_script = Script(
hass, return_to_base_action, friendly_name, DOMAIN
)
self._supported_features |= VacuumEntityFeature.RETURN_HOME
self._attr_supported_features |= VacuumEntityFeature.RETURN_HOME
self._clean_spot_script = None
if clean_spot_action := config.get(SERVICE_CLEAN_SPOT):
self._clean_spot_script = Script(
hass, clean_spot_action, friendly_name, DOMAIN
)
self._supported_features |= VacuumEntityFeature.CLEAN_SPOT
self._attr_supported_features |= VacuumEntityFeature.CLEAN_SPOT
self._locate_script = None
if locate_action := config.get(SERVICE_LOCATE):
self._locate_script = Script(hass, locate_action, friendly_name, DOMAIN)
self._supported_features |= VacuumEntityFeature.LOCATE
self._attr_supported_features |= VacuumEntityFeature.LOCATE
self._set_fan_speed_script = None
if set_fan_speed_action := config.get(SERVICE_SET_FAN_SPEED):
self._set_fan_speed_script = Script(
hass, set_fan_speed_action, friendly_name, DOMAIN
)
self._supported_features |= VacuumEntityFeature.FAN_SPEED
self._attr_supported_features |= VacuumEntityFeature.FAN_SPEED
self._state = None
self._battery_level = None
self._fan_speed = None
self._attr_fan_speed = None
if self._template:
self._supported_features |= VacuumEntityFeature.STATE
self._attr_supported_features |= VacuumEntityFeature.STATE
if self._battery_level_template:
self._supported_features |= VacuumEntityFeature.BATTERY
self._attr_supported_features |= VacuumEntityFeature.BATTERY
# List of valid fan speeds
self._fan_speed_list = config[CONF_FAN_SPEED_LIST]
@property
def supported_features(self) -> int:
"""Flag supported features."""
return self._supported_features
self._attr_fan_speed_list = config[CONF_FAN_SPEED_LIST]
@property
def state(self):
"""Return the status of the vacuum cleaner."""
return self._state
@property
def battery_level(self):
"""Return the battery level of the vacuum cleaner."""
return self._battery_level
@property
def fan_speed(self):
"""Return the fan speed of the vacuum cleaner."""
return self._fan_speed
@property
def fan_speed_list(self) -> list:
"""Get the list of available fan speeds."""
return self._fan_speed_list
async def async_start(self):
"""Start or resume the cleaning task."""
await self._start_script.async_run(context=self._context)
@ -266,8 +246,8 @@ class TemplateVacuum(TemplateEntity, StateVacuumEntity):
if self._set_fan_speed_script is None:
return
if fan_speed in self._fan_speed_list:
self._fan_speed = fan_speed
if fan_speed in self._attr_fan_speed_list:
self._attr_fan_speed = fan_speed
await self._set_fan_speed_script.async_run(
{ATTR_FAN_SPEED: fan_speed}, context=self._context
)
@ -275,7 +255,7 @@ class TemplateVacuum(TemplateEntity, StateVacuumEntity):
_LOGGER.error(
"Received invalid fan speed: %s. Expected: %s",
fan_speed,
self._fan_speed_list,
self._attr_fan_speed_list,
)
async def async_added_to_hass(self):
@ -334,27 +314,27 @@ class TemplateVacuum(TemplateEntity, StateVacuumEntity):
_LOGGER.error(
"Received invalid battery level: %s. Expected: 0-100", battery_level
)
self._battery_level = None
self._attr_battery_level = None
return
self._battery_level = battery_level_int
self._attr_battery_level = battery_level_int
@callback
def _update_fan_speed(self, fan_speed):
if isinstance(fan_speed, TemplateError):
# This is legacy behavior
self._fan_speed = None
self._attr_fan_speed = None
self._state = None
return
if fan_speed in self._fan_speed_list:
self._fan_speed = fan_speed
if fan_speed in self._attr_fan_speed_list:
self._attr_fan_speed = fan_speed
elif fan_speed == STATE_UNKNOWN:
self._fan_speed = None
self._attr_fan_speed = None
else:
_LOGGER.error(
"Received invalid fan speed: %s. Expected: %s",
fan_speed,
self._fan_speed_list,
self._attr_fan_speed_list,
)
self._fan_speed = None
self._attr_fan_speed = None