Use base entity class for Whirlpool climate (#142548)

* Use base entity class for Whirlpool climate

* Set model_id instead of model
This commit is contained in:
Abílio Costa 2025-04-08 22:39:45 +01:00 committed by GitHub
parent ec520b8cf5
commit f872dc8948
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 11 additions and 34 deletions

View File

@ -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:

View File

@ -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}"

View File

@ -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