diff --git a/homeassistant/components/zha/binary_sensor.py b/homeassistant/components/zha/binary_sensor.py index c32bd5eeb67..9929b43a439 100644 --- a/homeassistant/components/zha/binary_sensor.py +++ b/homeassistant/components/zha/binary_sensor.py @@ -252,29 +252,32 @@ class SinopeLeakStatus(BinarySensor): "_TZE200_htnnfasr", }, ) -class FrostLock(BinarySensor, id_suffix="frost_lock"): +class FrostLock(BinarySensor): """ZHA BinarySensor.""" SENSOR_ATTR = "frost_lock" + _unique_id_suffix = "frost_lock" _attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.LOCK _attr_name: str = "Frost lock" @MULTI_MATCH(cluster_handler_names="ikea_airpurifier") -class ReplaceFilter(BinarySensor, id_suffix="replace_filter"): +class ReplaceFilter(BinarySensor): """ZHA BinarySensor.""" SENSOR_ATTR = "replace_filter" + _unique_id_suffix = "replace_filter" _attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.PROBLEM _attr_entity_category: EntityCategory = EntityCategory.DIAGNOSTIC _attr_name: str = "Replace filter" @MULTI_MATCH(cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"}) -class AqaraPetFeederErrorDetected(BinarySensor, id_suffix="error_detected"): +class AqaraPetFeederErrorDetected(BinarySensor): """ZHA aqara pet feeder error detected binary sensor.""" SENSOR_ATTR = "error_detected" + _unique_id_suffix = "error_detected" _attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.PROBLEM _attr_name: str = "Error detected" @@ -283,28 +286,31 @@ class AqaraPetFeederErrorDetected(BinarySensor, id_suffix="error_detected"): cluster_handler_names="opple_cluster", models={"lumi.plug.mmeu01", "lumi.plug.maeu01"}, ) -class XiaomiPlugConsumerConnected(BinarySensor, id_suffix="consumer_connected"): +class XiaomiPlugConsumerConnected(BinarySensor): """ZHA Xiaomi plug consumer connected binary sensor.""" SENSOR_ATTR = "consumer_connected" + _unique_id_suffix = "consumer_connected" _attr_name: str = "Consumer connected" _attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.PLUG @MULTI_MATCH(cluster_handler_names="opple_cluster", models={"lumi.airrtc.agl001"}) -class AqaraThermostatWindowOpen(BinarySensor, id_suffix="window_open"): +class AqaraThermostatWindowOpen(BinarySensor): """ZHA Aqara thermostat window open binary sensor.""" SENSOR_ATTR = "window_open" + _unique_id_suffix = "window_open" _attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.WINDOW _attr_name: str = "Window open" @MULTI_MATCH(cluster_handler_names="opple_cluster", models={"lumi.airrtc.agl001"}) -class AqaraThermostatValveAlarm(BinarySensor, id_suffix="valve_alarm"): +class AqaraThermostatValveAlarm(BinarySensor): """ZHA Aqara thermostat valve alarm binary sensor.""" SENSOR_ATTR = "valve_alarm" + _unique_id_suffix = "valve_alarm" _attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.PROBLEM _attr_name: str = "Valve alarm" @@ -312,10 +318,11 @@ class AqaraThermostatValveAlarm(BinarySensor, id_suffix="valve_alarm"): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.airrtc.agl001"} ) -class AqaraThermostatCalibrated(BinarySensor, id_suffix="calibrated"): +class AqaraThermostatCalibrated(BinarySensor): """ZHA Aqara thermostat calibrated binary sensor.""" SENSOR_ATTR = "calibrated" + _unique_id_suffix = "calibrated" _attr_entity_category: EntityCategory = EntityCategory.DIAGNOSTIC _attr_name: str = "Calibrated" @@ -323,18 +330,20 @@ class AqaraThermostatCalibrated(BinarySensor, id_suffix="calibrated"): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.airrtc.agl001"} ) -class AqaraThermostatExternalSensor(BinarySensor, id_suffix="sensor"): +class AqaraThermostatExternalSensor(BinarySensor): """ZHA Aqara thermostat external sensor binary sensor.""" SENSOR_ATTR = "sensor" + _unique_id_suffix = "sensor" _attr_entity_category: EntityCategory = EntityCategory.DIAGNOSTIC _attr_name: str = "External sensor" @MULTI_MATCH(cluster_handler_names="opple_cluster", models={"lumi.sensor_smoke.acn03"}) -class AqaraLinkageAlarmState(BinarySensor, id_suffix="linkage_alarm_state"): +class AqaraLinkageAlarmState(BinarySensor): """ZHA Aqara linkage alarm state binary sensor.""" SENSOR_ATTR = "linkage_alarm_state" + _unique_id_suffix = "linkage_alarm_state" _attr_name: str = "Linkage alarm state" _attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.SMOKE diff --git a/homeassistant/components/zha/button.py b/homeassistant/components/zha/button.py index 4114a3dea7c..35fee436ec5 100644 --- a/homeassistant/components/zha/button.py +++ b/homeassistant/components/zha/button.py @@ -145,9 +145,10 @@ class ZHAAttributeButton(ZhaEntity, ButtonEntity): "_TZE200_htnnfasr", }, ) -class FrostLockResetButton(ZHAAttributeButton, id_suffix="reset_frost_lock"): +class FrostLockResetButton(ZHAAttributeButton): """Defines a ZHA frost lock reset button.""" + _unique_id_suffix = "reset_frost_lock" _attribute_name = "frost_lock_reset" _attr_name = "Frost lock reset" _attribute_value = 0 @@ -158,11 +159,10 @@ class FrostLockResetButton(ZHAAttributeButton, id_suffix="reset_frost_lock"): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.motion.ac01"} ) -class NoPresenceStatusResetButton( - ZHAAttributeButton, id_suffix="reset_no_presence_status" -): +class NoPresenceStatusResetButton(ZHAAttributeButton): """Defines a ZHA no presence status reset button.""" + _unique_id_suffix = "reset_no_presence_status" _attribute_name = "reset_no_presence_status" _attr_name = "Presence status reset" _attribute_value = 1 @@ -171,9 +171,10 @@ class NoPresenceStatusResetButton( @MULTI_MATCH(cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"}) -class AqaraPetFeederFeedButton(ZHAAttributeButton, id_suffix="feeding"): +class AqaraPetFeederFeedButton(ZHAAttributeButton): """Defines a feed button for the aqara c1 pet feeder.""" + _unique_id_suffix = "feeding" _attribute_name = "feeding" _attr_name = "Feed" _attribute_value = 1 @@ -182,9 +183,10 @@ class AqaraPetFeederFeedButton(ZHAAttributeButton, id_suffix="feeding"): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.sensor_smoke.acn03"} ) -class AqaraSelfTestButton(ZHAAttributeButton, id_suffix="self_test"): +class AqaraSelfTestButton(ZHAAttributeButton): """Defines a ZHA self-test button for Aqara smoke sensors.""" + _unique_id_suffix = "self_test" _attribute_name = "self_test" _attr_name = "Self-test" _attribute_value = 1 diff --git a/homeassistant/components/zha/entity.py b/homeassistant/components/zha/entity.py index da34b829907..05e1da7c570 100644 --- a/homeassistant/components/zha/entity.py +++ b/homeassistant/components/zha/entity.py @@ -46,15 +46,18 @@ DEFAULT_UPDATE_GROUP_FROM_CHILD_DELAY = 0.5 class BaseZhaEntity(LogMixin, entity.Entity): """A base class for ZHA entities.""" - unique_id_suffix: str | None = None + _unique_id_suffix: str | None = None + """suffix to add to the unique_id of the entity. Used for multi + entities using the same cluster handler/cluster id for the entity.""" + _attr_has_entity_name = True _attr_should_poll = False def __init__(self, unique_id: str, zha_device: ZHADevice, **kwargs: Any) -> None: """Init ZHA entity.""" self._unique_id: str = unique_id - if self.unique_id_suffix: - self._unique_id += f"-{self.unique_id_suffix}" + if self._unique_id_suffix: + self._unique_id += f"-{self._unique_id_suffix}" self._state: Any = None self._extra_state_attributes: dict[str, Any] = {} self._zha_device = zha_device @@ -144,16 +147,6 @@ class ZhaEntity(BaseZhaEntity, RestoreEntity): remove_future: asyncio.Future[Any] - def __init_subclass__(cls, id_suffix: str | None = None, **kwargs: Any) -> None: - """Initialize subclass. - - :param id_suffix: suffix to add to the unique_id of the entity. Used for multi - entities using the same cluster handler/cluster id for the entity. - """ - super().__init_subclass__(**kwargs) - if id_suffix: - cls.unique_id_suffix = id_suffix - def __init__( self, unique_id: str, diff --git a/homeassistant/components/zha/number.py b/homeassistant/components/zha/number.py index b6876155312..01cfa763cd5 100644 --- a/homeassistant/components/zha/number.py +++ b/homeassistant/components/zha/number.py @@ -452,11 +452,10 @@ class ZHANumberConfigurationEntity(ZhaEntity, NumberEntity): models={"lumi.motion.ac02", "lumi.motion.agl04"}, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class AqaraMotionDetectionInterval( - ZHANumberConfigurationEntity, id_suffix="detection_interval" -): +class AqaraMotionDetectionInterval(ZHANumberConfigurationEntity): """Representation of a ZHA motion detection interval configuration entity.""" + _unique_id_suffix = "detection_interval" _attr_native_min_value: float = 2 _attr_native_max_value: float = 65535 _zcl_attribute: str = "detection_interval" @@ -465,11 +464,10 @@ class AqaraMotionDetectionInterval( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_LEVEL) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class OnOffTransitionTimeConfigurationEntity( - ZHANumberConfigurationEntity, id_suffix="on_off_transition_time" -): +class OnOffTransitionTimeConfigurationEntity(ZHANumberConfigurationEntity): """Representation of a ZHA on off transition time configuration entity.""" + _unique_id_suffix = "on_off_transition_time" _attr_native_min_value: float = 0x0000 _attr_native_max_value: float = 0xFFFF _zcl_attribute: str = "on_off_transition_time" @@ -478,9 +476,10 @@ class OnOffTransitionTimeConfigurationEntity( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_LEVEL) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class OnLevelConfigurationEntity(ZHANumberConfigurationEntity, id_suffix="on_level"): +class OnLevelConfigurationEntity(ZHANumberConfigurationEntity): """Representation of a ZHA on level configuration entity.""" + _unique_id_suffix = "on_level" _attr_native_min_value: float = 0x00 _attr_native_max_value: float = 0xFF _zcl_attribute: str = "on_level" @@ -489,11 +488,10 @@ class OnLevelConfigurationEntity(ZHANumberConfigurationEntity, id_suffix="on_lev @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_LEVEL) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class OnTransitionTimeConfigurationEntity( - ZHANumberConfigurationEntity, id_suffix="on_transition_time" -): +class OnTransitionTimeConfigurationEntity(ZHANumberConfigurationEntity): """Representation of a ZHA on transition time configuration entity.""" + _unique_id_suffix = "on_transition_time" _attr_native_min_value: float = 0x0000 _attr_native_max_value: float = 0xFFFE _zcl_attribute: str = "on_transition_time" @@ -502,11 +500,10 @@ class OnTransitionTimeConfigurationEntity( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_LEVEL) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class OffTransitionTimeConfigurationEntity( - ZHANumberConfigurationEntity, id_suffix="off_transition_time" -): +class OffTransitionTimeConfigurationEntity(ZHANumberConfigurationEntity): """Representation of a ZHA off transition time configuration entity.""" + _unique_id_suffix = "off_transition_time" _attr_native_min_value: float = 0x0000 _attr_native_max_value: float = 0xFFFE _zcl_attribute: str = "off_transition_time" @@ -515,11 +512,10 @@ class OffTransitionTimeConfigurationEntity( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_LEVEL) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class DefaultMoveRateConfigurationEntity( - ZHANumberConfigurationEntity, id_suffix="default_move_rate" -): +class DefaultMoveRateConfigurationEntity(ZHANumberConfigurationEntity): """Representation of a ZHA default move rate configuration entity.""" + _unique_id_suffix = "default_move_rate" _attr_native_min_value: float = 0x00 _attr_native_max_value: float = 0xFE _zcl_attribute: str = "default_move_rate" @@ -528,11 +524,10 @@ class DefaultMoveRateConfigurationEntity( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_LEVEL) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class StartUpCurrentLevelConfigurationEntity( - ZHANumberConfigurationEntity, id_suffix="start_up_current_level" -): +class StartUpCurrentLevelConfigurationEntity(ZHANumberConfigurationEntity): """Representation of a ZHA startup current level configuration entity.""" + _unique_id_suffix = "start_up_current_level" _attr_native_min_value: float = 0x00 _attr_native_max_value: float = 0xFF _zcl_attribute: str = "start_up_current_level" @@ -541,11 +536,10 @@ class StartUpCurrentLevelConfigurationEntity( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_COLOR) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class StartUpColorTemperatureConfigurationEntity( - ZHANumberConfigurationEntity, id_suffix="start_up_color_temperature" -): +class StartUpColorTemperatureConfigurationEntity(ZHANumberConfigurationEntity): """Representation of a ZHA startup color temperature configuration entity.""" + _unique_id_suffix = "start_up_color_temperature" _attr_native_min_value: float = 153 _attr_native_max_value: float = 500 _zcl_attribute: str = "start_up_color_temperature" @@ -572,9 +566,10 @@ class StartUpColorTemperatureConfigurationEntity( }, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class TimerDurationMinutes(ZHANumberConfigurationEntity, id_suffix="timer_duration"): +class TimerDurationMinutes(ZHANumberConfigurationEntity): """Representation of a ZHA timer duration configuration entity.""" + _unique_id_suffix = "timer_duration" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[14] _attr_native_min_value: float = 0x00 @@ -586,9 +581,10 @@ class TimerDurationMinutes(ZHANumberConfigurationEntity, id_suffix="timer_durati @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names="ikea_airpurifier") # pylint: disable-next=hass-invalid-inheritance # needs fixing -class FilterLifeTime(ZHANumberConfigurationEntity, id_suffix="filter_life_time"): +class FilterLifeTime(ZHANumberConfigurationEntity): """Representation of a ZHA filter lifetime configuration entity.""" + _unique_id_suffix = "filter_life_time" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[14] _attr_native_min_value: float = 0x00 @@ -604,9 +600,10 @@ class FilterLifeTime(ZHANumberConfigurationEntity, id_suffix="filter_life_time") models={"ti.router"}, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class TiRouterTransmitPower(ZHANumberConfigurationEntity, id_suffix="transmit_power"): +class TiRouterTransmitPower(ZHANumberConfigurationEntity): """Representation of a ZHA TI transmit power configuration entity.""" + _unique_id_suffix = "transmit_power" _attr_native_min_value: float = -20 _attr_native_max_value: float = 20 _zcl_attribute: str = "transmit_power" @@ -615,11 +612,10 @@ class TiRouterTransmitPower(ZHANumberConfigurationEntity, id_suffix="transmit_po @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliRemoteDimmingUpSpeed( - ZHANumberConfigurationEntity, id_suffix="dimming_speed_up_remote" -): +class InovelliRemoteDimmingUpSpeed(ZHANumberConfigurationEntity): """Inovelli remote dimming up speed configuration entity.""" + _unique_id_suffix = "dimming_speed_up_remote" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[3] _attr_native_min_value: float = 0 @@ -630,9 +626,10 @@ class InovelliRemoteDimmingUpSpeed( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliButtonDelay(ZHANumberConfigurationEntity, id_suffix="button_delay"): +class InovelliButtonDelay(ZHANumberConfigurationEntity): """Inovelli button delay configuration entity.""" + _unique_id_suffix = "dimming_speed_up_local" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[3] _attr_native_min_value: float = 0 @@ -643,11 +640,10 @@ class InovelliButtonDelay(ZHANumberConfigurationEntity, id_suffix="button_delay" @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliLocalDimmingUpSpeed( - ZHANumberConfigurationEntity, id_suffix="dimming_speed_up_local" -): +class InovelliLocalDimmingUpSpeed(ZHANumberConfigurationEntity): """Inovelli local dimming up speed configuration entity.""" + _unique_id_suffix = "dimming_speed_up_local" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[3] _attr_native_min_value: float = 0 @@ -658,11 +654,10 @@ class InovelliLocalDimmingUpSpeed( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliLocalRampRateOffToOn( - ZHANumberConfigurationEntity, id_suffix="ramp_rate_off_to_on_local" -): +class InovelliLocalRampRateOffToOn(ZHANumberConfigurationEntity): """Inovelli off to on local ramp rate configuration entity.""" + _unique_id_suffix = "ramp_rate_off_to_on_local" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[3] _attr_native_min_value: float = 0 @@ -673,11 +668,10 @@ class InovelliLocalRampRateOffToOn( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliRemoteDimmingSpeedOffToOn( - ZHANumberConfigurationEntity, id_suffix="ramp_rate_off_to_on_remote" -): +class InovelliRemoteDimmingSpeedOffToOn(ZHANumberConfigurationEntity): """Inovelli off to on remote ramp rate configuration entity.""" + _unique_id_suffix = "ramp_rate_off_to_on_remote" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[3] _attr_native_min_value: float = 0 @@ -688,11 +682,10 @@ class InovelliRemoteDimmingSpeedOffToOn( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliRemoteDimmingDownSpeed( - ZHANumberConfigurationEntity, id_suffix="dimming_speed_down_remote" -): +class InovelliRemoteDimmingDownSpeed(ZHANumberConfigurationEntity): """Inovelli remote dimming down speed configuration entity.""" + _unique_id_suffix = "dimming_speed_down_remote" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[3] _attr_native_min_value: float = 0 @@ -703,11 +696,10 @@ class InovelliRemoteDimmingDownSpeed( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliLocalDimmingDownSpeed( - ZHANumberConfigurationEntity, id_suffix="dimming_speed_down_local" -): +class InovelliLocalDimmingDownSpeed(ZHANumberConfigurationEntity): """Inovelli local dimming down speed configuration entity.""" + _unique_id_suffix = "dimming_speed_down_local" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[3] _attr_native_min_value: float = 0 @@ -718,11 +710,10 @@ class InovelliLocalDimmingDownSpeed( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliLocalRampRateOnToOff( - ZHANumberConfigurationEntity, id_suffix="ramp_rate_on_to_off_local" -): +class InovelliLocalRampRateOnToOff(ZHANumberConfigurationEntity): """Inovelli local on to off ramp rate configuration entity.""" + _unique_id_suffix = "ramp_rate_on_to_off_local" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[3] _attr_native_min_value: float = 0 @@ -733,11 +724,10 @@ class InovelliLocalRampRateOnToOff( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliRemoteDimmingSpeedOnToOff( - ZHANumberConfigurationEntity, id_suffix="ramp_rate_on_to_off_remote" -): +class InovelliRemoteDimmingSpeedOnToOff(ZHANumberConfigurationEntity): """Inovelli remote on to off ramp rate configuration entity.""" + _unique_id_suffix = "ramp_rate_on_to_off_remote" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[3] _attr_native_min_value: float = 0 @@ -748,11 +738,10 @@ class InovelliRemoteDimmingSpeedOnToOff( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliMinimumLoadDimmingLevel( - ZHANumberConfigurationEntity, id_suffix="minimum_level" -): +class InovelliMinimumLoadDimmingLevel(ZHANumberConfigurationEntity): """Inovelli minimum load dimming level configuration entity.""" + _unique_id_suffix = "minimum_level" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[16] _attr_native_min_value: float = 1 @@ -763,11 +752,10 @@ class InovelliMinimumLoadDimmingLevel( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliMaximumLoadDimmingLevel( - ZHANumberConfigurationEntity, id_suffix="maximum_level" -): +class InovelliMaximumLoadDimmingLevel(ZHANumberConfigurationEntity): """Inovelli maximum load dimming level configuration entity.""" + _unique_id_suffix = "maximum_level" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[16] _attr_native_min_value: float = 2 @@ -778,11 +766,10 @@ class InovelliMaximumLoadDimmingLevel( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliAutoShutoffTimer( - ZHANumberConfigurationEntity, id_suffix="auto_off_timer" -): +class InovelliAutoShutoffTimer(ZHANumberConfigurationEntity): """Inovelli automatic switch shutoff timer configuration entity.""" + _unique_id_suffix = "auto_off_timer" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[14] _attr_native_min_value: float = 0 @@ -793,11 +780,10 @@ class InovelliAutoShutoffTimer( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliLoadLevelIndicatorTimeout( - ZHANumberConfigurationEntity, id_suffix="load_level_indicator_timeout" -): +class InovelliLoadLevelIndicatorTimeout(ZHANumberConfigurationEntity): """Inovelli load level indicator timeout configuration entity.""" + _unique_id_suffix = "load_level_indicator_timeout" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[14] _attr_native_min_value: float = 0 @@ -808,11 +794,10 @@ class InovelliLoadLevelIndicatorTimeout( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliDefaultAllLEDOnColor( - ZHANumberConfigurationEntity, id_suffix="led_color_when_on" -): +class InovelliDefaultAllLEDOnColor(ZHANumberConfigurationEntity): """Inovelli default all led color when on configuration entity.""" + _unique_id_suffix = "led_color_when_on" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[15] _attr_native_min_value: float = 0 @@ -823,11 +808,10 @@ class InovelliDefaultAllLEDOnColor( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliDefaultAllLEDOffColor( - ZHANumberConfigurationEntity, id_suffix="led_color_when_off" -): +class InovelliDefaultAllLEDOffColor(ZHANumberConfigurationEntity): """Inovelli default all led color when off configuration entity.""" + _unique_id_suffix = "led_color_when_off" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[15] _attr_native_min_value: float = 0 @@ -838,11 +822,10 @@ class InovelliDefaultAllLEDOffColor( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliDefaultAllLEDOnIntensity( - ZHANumberConfigurationEntity, id_suffix="led_intensity_when_on" -): +class InovelliDefaultAllLEDOnIntensity(ZHANumberConfigurationEntity): """Inovelli default all led intensity when on configuration entity.""" + _unique_id_suffix = "led_intensity_when_on" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[16] _attr_native_min_value: float = 0 @@ -853,11 +836,10 @@ class InovelliDefaultAllLEDOnIntensity( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliDefaultAllLEDOffIntensity( - ZHANumberConfigurationEntity, id_suffix="led_intensity_when_off" -): +class InovelliDefaultAllLEDOffIntensity(ZHANumberConfigurationEntity): """Inovelli default all led intensity when off configuration entity.""" + _unique_id_suffix = "led_intensity_when_off" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[16] _attr_native_min_value: float = 0 @@ -868,11 +850,10 @@ class InovelliDefaultAllLEDOffIntensity( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliDoubleTapUpLevel( - ZHANumberConfigurationEntity, id_suffix="double_tap_up_level" -): +class InovelliDoubleTapUpLevel(ZHANumberConfigurationEntity): """Inovelli double tap up level configuration entity.""" + _unique_id_suffix = "double_tap_up_level" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[16] _attr_native_min_value: float = 2 @@ -883,11 +864,10 @@ class InovelliDoubleTapUpLevel( @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_INOVELLI) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class InovelliDoubleTapDownLevel( - ZHANumberConfigurationEntity, id_suffix="double_tap_down_level" -): +class InovelliDoubleTapDownLevel(ZHANumberConfigurationEntity): """Inovelli double tap down level configuration entity.""" + _unique_id_suffix = "double_tap_down_level" _attr_entity_category = EntityCategory.CONFIG _attr_icon: str = ICONS[16] _attr_native_min_value: float = 0 @@ -900,9 +880,10 @@ class InovelliDoubleTapDownLevel( cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"} ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class AqaraPetFeederServingSize(ZHANumberConfigurationEntity, id_suffix="serving_size"): +class AqaraPetFeederServingSize(ZHANumberConfigurationEntity): """Aqara pet feeder serving size configuration entity.""" + _unique_id_suffix = "serving_size" _attr_entity_category = EntityCategory.CONFIG _attr_native_min_value: float = 1 _attr_native_max_value: float = 10 @@ -916,11 +897,10 @@ class AqaraPetFeederServingSize(ZHANumberConfigurationEntity, id_suffix="serving cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"} ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class AqaraPetFeederPortionWeight( - ZHANumberConfigurationEntity, id_suffix="portion_weight" -): +class AqaraPetFeederPortionWeight(ZHANumberConfigurationEntity): """Aqara pet feeder portion weight configuration entity.""" + _unique_id_suffix = "portion_weight" _attr_entity_category = EntityCategory.CONFIG _attr_native_min_value: float = 1 _attr_native_max_value: float = 100 @@ -935,11 +915,10 @@ class AqaraPetFeederPortionWeight( cluster_handler_names="opple_cluster", models={"lumi.airrtc.agl001"} ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class AqaraThermostatAwayTemp( - ZHANumberConfigurationEntity, id_suffix="away_preset_temperature" -): +class AqaraThermostatAwayTemp(ZHANumberConfigurationEntity): """Aqara away preset temperature configuration entity.""" + _unique_id_suffix = "away_preset_temperature" _attr_entity_category = EntityCategory.CONFIG _attr_native_min_value: float = 5 _attr_native_max_value: float = 30 diff --git a/homeassistant/components/zha/select.py b/homeassistant/components/zha/select.py index fa2e124fd05..6f7563e2e23 100644 --- a/homeassistant/components/zha/select.py +++ b/homeassistant/components/zha/select.py @@ -117,39 +117,37 @@ class ZHANonZCLSelectEntity(ZHAEnumSelectEntity): @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_IAS_WD) -class ZHADefaultToneSelectEntity( - ZHANonZCLSelectEntity, id_suffix=IasWd.Warning.WarningMode.__name__ -): +class ZHADefaultToneSelectEntity(ZHANonZCLSelectEntity): """Representation of a ZHA default siren tone select entity.""" + _unique_id_suffix = IasWd.Warning.WarningMode.__name__ _enum = IasWd.Warning.WarningMode _attr_name = "Default siren tone" @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_IAS_WD) -class ZHADefaultSirenLevelSelectEntity( - ZHANonZCLSelectEntity, id_suffix=IasWd.Warning.SirenLevel.__name__ -): +class ZHADefaultSirenLevelSelectEntity(ZHANonZCLSelectEntity): """Representation of a ZHA default siren level select entity.""" + _unique_id_suffix = IasWd.Warning.SirenLevel.__name__ _enum = IasWd.Warning.SirenLevel _attr_name = "Default siren level" @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_IAS_WD) -class ZHADefaultStrobeLevelSelectEntity( - ZHANonZCLSelectEntity, id_suffix=IasWd.StrobeLevel.__name__ -): +class ZHADefaultStrobeLevelSelectEntity(ZHANonZCLSelectEntity): """Representation of a ZHA default siren strobe level select entity.""" + _unique_id_suffix = IasWd.StrobeLevel.__name__ _enum = IasWd.StrobeLevel _attr_name = "Default strobe level" @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_IAS_WD) -class ZHADefaultStrobeSelectEntity(ZHANonZCLSelectEntity, id_suffix=Strobe.__name__): +class ZHADefaultStrobeSelectEntity(ZHANonZCLSelectEntity): """Representation of a ZHA default siren strobe select entity.""" + _unique_id_suffix = Strobe.__name__ _enum = Strobe _attr_name = "Default strobe" @@ -230,11 +228,10 @@ class ZCLEnumSelectEntity(ZhaEntity, SelectEntity): @CONFIG_DIAGNOSTIC_MATCH(cluster_handler_names=CLUSTER_HANDLER_ON_OFF) -class ZHAStartupOnOffSelectEntity( - ZCLEnumSelectEntity, id_suffix=OnOff.StartUpOnOff.__name__ -): +class ZHAStartupOnOffSelectEntity(ZCLEnumSelectEntity): """Representation of a ZHA startup onoff select entity.""" + _unique_id_suffix = OnOff.StartUpOnOff.__name__ _select_attr = "start_up_on_off" _enum = OnOff.StartUpOnOff _attr_name = "Start-up behavior" @@ -273,9 +270,10 @@ class TuyaPowerOnState(types.enum8): "_TZE200_9mahtqtg", }, ) -class TuyaPowerOnStateSelectEntity(ZCLEnumSelectEntity, id_suffix="power_on_state"): +class TuyaPowerOnStateSelectEntity(ZCLEnumSelectEntity): """Representation of a ZHA power on state select entity.""" + _unique_id_suffix = "power_on_state" _select_attr = "power_on_state" _enum = TuyaPowerOnState _attr_name = "Power on state" @@ -293,9 +291,10 @@ class TuyaBacklightMode(types.enum8): cluster_handler_names=CLUSTER_HANDLER_ON_OFF, models={"TS011F", "TS0121", "TS0001", "TS0002", "TS0003", "TS0004"}, ) -class TuyaBacklightModeSelectEntity(ZCLEnumSelectEntity, id_suffix="backlight_mode"): +class TuyaBacklightModeSelectEntity(ZCLEnumSelectEntity): """Representation of a ZHA backlight mode select entity.""" + _unique_id_suffix = "backlight_mode" _select_attr = "backlight_mode" _enum = TuyaBacklightMode _attr_name = "Backlight mode" @@ -331,9 +330,10 @@ class MoesBacklightMode(types.enum8): "_TZE200_9mahtqtg", }, ) -class MoesBacklightModeSelectEntity(ZCLEnumSelectEntity, id_suffix="backlight_mode"): +class MoesBacklightModeSelectEntity(ZCLEnumSelectEntity): """Moes devices have a different backlight mode select options.""" + _unique_id_suffix = "backlight_mode" _select_attr = "backlight_mode" _enum = MoesBacklightMode _attr_name = "Backlight mode" @@ -351,9 +351,10 @@ class AqaraMotionSensitivities(types.enum8): cluster_handler_names="opple_cluster", models={"lumi.motion.ac01", "lumi.motion.ac02", "lumi.motion.agl04"}, ) -class AqaraMotionSensitivity(ZCLEnumSelectEntity, id_suffix="motion_sensitivity"): +class AqaraMotionSensitivity(ZCLEnumSelectEntity): """Representation of a ZHA motion sensitivity configuration entity.""" + _unique_id_suffix = "motion_sensitivity" _select_attr = "motion_sensitivity" _enum = AqaraMotionSensitivities _attr_name = "Motion sensitivity" @@ -372,9 +373,10 @@ class HueV1MotionSensitivities(types.enum8): manufacturers={"Philips", "Signify Netherlands B.V."}, models={"SML001"}, ) -class HueV1MotionSensitivity(ZCLEnumSelectEntity, id_suffix="motion_sensitivity"): +class HueV1MotionSensitivity(ZCLEnumSelectEntity): """Representation of a ZHA motion sensitivity configuration entity.""" + _unique_id_suffix = "motion_sensitivity" _select_attr = "sensitivity" _attr_name = "Hue motion sensitivity" _enum = HueV1MotionSensitivities @@ -395,9 +397,10 @@ class HueV2MotionSensitivities(types.enum8): manufacturers={"Philips", "Signify Netherlands B.V."}, models={"SML002", "SML003", "SML004"}, ) -class HueV2MotionSensitivity(ZCLEnumSelectEntity, id_suffix="motion_sensitivity"): +class HueV2MotionSensitivity(ZCLEnumSelectEntity): """Representation of a ZHA motion sensitivity configuration entity.""" + _unique_id_suffix = "motion_sensitivity" _select_attr = "sensitivity" _attr_name = "Hue motion sensitivity" _enum = HueV2MotionSensitivities @@ -413,9 +416,10 @@ class AqaraMonitoringModess(types.enum8): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.motion.ac01"} ) -class AqaraMonitoringMode(ZCLEnumSelectEntity, id_suffix="monitoring_mode"): +class AqaraMonitoringMode(ZCLEnumSelectEntity): """Representation of a ZHA monitoring mode configuration entity.""" + _unique_id_suffix = "monitoring_mode" _select_attr = "monitoring_mode" _enum = AqaraMonitoringModess _attr_name = "Monitoring mode" @@ -432,9 +436,10 @@ class AqaraApproachDistances(types.enum8): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.motion.ac01"} ) -class AqaraApproachDistance(ZCLEnumSelectEntity, id_suffix="approach_distance"): +class AqaraApproachDistance(ZCLEnumSelectEntity): """Representation of a ZHA approach distance configuration entity.""" + _unique_id_suffix = "approach_distance" _select_attr = "approach_distance" _enum = AqaraApproachDistances _attr_name = "Approach distance" @@ -450,9 +455,10 @@ class AqaraE1ReverseDirection(types.enum8): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="window_covering", models={"lumi.curtain.agl001"} ) -class AqaraCurtainMode(ZCLEnumSelectEntity, id_suffix="window_covering_mode"): +class AqaraCurtainMode(ZCLEnumSelectEntity): """Representation of a ZHA curtain mode configuration entity.""" + _unique_id_suffix = "window_covering_mode" _select_attr = "window_covering_mode" _enum = AqaraE1ReverseDirection _attr_name = "Curtain mode" @@ -468,9 +474,10 @@ class InovelliOutputMode(types.enum1): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliOutputModeEntity(ZCLEnumSelectEntity, id_suffix="output_mode"): +class InovelliOutputModeEntity(ZCLEnumSelectEntity): """Inovelli output mode control.""" + _unique_id_suffix = "output_mode" _select_attr = "output_mode" _enum = InovelliOutputMode _attr_name: str = "Output mode" @@ -488,9 +495,10 @@ class InovelliSwitchType(types.enum8): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliSwitchTypeEntity(ZCLEnumSelectEntity, id_suffix="switch_type"): +class InovelliSwitchTypeEntity(ZCLEnumSelectEntity): """Inovelli switch type control.""" + _unique_id_suffix = "switch_type" _select_attr = "switch_type" _enum = InovelliSwitchType _attr_name: str = "Switch type" @@ -506,9 +514,10 @@ class InovelliLedScalingMode(types.enum1): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliLedScalingModeEntity(ZCLEnumSelectEntity, id_suffix="led_scaling_mode"): +class InovelliLedScalingModeEntity(ZCLEnumSelectEntity): """Inovelli led mode control.""" + _unique_id_suffix = "led_scaling_mode" _select_attr = "led_scaling_mode" _enum = InovelliLedScalingMode _attr_name: str = "Led scaling mode" @@ -524,11 +533,10 @@ class InovelliNonNeutralOutput(types.enum1): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliNonNeutralOutputEntity( - ZCLEnumSelectEntity, id_suffix="increased_non_neutral_output" -): +class InovelliNonNeutralOutputEntity(ZCLEnumSelectEntity): """Inovelli non neutral output control.""" + _unique_id_suffix = "increased_non_neutral_output" _select_attr = "increased_non_neutral_output" _enum = InovelliNonNeutralOutput _attr_name: str = "Non neutral output" @@ -544,9 +552,10 @@ class AqaraFeedingMode(types.enum8): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"} ) -class AqaraPetFeederMode(ZCLEnumSelectEntity, id_suffix="feeding_mode"): +class AqaraPetFeederMode(ZCLEnumSelectEntity): """Representation of an Aqara pet feeder mode configuration entity.""" + _unique_id_suffix = "feeding_mode" _select_attr = "feeding_mode" _enum = AqaraFeedingMode _attr_name = "Mode" @@ -564,9 +573,10 @@ class AqaraThermostatPresetMode(types.enum8): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.airrtc.agl001"} ) -class AqaraThermostatPreset(ZCLEnumSelectEntity, id_suffix="preset"): +class AqaraThermostatPreset(ZCLEnumSelectEntity): """Representation of an Aqara thermostat preset configuration entity.""" + _unique_id_suffix = "preset" _select_attr = "preset" _enum = AqaraThermostatPresetMode _attr_name = "Preset" diff --git a/homeassistant/components/zha/sensor.py b/homeassistant/components/zha/sensor.py index b733e5cc3cf..66b422e0d8b 100644 --- a/homeassistant/components/zha/sensor.py +++ b/homeassistant/components/zha/sensor.py @@ -319,12 +319,11 @@ class PolledElectricalMeasurement(ElectricalMeasurement): @MULTI_MATCH(cluster_handler_names=CLUSTER_HANDLER_ELECTRICAL_MEASUREMENT) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class ElectricalMeasurementApparentPower( - ElectricalMeasurement, id_suffix="apparent_power" -): +class ElectricalMeasurementApparentPower(ElectricalMeasurement): """Apparent power measurement.""" SENSOR_ATTR = "apparent_power" + _unique_id_suffix = "apparent_power" _attr_device_class: SensorDeviceClass = SensorDeviceClass.APPARENT_POWER _attr_name: str = "Apparent power" _attr_native_unit_of_measurement = UnitOfApparentPower.VOLT_AMPERE @@ -333,10 +332,11 @@ class ElectricalMeasurementApparentPower( @MULTI_MATCH(cluster_handler_names=CLUSTER_HANDLER_ELECTRICAL_MEASUREMENT) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class ElectricalMeasurementRMSCurrent(ElectricalMeasurement, id_suffix="rms_current"): +class ElectricalMeasurementRMSCurrent(ElectricalMeasurement): """RMS current measurement.""" SENSOR_ATTR = "rms_current" + _unique_id_suffix = "rms_current" _attr_device_class: SensorDeviceClass = SensorDeviceClass.CURRENT _attr_name: str = "RMS current" _attr_native_unit_of_measurement = UnitOfElectricCurrent.AMPERE @@ -345,10 +345,11 @@ class ElectricalMeasurementRMSCurrent(ElectricalMeasurement, id_suffix="rms_curr @MULTI_MATCH(cluster_handler_names=CLUSTER_HANDLER_ELECTRICAL_MEASUREMENT) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class ElectricalMeasurementRMSVoltage(ElectricalMeasurement, id_suffix="rms_voltage"): +class ElectricalMeasurementRMSVoltage(ElectricalMeasurement): """RMS Voltage measurement.""" SENSOR_ATTR = "rms_voltage" + _unique_id_suffix = "rms_voltage" _attr_device_class: SensorDeviceClass = SensorDeviceClass.VOLTAGE _attr_name: str = "RMS voltage" _attr_native_unit_of_measurement = UnitOfElectricPotential.VOLT @@ -357,10 +358,11 @@ class ElectricalMeasurementRMSVoltage(ElectricalMeasurement, id_suffix="rms_volt @MULTI_MATCH(cluster_handler_names=CLUSTER_HANDLER_ELECTRICAL_MEASUREMENT) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class ElectricalMeasurementFrequency(ElectricalMeasurement, id_suffix="ac_frequency"): +class ElectricalMeasurementFrequency(ElectricalMeasurement): """Frequency measurement.""" SENSOR_ATTR = "ac_frequency" + _unique_id_suffix = "ac_frequency" _attr_device_class: SensorDeviceClass = SensorDeviceClass.FREQUENCY _attr_name: str = "AC frequency" _attr_native_unit_of_measurement = UnitOfFrequency.HERTZ @@ -369,10 +371,11 @@ class ElectricalMeasurementFrequency(ElectricalMeasurement, id_suffix="ac_freque @MULTI_MATCH(cluster_handler_names=CLUSTER_HANDLER_ELECTRICAL_MEASUREMENT) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class ElectricalMeasurementPowerFactor(ElectricalMeasurement, id_suffix="power_factor"): +class ElectricalMeasurementPowerFactor(ElectricalMeasurement): """Frequency measurement.""" SENSOR_ATTR = "power_factor" + _unique_id_suffix = "power_factor" _attr_device_class: SensorDeviceClass = SensorDeviceClass.POWER_FACTOR _attr_name: str = "Power factor" _attr_native_unit_of_measurement = PERCENTAGE @@ -499,10 +502,11 @@ class SmartEnergyMetering(Sensor): stop_on_match_group=CLUSTER_HANDLER_SMARTENERGY_METERING, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class SmartEnergySummation(SmartEnergyMetering, id_suffix="summation_delivered"): +class SmartEnergySummation(SmartEnergyMetering): """Smart Energy Metering summation sensor.""" SENSOR_ATTR: int | str = "current_summ_delivered" + _unique_id_suffix = "summation_delivered" _attr_device_class: SensorDeviceClass = SensorDeviceClass.ENERGY _attr_state_class: SensorStateClass = SensorStateClass.TOTAL_INCREASING _attr_name: str = "Summation delivered" @@ -558,12 +562,11 @@ class PolledSmartEnergySummation(SmartEnergySummation): models={"ZLinky_TIC"}, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class Tier1SmartEnergySummation( - PolledSmartEnergySummation, id_suffix="tier1_summation_delivered" -): +class Tier1SmartEnergySummation(PolledSmartEnergySummation): """Tier 1 Smart Energy Metering summation sensor.""" SENSOR_ATTR: int | str = "current_tier1_summ_delivered" + _unique_id_suffix = "tier1_summation_delivered" _attr_name: str = "Tier 1 summation delivered" @@ -572,12 +575,11 @@ class Tier1SmartEnergySummation( models={"ZLinky_TIC"}, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class Tier2SmartEnergySummation( - PolledSmartEnergySummation, id_suffix="tier2_summation_delivered" -): +class Tier2SmartEnergySummation(PolledSmartEnergySummation): """Tier 2 Smart Energy Metering summation sensor.""" SENSOR_ATTR: int | str = "current_tier2_summ_delivered" + _unique_id_suffix = "tier2_summation_delivered" _attr_name: str = "Tier 2 summation delivered" @@ -586,12 +588,11 @@ class Tier2SmartEnergySummation( models={"ZLinky_TIC"}, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class Tier3SmartEnergySummation( - PolledSmartEnergySummation, id_suffix="tier3_summation_delivered" -): +class Tier3SmartEnergySummation(PolledSmartEnergySummation): """Tier 3 Smart Energy Metering summation sensor.""" SENSOR_ATTR: int | str = "current_tier3_summ_delivered" + _unique_id_suffix = "tier3_summation_delivered" _attr_name: str = "Tier 3 summation delivered" @@ -600,12 +601,11 @@ class Tier3SmartEnergySummation( models={"ZLinky_TIC"}, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class Tier4SmartEnergySummation( - PolledSmartEnergySummation, id_suffix="tier4_summation_delivered" -): +class Tier4SmartEnergySummation(PolledSmartEnergySummation): """Tier 4 Smart Energy Metering summation sensor.""" SENSOR_ATTR: int | str = "current_tier4_summ_delivered" + _unique_id_suffix = "tier4_summation_delivered" _attr_name: str = "Tier 4 summation delivered" @@ -614,12 +614,11 @@ class Tier4SmartEnergySummation( models={"ZLinky_TIC"}, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class Tier5SmartEnergySummation( - PolledSmartEnergySummation, id_suffix="tier5_summation_delivered" -): +class Tier5SmartEnergySummation(PolledSmartEnergySummation): """Tier 5 Smart Energy Metering summation sensor.""" SENSOR_ATTR: int | str = "current_tier5_summ_delivered" + _unique_id_suffix = "tier5_summation_delivered" _attr_name: str = "Tier 5 summation delivered" @@ -628,12 +627,11 @@ class Tier5SmartEnergySummation( models={"ZLinky_TIC"}, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class Tier6SmartEnergySummation( - PolledSmartEnergySummation, id_suffix="tier6_summation_delivered" -): +class Tier6SmartEnergySummation(PolledSmartEnergySummation): """Tier 6 Smart Energy Metering summation sensor.""" SENSOR_ATTR: int | str = "current_tier6_summ_delivered" + _unique_id_suffix = "tier6_summation_delivered" _attr_name: str = "Tier 6 summation delivered" @@ -772,9 +770,10 @@ class FormaldehydeConcentration(Sensor): stop_on_match_group=CLUSTER_HANDLER_THERMOSTAT, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class ThermostatHVACAction(Sensor, id_suffix="hvac_action"): +class ThermostatHVACAction(Sensor): """Thermostat HVAC action sensor.""" + _unique_id_suffix = "hvac_action" _attr_name: str = "HVAC action" @classmethod @@ -891,9 +890,11 @@ class SinopeHVACAction(ThermostatHVACAction): @MULTI_MATCH(cluster_handler_names=CLUSTER_HANDLER_BASIC) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class RSSISensor(Sensor, id_suffix="rssi"): +class RSSISensor(Sensor): """RSSI sensor for a device.""" + SENSOR_ATTR = "rssi" + _unique_id_suffix = "rssi" _attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT _attr_device_class: SensorDeviceClass | None = SensorDeviceClass.SIGNAL_STRENGTH _attr_native_unit_of_measurement: str | None = SIGNAL_STRENGTH_DECIBELS_MILLIWATT @@ -901,7 +902,6 @@ class RSSISensor(Sensor, id_suffix="rssi"): _attr_entity_registry_enabled_default = False _attr_should_poll = True # BaseZhaEntity defaults to False _attr_name: str = "RSSI" - unique_id_suffix: str @classmethod def create_entity( @@ -915,7 +915,7 @@ class RSSISensor(Sensor, id_suffix="rssi"): Return entity if it is a supported configuration, otherwise return None """ - key = f"{CLUSTER_HANDLER_BASIC}_{cls.unique_id_suffix}" + key = f"{CLUSTER_HANDLER_BASIC}_{cls._unique_id_suffix}" if ZHA_ENTITIES.prevent_entity_creation(Platform.SENSOR, zha_device.ieee, key): return None return cls(unique_id, zha_device, cluster_handlers, **kwargs) @@ -923,14 +923,16 @@ class RSSISensor(Sensor, id_suffix="rssi"): @property def native_value(self) -> StateType: """Return the state of the entity.""" - return getattr(self._zha_device.device, self.unique_id_suffix) + return getattr(self._zha_device.device, self.SENSOR_ATTR) @MULTI_MATCH(cluster_handler_names=CLUSTER_HANDLER_BASIC) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class LQISensor(RSSISensor, id_suffix="lqi"): +class LQISensor(RSSISensor): """LQI sensor for a device.""" + SENSOR_ATTR = "lqi" + _unique_id_suffix = "lqi" _attr_name: str = "LQI" _attr_device_class = None _attr_native_unit_of_measurement = None @@ -943,10 +945,11 @@ class LQISensor(RSSISensor, id_suffix="lqi"): }, ) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class TimeLeft(Sensor, id_suffix="time_left"): +class TimeLeft(Sensor): """Sensor that displays time left value.""" SENSOR_ATTR = "timer_time_left" + _unique_id_suffix = "time_left" _attr_device_class: SensorDeviceClass = SensorDeviceClass.DURATION _attr_icon = "mdi:timer" _attr_name: str = "Time left" @@ -955,10 +958,11 @@ class TimeLeft(Sensor, id_suffix="time_left"): @MULTI_MATCH(cluster_handler_names="ikea_airpurifier") # pylint: disable-next=hass-invalid-inheritance # needs fixing -class IkeaDeviceRunTime(Sensor, id_suffix="device_run_time"): +class IkeaDeviceRunTime(Sensor): """Sensor that displays device run time (in minutes).""" SENSOR_ATTR = "device_run_time" + _unique_id_suffix = "device_run_time" _attr_device_class: SensorDeviceClass = SensorDeviceClass.DURATION _attr_icon = "mdi:timer" _attr_name: str = "Device run time" @@ -968,10 +972,11 @@ class IkeaDeviceRunTime(Sensor, id_suffix="device_run_time"): @MULTI_MATCH(cluster_handler_names="ikea_airpurifier") # pylint: disable-next=hass-invalid-inheritance # needs fixing -class IkeaFilterRunTime(Sensor, id_suffix="filter_run_time"): +class IkeaFilterRunTime(Sensor): """Sensor that displays run time of the current filter (in minutes).""" SENSOR_ATTR = "filter_run_time" + _unique_id_suffix = "filter_run_time" _attr_device_class: SensorDeviceClass = SensorDeviceClass.DURATION _attr_icon = "mdi:timer" _attr_name: str = "Filter run time" @@ -988,10 +993,11 @@ class AqaraFeedingSource(types.enum8): @MULTI_MATCH(cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"}) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class AqaraPetFeederLastFeedingSource(Sensor, id_suffix="last_feeding_source"): +class AqaraPetFeederLastFeedingSource(Sensor): """Sensor that displays the last feeding source of pet feeder.""" SENSOR_ATTR = "last_feeding_source" + _unique_id_suffix = "last_feeding_source" _attr_name: str = "Last feeding source" _attr_icon = "mdi:devices" @@ -1002,20 +1008,22 @@ class AqaraPetFeederLastFeedingSource(Sensor, id_suffix="last_feeding_source"): @MULTI_MATCH(cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"}) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class AqaraPetFeederLastFeedingSize(Sensor, id_suffix="last_feeding_size"): +class AqaraPetFeederLastFeedingSize(Sensor): """Sensor that displays the last feeding size of the pet feeder.""" SENSOR_ATTR = "last_feeding_size" + _unique_id_suffix = "last_feeding_size" _attr_name: str = "Last feeding size" _attr_icon: str = "mdi:counter" @MULTI_MATCH(cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"}) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class AqaraPetFeederPortionsDispensed(Sensor, id_suffix="portions_dispensed"): +class AqaraPetFeederPortionsDispensed(Sensor): """Sensor that displays the number of portions dispensed by the pet feeder.""" SENSOR_ATTR = "portions_dispensed" + _unique_id_suffix = "portions_dispensed" _attr_name: str = "Portions dispensed today" _attr_state_class: SensorStateClass = SensorStateClass.TOTAL_INCREASING _attr_icon: str = "mdi:counter" @@ -1023,10 +1031,11 @@ class AqaraPetFeederPortionsDispensed(Sensor, id_suffix="portions_dispensed"): @MULTI_MATCH(cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"}) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class AqaraPetFeederWeightDispensed(Sensor, id_suffix="weight_dispensed"): +class AqaraPetFeederWeightDispensed(Sensor): """Sensor that displays the weight dispensed by the pet feeder.""" SENSOR_ATTR = "weight_dispensed" + _unique_id_suffix = "weight_dispensed" _attr_name: str = "Weight dispensed today" _attr_native_unit_of_measurement = UnitOfMass.GRAMS _attr_state_class: SensorStateClass = SensorStateClass.TOTAL_INCREASING @@ -1035,10 +1044,11 @@ class AqaraPetFeederWeightDispensed(Sensor, id_suffix="weight_dispensed"): @MULTI_MATCH(cluster_handler_names="opple_cluster", models={"lumi.sensor_smoke.acn03"}) # pylint: disable-next=hass-invalid-inheritance # needs fixing -class AqaraSmokeDensityDbm(Sensor, id_suffix="smoke_density_dbm"): +class AqaraSmokeDensityDbm(Sensor): """Sensor that displays the smoke density of an Aqara smoke sensor in dB/m.""" SENSOR_ATTR = "smoke_density_dbm" + _unique_id_suffix = "smoke_density_dbm" _attr_name: str = "Smoke density" _attr_native_unit_of_measurement = "dB/m" _attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT diff --git a/homeassistant/components/zha/switch.py b/homeassistant/components/zha/switch.py index eff8f727c1c..6224eb02598 100644 --- a/homeassistant/components/zha/switch.py +++ b/homeassistant/components/zha/switch.py @@ -270,11 +270,10 @@ class ZHASwitchConfigurationEntity(ZhaEntity, SwitchEntity): "_TZE200_b6wax7g0", }, ) -class OnOffWindowDetectionFunctionConfigurationEntity( - ZHASwitchConfigurationEntity, id_suffix="on_off_window_opened_detection" -): +class OnOffWindowDetectionFunctionConfigurationEntity(ZHASwitchConfigurationEntity): """Representation of a ZHA window detection configuration entity.""" + _unique_id_suffix = "on_off_window_opened_detection" _zcl_attribute: str = "window_detection_function" _zcl_inverter_attribute: str = "window_detection_function_inverter" _attr_name: str = "Invert window detection" @@ -283,11 +282,10 @@ class OnOffWindowDetectionFunctionConfigurationEntity( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.motion.ac02"} ) -class P1MotionTriggerIndicatorSwitch( - ZHASwitchConfigurationEntity, id_suffix="trigger_indicator" -): +class P1MotionTriggerIndicatorSwitch(ZHASwitchConfigurationEntity): """Representation of a ZHA motion triggering configuration entity.""" + _unique_id_suffix = "trigger_indicator" _zcl_attribute: str = "trigger_indicator" _attr_name = "LED trigger indicator" @@ -296,11 +294,10 @@ class P1MotionTriggerIndicatorSwitch( cluster_handler_names="opple_cluster", models={"lumi.plug.mmeu01", "lumi.plug.maeu01"}, ) -class XiaomiPlugPowerOutageMemorySwitch( - ZHASwitchConfigurationEntity, id_suffix="power_outage_memory" -): +class XiaomiPlugPowerOutageMemorySwitch(ZHASwitchConfigurationEntity): """Representation of a ZHA power outage memory configuration entity.""" + _unique_id_suffix = "power_outage_memory" _zcl_attribute: str = "power_outage_memory" _attr_name = "Power outage memory" @@ -310,11 +307,10 @@ class XiaomiPlugPowerOutageMemorySwitch( manufacturers={"Philips", "Signify Netherlands B.V."}, models={"SML001", "SML002", "SML003", "SML004"}, ) -class HueMotionTriggerIndicatorSwitch( - ZHASwitchConfigurationEntity, id_suffix="trigger_indicator" -): +class HueMotionTriggerIndicatorSwitch(ZHASwitchConfigurationEntity): """Representation of a ZHA motion triggering configuration entity.""" + _unique_id_suffix = "trigger_indicator" _zcl_attribute: str = "trigger_indicator" _attr_name = "LED trigger indicator" @@ -323,9 +319,10 @@ class HueMotionTriggerIndicatorSwitch( cluster_handler_names="ikea_airpurifier", models={"STARKVIND Air purifier", "STARKVIND Air purifier table"}, ) -class ChildLock(ZHASwitchConfigurationEntity, id_suffix="child_lock"): +class ChildLock(ZHASwitchConfigurationEntity): """ZHA BinarySensor.""" + _unique_id_suffix = "child_lock" _zcl_attribute: str = "child_lock" _attr_name = "Child lock" @@ -334,9 +331,10 @@ class ChildLock(ZHASwitchConfigurationEntity, id_suffix="child_lock"): cluster_handler_names="ikea_airpurifier", models={"STARKVIND Air purifier", "STARKVIND Air purifier table"}, ) -class DisableLed(ZHASwitchConfigurationEntity, id_suffix="disable_led"): +class DisableLed(ZHASwitchConfigurationEntity): """ZHA BinarySensor.""" + _unique_id_suffix = "disable_led" _zcl_attribute: str = "disable_led" _attr_name = "Disable LED" @@ -344,9 +342,10 @@ class DisableLed(ZHASwitchConfigurationEntity, id_suffix="disable_led"): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliInvertSwitch(ZHASwitchConfigurationEntity, id_suffix="invert_switch"): +class InovelliInvertSwitch(ZHASwitchConfigurationEntity): """Inovelli invert switch control.""" + _unique_id_suffix = "invert_switch" _zcl_attribute: str = "invert_switch" _attr_name: str = "Invert switch" @@ -354,9 +353,10 @@ class InovelliInvertSwitch(ZHASwitchConfigurationEntity, id_suffix="invert_switc @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliSmartBulbMode(ZHASwitchConfigurationEntity, id_suffix="smart_bulb_mode"): +class InovelliSmartBulbMode(ZHASwitchConfigurationEntity): """Inovelli smart bulb mode control.""" + _unique_id_suffix = "smart_bulb_mode" _zcl_attribute: str = "smart_bulb_mode" _attr_name: str = "Smart bulb mode" @@ -364,11 +364,10 @@ class InovelliSmartBulbMode(ZHASwitchConfigurationEntity, id_suffix="smart_bulb_ @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliDoubleTapUpEnabled( - ZHASwitchConfigurationEntity, id_suffix="double_tap_up_enabled" -): +class InovelliDoubleTapUpEnabled(ZHASwitchConfigurationEntity): """Inovelli double tap up enabled.""" + _unique_id_suffix = "double_tap_up_enabled" _zcl_attribute: str = "double_tap_up_enabled" _attr_name: str = "Double tap up enabled" @@ -376,11 +375,10 @@ class InovelliDoubleTapUpEnabled( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliDoubleTapDownEnabled( - ZHASwitchConfigurationEntity, id_suffix="double_tap_down_enabled" -): +class InovelliDoubleTapDownEnabled(ZHASwitchConfigurationEntity): """Inovelli double tap down enabled.""" + _unique_id_suffix = "double_tap_down_enabled" _zcl_attribute: str = "double_tap_down_enabled" _attr_name: str = "Double tap down enabled" @@ -388,11 +386,10 @@ class InovelliDoubleTapDownEnabled( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliAuxSwitchScenes( - ZHASwitchConfigurationEntity, id_suffix="aux_switch_scenes" -): +class InovelliAuxSwitchScenes(ZHASwitchConfigurationEntity): """Inovelli unique aux switch scenes.""" + _unique_id_suffix = "aux_switch_scenes" _zcl_attribute: str = "aux_switch_scenes" _attr_name: str = "Aux switch scenes" @@ -400,11 +397,10 @@ class InovelliAuxSwitchScenes( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliBindingOffToOnSyncLevel( - ZHASwitchConfigurationEntity, id_suffix="binding_off_to_on_sync_level" -): +class InovelliBindingOffToOnSyncLevel(ZHASwitchConfigurationEntity): """Inovelli send move to level with on/off to bound devices.""" + _unique_id_suffix = "binding_off_to_on_sync_level" _zcl_attribute: str = "binding_off_to_on_sync_level" _attr_name: str = "Binding off to on sync level" @@ -412,11 +408,10 @@ class InovelliBindingOffToOnSyncLevel( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliLocalProtection( - ZHASwitchConfigurationEntity, id_suffix="local_protection" -): +class InovelliLocalProtection(ZHASwitchConfigurationEntity): """Inovelli local protection control.""" + _unique_id_suffix = "local_protection" _zcl_attribute: str = "local_protection" _attr_name: str = "Local protection" @@ -424,9 +419,10 @@ class InovelliLocalProtection( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliOnOffLEDMode(ZHASwitchConfigurationEntity, id_suffix="on_off_led_mode"): +class InovelliOnOffLEDMode(ZHASwitchConfigurationEntity): """Inovelli only 1 LED mode control.""" + _unique_id_suffix = "on_off_led_mode" _zcl_attribute: str = "on_off_led_mode" _attr_name: str = "Only 1 LED mode" @@ -434,11 +430,10 @@ class InovelliOnOffLEDMode(ZHASwitchConfigurationEntity, id_suffix="on_off_led_m @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliFirmwareProgressLED( - ZHASwitchConfigurationEntity, id_suffix="firmware_progress_led" -): +class InovelliFirmwareProgressLED(ZHASwitchConfigurationEntity): """Inovelli firmware progress LED control.""" + _unique_id_suffix = "firmware_progress_led" _zcl_attribute: str = "firmware_progress_led" _attr_name: str = "Firmware progress LED" @@ -446,11 +441,10 @@ class InovelliFirmwareProgressLED( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliRelayClickInOnOffMode( - ZHASwitchConfigurationEntity, id_suffix="relay_click_in_on_off_mode" -): +class InovelliRelayClickInOnOffMode(ZHASwitchConfigurationEntity): """Inovelli relay click in on off mode control.""" + _unique_id_suffix = "relay_click_in_on_off_mode" _zcl_attribute: str = "relay_click_in_on_off_mode" _attr_name: str = "Disable relay click in on off mode" @@ -458,11 +452,10 @@ class InovelliRelayClickInOnOffMode( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names=CLUSTER_HANDLER_INOVELLI, ) -class InovelliDisableDoubleTapClearNotificationsMode( - ZHASwitchConfigurationEntity, id_suffix="disable_clear_notifications_double_tap" -): +class InovelliDisableDoubleTapClearNotificationsMode(ZHASwitchConfigurationEntity): """Inovelli disable clear notifications double tap control.""" + _unique_id_suffix = "disable_clear_notifications_double_tap" _zcl_attribute: str = "disable_clear_notifications_double_tap" _attr_name: str = "Disable config 2x tap to clear notifications" @@ -470,11 +463,10 @@ class InovelliDisableDoubleTapClearNotificationsMode( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"} ) -class AqaraPetFeederLEDIndicator( - ZHASwitchConfigurationEntity, id_suffix="disable_led_indicator" -): +class AqaraPetFeederLEDIndicator(ZHASwitchConfigurationEntity): """Representation of a LED indicator configuration entity.""" + _unique_id_suffix = "disable_led_indicator" _zcl_attribute: str = "disable_led_indicator" _attr_name = "LED indicator" _force_inverted = True @@ -484,9 +476,10 @@ class AqaraPetFeederLEDIndicator( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"aqara.feeder.acn001"} ) -class AqaraPetFeederChildLock(ZHASwitchConfigurationEntity, id_suffix="child_lock"): +class AqaraPetFeederChildLock(ZHASwitchConfigurationEntity): """Representation of a child lock configuration entity.""" + _unique_id_suffix = "child_lock" _zcl_attribute: str = "child_lock" _attr_name = "Child lock" _attr_icon: str = "mdi:account-lock" @@ -496,9 +489,10 @@ class AqaraPetFeederChildLock(ZHASwitchConfigurationEntity, id_suffix="child_loc cluster_handler_names=CLUSTER_HANDLER_ON_OFF, models={"TS011F"}, ) -class TuyaChildLockSwitch(ZHASwitchConfigurationEntity, id_suffix="child_lock"): +class TuyaChildLockSwitch(ZHASwitchConfigurationEntity): """Representation of a child lock configuration entity.""" + _unique_id_suffix = "child_lock" _zcl_attribute: str = "child_lock" _attr_name = "Child lock" _attr_icon: str = "mdi:account-lock" @@ -507,11 +501,10 @@ class TuyaChildLockSwitch(ZHASwitchConfigurationEntity, id_suffix="child_lock"): @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.airrtc.agl001"} ) -class AqaraThermostatWindowDetection( - ZHASwitchConfigurationEntity, id_suffix="window_detection" -): +class AqaraThermostatWindowDetection(ZHASwitchConfigurationEntity): """Representation of an Aqara thermostat window detection configuration entity.""" + _unique_id_suffix = "window_detection" _zcl_attribute: str = "window_detection" _attr_name = "Window detection" @@ -519,11 +512,10 @@ class AqaraThermostatWindowDetection( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.airrtc.agl001"} ) -class AqaraThermostatValveDetection( - ZHASwitchConfigurationEntity, id_suffix="valve_detection" -): +class AqaraThermostatValveDetection(ZHASwitchConfigurationEntity): """Representation of an Aqara thermostat valve detection configuration entity.""" + _unique_id_suffix = "valve_detection" _zcl_attribute: str = "valve_detection" _attr_name = "Valve detection" @@ -531,9 +523,10 @@ class AqaraThermostatValveDetection( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.airrtc.agl001"} ) -class AqaraThermostatChildLock(ZHASwitchConfigurationEntity, id_suffix="child_lock"): +class AqaraThermostatChildLock(ZHASwitchConfigurationEntity): """Representation of an Aqara thermostat child lock configuration entity.""" + _unique_id_suffix = "child_lock" _zcl_attribute: str = "child_lock" _attr_name = "Child lock" _attr_icon: str = "mdi:account-lock" @@ -542,11 +535,10 @@ class AqaraThermostatChildLock(ZHASwitchConfigurationEntity, id_suffix="child_lo @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.sensor_smoke.acn03"} ) -class AqaraHeartbeatIndicator( - ZHASwitchConfigurationEntity, id_suffix="heartbeat_indicator" -): +class AqaraHeartbeatIndicator(ZHASwitchConfigurationEntity): """Representation of a heartbeat indicator configuration entity for Aqara smoke sensors.""" + _unique_id_suffix = "heartbeat_indicator" _zcl_attribute: str = "heartbeat_indicator" _attr_name = "Heartbeat indicator" _attr_icon: str = "mdi:heart-flash" @@ -555,9 +547,10 @@ class AqaraHeartbeatIndicator( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.sensor_smoke.acn03"} ) -class AqaraLinkageAlarm(ZHASwitchConfigurationEntity, id_suffix="linkage_alarm"): +class AqaraLinkageAlarm(ZHASwitchConfigurationEntity): """Representation of a linkage alarm configuration entity for Aqara smoke sensors.""" + _unique_id_suffix = "linkage_alarm" _zcl_attribute: str = "linkage_alarm" _attr_name = "Linkage alarm" _attr_icon: str = "mdi:shield-link-variant" @@ -566,11 +559,10 @@ class AqaraLinkageAlarm(ZHASwitchConfigurationEntity, id_suffix="linkage_alarm") @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.sensor_smoke.acn03"} ) -class AqaraBuzzerManualMute( - ZHASwitchConfigurationEntity, id_suffix="buzzer_manual_mute" -): +class AqaraBuzzerManualMute(ZHASwitchConfigurationEntity): """Representation of a buzzer manual mute configuration entity for Aqara smoke sensors.""" + _unique_id_suffix = "buzzer_manual_mute" _zcl_attribute: str = "buzzer_manual_mute" _attr_name = "Buzzer manual mute" _attr_icon: str = "mdi:volume-off" @@ -579,11 +571,10 @@ class AqaraBuzzerManualMute( @CONFIG_DIAGNOSTIC_MATCH( cluster_handler_names="opple_cluster", models={"lumi.sensor_smoke.acn03"} ) -class AqaraBuzzerManualAlarm( - ZHASwitchConfigurationEntity, id_suffix="buzzer_manual_alarm" -): +class AqaraBuzzerManualAlarm(ZHASwitchConfigurationEntity): """Representation of a buzzer manual mute configuration entity for Aqara smoke sensors.""" + _unique_id_suffix = "buzzer_manual_alarm" _zcl_attribute: str = "buzzer_manual_alarm" _attr_name = "Buzzer manual alarm" _attr_icon: str = "mdi:bullhorn"