diff --git a/homeassistant/components/ads/__init__.py b/homeassistant/components/ads/__init__.py index b17a066eba7..d59d1e5aa0c 100644 --- a/homeassistant/components/ads/__init__.py +++ b/homeassistant/components/ads/__init__.py @@ -268,15 +268,17 @@ class AdsHub: class AdsEntity(Entity): """Representation of ADS entity.""" + _attr_should_poll = False + def __init__(self, ads_hub, name, ads_var): """Initialize ADS binary sensor.""" - self._name = name - self._unique_id = ads_var self._state_dict = {} self._state_dict[STATE_KEY_STATE] = None self._ads_hub = ads_hub self._ads_var = ads_var self._event = None + self._attr_unique_id = ads_var + self._attr_name = name async def async_initialize_device( self, ads_var, plctype, state_key=STATE_KEY_STATE, factor=None @@ -311,21 +313,6 @@ class AdsEntity(Entity): _LOGGER.debug("Variable %s: Timeout during first update", ads_var) @property - def name(self): - """Return the default name of the binary sensor.""" - return self._name - - @property - def unique_id(self): - """Return an unique identifier for this entity.""" - return self._unique_id - - @property - def should_poll(self): - """Return False because entity pushes its state to HA.""" - return False - - @property - def available(self): + def available(self) -> bool: """Return False if state has not been updated yet.""" return self._state_dict[STATE_KEY_STATE] is not None diff --git a/homeassistant/components/ads/binary_sensor.py b/homeassistant/components/ads/binary_sensor.py index 0cf89dfa7cc..fda2aae3d5b 100644 --- a/homeassistant/components/ads/binary_sensor.py +++ b/homeassistant/components/ads/binary_sensor.py @@ -40,18 +40,13 @@ class AdsBinarySensor(AdsEntity, BinarySensorEntity): def __init__(self, ads_hub, name, ads_var, device_class): """Initialize ADS binary sensor.""" super().__init__(ads_hub, name, ads_var) - self._device_class = device_class or DEVICE_CLASS_MOVING + self._attr_device_class = device_class or DEVICE_CLASS_MOVING async def async_added_to_hass(self): """Register device notification.""" await self.async_initialize_device(self._ads_var, self._ads_hub.PLCTYPE_BOOL) @property - def is_on(self): + def is_on(self) -> bool: """Return True if the entity is on.""" return self._state_dict[STATE_KEY_STATE] - - @property - def device_class(self): - """Return the device class.""" - return self._device_class diff --git a/homeassistant/components/ads/cover.py b/homeassistant/components/ads/cover.py index 5348873c7d0..0cd0264cb50 100644 --- a/homeassistant/components/ads/cover.py +++ b/homeassistant/components/ads/cover.py @@ -105,7 +105,12 @@ class AdsCover(AdsEntity, CoverEntity): self._ads_var_open = ads_var_open self._ads_var_close = ads_var_close self._ads_var_stop = ads_var_stop - self._device_class = device_class + self._attr_device_class = device_class + self._attr_supported_features = SUPPORT_OPEN | SUPPORT_CLOSE + if ads_var_stop is not None: + self._attr_supported_features |= SUPPORT_STOP + if ads_var_pos_set is not None: + self._attr_supported_features |= SUPPORT_SET_POSITION async def async_added_to_hass(self): """Register device notification.""" @@ -119,11 +124,6 @@ class AdsCover(AdsEntity, CoverEntity): self._ads_var_position, self._ads_hub.PLCTYPE_BYTE, STATE_KEY_POSITION ) - @property - def device_class(self): - """Return the class of this cover.""" - return self._device_class - @property def is_closed(self): """Return if the cover is closed.""" @@ -138,19 +138,6 @@ class AdsCover(AdsEntity, CoverEntity): """Return current position of cover.""" return self._state_dict[STATE_KEY_POSITION] - @property - def supported_features(self): - """Flag supported features.""" - supported_features = SUPPORT_OPEN | SUPPORT_CLOSE - - if self._ads_var_stop is not None: - supported_features |= SUPPORT_STOP - - if self._ads_var_pos_set is not None: - supported_features |= SUPPORT_SET_POSITION - - return supported_features - def stop_cover(self, **kwargs): """Fire the stop action.""" if self._ads_var_stop: @@ -185,7 +172,7 @@ class AdsCover(AdsEntity, CoverEntity): self.set_cover_position(position=0) @property - def available(self): + def available(self) -> bool: """Return False if state has not been updated yet.""" if self._ads_var is not None or self._ads_var_position is not None: return ( diff --git a/homeassistant/components/ads/light.py b/homeassistant/components/ads/light.py index 80ee5df0c4b..fd6b5e66482 100644 --- a/homeassistant/components/ads/light.py +++ b/homeassistant/components/ads/light.py @@ -1,4 +1,6 @@ """Support for ADS light sources.""" +from __future__ import annotations + import voluptuous as vol from homeassistant.components.light import ( @@ -48,6 +50,8 @@ class AdsLight(AdsEntity, LightEntity): super().__init__(ads_hub, name, ads_var_enable) self._state_dict[STATE_KEY_BRIGHTNESS] = None self._ads_var_brightness = ads_var_brightness + if ads_var_brightness is not None: + self._attr_supported_features = SUPPORT_BRIGHTNESS async def async_added_to_hass(self): """Register device notification.""" @@ -61,19 +65,12 @@ class AdsLight(AdsEntity, LightEntity): ) @property - def brightness(self): + def brightness(self) -> int | None: """Return the brightness of the light (0..255).""" return self._state_dict[STATE_KEY_BRIGHTNESS] @property - def supported_features(self): - """Flag supported features.""" - if self._ads_var_brightness is not None: - return SUPPORT_BRIGHTNESS - return 0 - - @property - def is_on(self): + def is_on(self) -> bool: """Return True if the entity is on.""" return self._state_dict[STATE_KEY_STATE] diff --git a/homeassistant/components/ads/sensor.py b/homeassistant/components/ads/sensor.py index 933950dcf1b..fe68c4c860b 100644 --- a/homeassistant/components/ads/sensor.py +++ b/homeassistant/components/ads/sensor.py @@ -5,6 +5,7 @@ from homeassistant.components import ads from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity from homeassistant.const import CONF_NAME, CONF_UNIT_OF_MEASUREMENT import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.typing import StateType from . import CONF_ADS_FACTOR, CONF_ADS_TYPE, CONF_ADS_VAR, STATE_KEY_STATE, AdsEntity @@ -49,7 +50,7 @@ class AdsSensor(AdsEntity, SensorEntity): def __init__(self, ads_hub, ads_var, ads_type, name, unit_of_measurement, factor): """Initialize AdsSensor entity.""" super().__init__(ads_hub, name, ads_var) - self._unit_of_measurement = unit_of_measurement + self._attr_unit_of_measurement = unit_of_measurement self._ads_type = ads_type self._factor = factor @@ -63,11 +64,6 @@ class AdsSensor(AdsEntity, SensorEntity): ) @property - def state(self): + def state(self) -> StateType: """Return the state of the device.""" return self._state_dict[STATE_KEY_STATE] - - @property - def unit_of_measurement(self): - """Return the unit of measurement.""" - return self._unit_of_measurement diff --git a/homeassistant/components/ads/switch.py b/homeassistant/components/ads/switch.py index 9f807899e54..4888c876e1d 100644 --- a/homeassistant/components/ads/switch.py +++ b/homeassistant/components/ads/switch.py @@ -35,7 +35,7 @@ class AdsSwitch(AdsEntity, SwitchEntity): await self.async_initialize_device(self._ads_var, self._ads_hub.PLCTYPE_BOOL) @property - def is_on(self): + def is_on(self) -> bool: """Return True if the entity is on.""" return self._state_dict[STATE_KEY_STATE]