diff --git a/homeassistant/components/vizio/binary_sensor.py b/homeassistant/components/vizio/binary_sensor.py index 024e592feb4b..c84553aad08c 100644 --- a/homeassistant/components/vizio/binary_sensor.py +++ b/homeassistant/components/vizio/binary_sensor.py @@ -2,7 +2,7 @@ from collections.abc import Callable from dataclasses import dataclass -from typing import TYPE_CHECKING, override +from typing import override from vizaio import ChargingStatus @@ -13,12 +13,10 @@ from homeassistant.components.binary_sensor import ( ) from homeassistant.const import EntityCategory from homeassistant.core import HomeAssistant -from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from homeassistant.helpers.update_coordinator import CoordinatorEntity -from .const import DOMAIN -from .coordinator import VizioConfigEntry, VizioDeviceCoordinator, VizioDeviceData +from .coordinator import VizioConfigEntry, VizioDeviceData +from .entity import VizioDescriptionEntity PARALLEL_UPDATES = 0 @@ -57,33 +55,15 @@ async def async_setup_entry( return async_add_entities( - VizioBinarySensor(config_entry, coordinator, description) - for description in BINARY_SENSORS + VizioBinarySensor(config_entry, description) for description in BINARY_SENSORS ) -class VizioBinarySensor(CoordinatorEntity[VizioDeviceCoordinator], BinarySensorEntity): +class VizioBinarySensor(VizioDescriptionEntity, BinarySensorEntity): """Binary sensor entity for battery-powered Vizio SmartCast devices.""" - _attr_has_entity_name = True entity_description: VizioBinarySensorEntityDescription - def __init__( - self, - config_entry: VizioConfigEntry, - coordinator: VizioDeviceCoordinator, - description: VizioBinarySensorEntityDescription, - ) -> None: - """Initialize the binary sensor entity.""" - super().__init__(coordinator) - self.entity_description = description - unique_id = config_entry.unique_id - # Guard against config entries missing unique_id, which should never happen - if TYPE_CHECKING: - assert unique_id is not None - self._attr_unique_id = f"{unique_id}_{description.key}" - self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, unique_id)}) - @property @override def is_on(self) -> bool | None: diff --git a/homeassistant/components/vizio/entity.py b/homeassistant/components/vizio/entity.py index e6cea16fe6e4..546829441346 100644 --- a/homeassistant/components/vizio/entity.py +++ b/homeassistant/components/vizio/entity.py @@ -3,6 +3,7 @@ from typing import TYPE_CHECKING from homeassistant.helpers.device_registry import DeviceInfo +from homeassistant.helpers.entity import EntityDescription from homeassistant.helpers.update_coordinator import CoordinatorEntity from .const import DOMAIN @@ -24,3 +25,15 @@ class VizioEntity(CoordinatorEntity[VizioDeviceCoordinator]): assert unique_id is not None self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, unique_id)}) self._device = coordinator.device + + +class VizioDescriptionEntity(VizioEntity): + """Base class for Vizio entities described by an entity description.""" + + def __init__( + self, config_entry: VizioConfigEntry, description: EntityDescription + ) -> None: + """Initialize the Vizio entity from its description.""" + super().__init__(config_entry) + self.entity_description = description + self._attr_unique_id = f"{self._attr_unique_id}_{description.key}" diff --git a/homeassistant/components/vizio/sensor.py b/homeassistant/components/vizio/sensor.py index a46b1acb935b..e2f1d6e02efb 100644 --- a/homeassistant/components/vizio/sensor.py +++ b/homeassistant/components/vizio/sensor.py @@ -2,7 +2,7 @@ from collections.abc import Callable from dataclasses import dataclass -from typing import TYPE_CHECKING, override +from typing import override from homeassistant.components.sensor import ( SensorDeviceClass, @@ -12,12 +12,10 @@ from homeassistant.components.sensor import ( ) from homeassistant.const import PERCENTAGE, EntityCategory from homeassistant.core import HomeAssistant -from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from homeassistant.helpers.update_coordinator import CoordinatorEntity -from .const import DOMAIN -from .coordinator import VizioConfigEntry, VizioDeviceCoordinator, VizioDeviceData +from .coordinator import VizioConfigEntry, VizioDeviceData +from .entity import VizioDescriptionEntity PARALLEL_UPDATES = 0 @@ -52,32 +50,15 @@ async def async_setup_entry( return async_add_entities( - VizioSensor(config_entry, coordinator, description) for description in SENSORS + VizioSensor(config_entry, description) for description in SENSORS ) -class VizioSensor(CoordinatorEntity[VizioDeviceCoordinator], SensorEntity): +class VizioSensor(VizioDescriptionEntity, SensorEntity): """Sensor entity for battery-powered Vizio SmartCast devices.""" - _attr_has_entity_name = True entity_description: VizioSensorEntityDescription - def __init__( - self, - config_entry: VizioConfigEntry, - coordinator: VizioDeviceCoordinator, - description: VizioSensorEntityDescription, - ) -> None: - """Initialize the sensor entity.""" - super().__init__(coordinator) - self.entity_description = description - unique_id = config_entry.unique_id - # Guard against config entries missing unique_id, which should never happen - if TYPE_CHECKING: - assert unique_id is not None - self._attr_unique_id = f"{unique_id}_{description.key}" - self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, unique_id)}) - @property @override def native_value(self) -> int | None: