From f872dc8948cfffcfdf5b56c66a4f0cad7d640c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Tue, 8 Apr 2025 22:39:45 +0100 Subject: [PATCH] Use base entity class for Whirlpool climate (#142548) * Use base entity class for Whirlpool climate * Set model_id instead of model --- homeassistant/components/whirlpool/climate.py | 32 +++---------------- homeassistant/components/whirlpool/entity.py | 3 +- tests/components/whirlpool/test_climate.py | 10 +++--- 3 files changed, 11 insertions(+), 34 deletions(-) diff --git a/homeassistant/components/whirlpool/climate.py b/homeassistant/components/whirlpool/climate.py index 84a2c0d52ca..eb9e63efd44 100644 --- a/homeassistant/components/whirlpool/climate.py +++ b/homeassistant/components/whirlpool/climate.py @@ -8,7 +8,6 @@ from typing import Any from whirlpool.aircon import Aircon, FanSpeed as AirconFanSpeed, Mode as AirconMode from homeassistant.components.climate import ( - ENTITY_ID_FORMAT, FAN_AUTO, FAN_HIGH, FAN_LOW, @@ -22,12 +21,10 @@ from homeassistant.components.climate import ( ) from homeassistant.const import ATTR_TEMPERATURE, UnitOfTemperature from homeassistant.core import HomeAssistant -from homeassistant.helpers.device_registry import DeviceInfo -from homeassistant.helpers.entity import generate_entity_id from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from . import WhirlpoolConfigEntry -from .const import DOMAIN +from .entity import WhirlpoolEntity _LOGGER = logging.getLogger(__name__) @@ -71,10 +68,10 @@ async def async_setup_entry( """Set up entry.""" appliances_manager = config_entry.runtime_data aircons = [AirConEntity(hass, aircon) for aircon in appliances_manager.aircons] - async_add_entities(aircons, True) + async_add_entities(aircons) -class AirConEntity(ClimateEntity): +class AirConEntity(WhirlpoolEntity, ClimateEntity): """Representation of an air conditioner.""" _attr_fan_modes = SUPPORTED_FAN_MODES @@ -97,29 +94,8 @@ class AirConEntity(ClimateEntity): def __init__(self, hass: HomeAssistant, aircon: Aircon) -> None: """Initialize the entity.""" + super().__init__(aircon) self._aircon = aircon - self.entity_id = generate_entity_id(ENTITY_ID_FORMAT, aircon.said, hass=hass) - self._attr_unique_id = aircon.said - - self._attr_device_info = DeviceInfo( - identifiers={(DOMAIN, aircon.said)}, - name=aircon.name if aircon.name is not None else aircon.said, - manufacturer="Whirlpool", - model="Sixth Sense", - ) - - async def async_added_to_hass(self) -> None: - """Register updates callback.""" - self._aircon.register_attr_callback(self.async_write_ha_state) - - async def async_will_remove_from_hass(self) -> None: - """Unregister updates callback.""" - self._aircon.unregister_attr_callback(self.async_write_ha_state) - - @property - def available(self) -> bool: - """Return True if entity is available.""" - return self._aircon.get_online() @property def current_temperature(self) -> float: diff --git a/homeassistant/components/whirlpool/entity.py b/homeassistant/components/whirlpool/entity.py index e74ed596e1e..3f2fc81d358 100644 --- a/homeassistant/components/whirlpool/entity.py +++ b/homeassistant/components/whirlpool/entity.py @@ -19,8 +19,9 @@ class WhirlpoolEntity(Entity): self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, appliance.said)}, - name=appliance.name.capitalize(), + name=appliance.name.capitalize() if appliance.name else appliance.said, manufacturer="Whirlpool", + model_id=appliance.appliance_info.model_number, ) self._attr_unique_id = f"{appliance.said}{unique_id_suffix}" diff --git a/tests/components/whirlpool/test_climate.py b/tests/components/whirlpool/test_climate.py index 0586d654f7f..1a076b76637 100644 --- a/tests/components/whirlpool/test_climate.py +++ b/tests/components/whirlpool/test_climate.py @@ -81,7 +81,7 @@ async def test_static_attributes( await init_integration(hass) for said in ("said1", "said2"): - entity_id = f"climate.{said}" + entity_id = f"climate.aircon_{said}" entry = entity_registry.async_get(entity_id) assert entry assert entry.unique_id == said @@ -138,8 +138,8 @@ async def test_dynamic_attributes( mock_instance_idx: int for clim_test_instance in ( - ClimateTestInstance("climate.said1", mock_aircon1_api, 0), - ClimateTestInstance("climate.said2", mock_aircon2_api, 1), + ClimateTestInstance("climate.aircon_said1", mock_aircon1_api, 0), + ClimateTestInstance("climate.aircon_said2", mock_aircon2_api, 1), ): entity_id = clim_test_instance.entity_id mock_instance = clim_test_instance.mock_instance @@ -225,8 +225,8 @@ async def test_service_calls( mock_instance: MagicMock for clim_test_instance in ( - ClimateInstancesData("climate.said1", mock_aircon1_api), - ClimateInstancesData("climate.said2", mock_aircon2_api), + ClimateInstancesData("climate.aircon_said1", mock_aircon1_api), + ClimateInstancesData("climate.aircon_said2", mock_aircon2_api), ): mock_instance = clim_test_instance.mock_instance entity_id = clim_test_instance.entity_id