mirror of
https://github.com/home-assistant/core.git
synced 2026-08-08 06:16:40 +01:00
86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
"""Base entity for Midea."""
|
|
|
|
from typing import Any, override
|
|
|
|
from midealocal.device import MideaDevice
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC, DeviceInfo
|
|
from homeassistant.helpers.entity import Entity, EntityDescription
|
|
|
|
from .const import DOMAIN, LOGGER
|
|
from .device_catalog import MIDEA_DEVICE_NAMES
|
|
|
|
type MideaConfigEntry = ConfigEntry[MideaDevice]
|
|
|
|
|
|
class MideaEntity(Entity):
|
|
"""Base Midea entity."""
|
|
|
|
_attr_has_entity_name = True
|
|
_attr_should_poll = False
|
|
|
|
def __init__(
|
|
self, device: MideaDevice, entity_description: EntityDescription
|
|
) -> None:
|
|
"""Initialize Midea base entity."""
|
|
self._device = device
|
|
self._unique_id = f"{self._device.device_id}_{entity_description.key}"
|
|
self._device_name = self._device.name
|
|
self.entity_description = entity_description
|
|
|
|
@override
|
|
async def async_added_to_hass(self) -> None:
|
|
"""Register update callback when entity is added."""
|
|
self._device.register_update(self.update_state)
|
|
|
|
@override
|
|
async def async_will_remove_from_hass(self) -> None:
|
|
"""Unregister update callback when entity is removed."""
|
|
self._device.unregister_update(self.update_state)
|
|
|
|
@property
|
|
@override
|
|
def device_info(self) -> DeviceInfo:
|
|
"""Return device info."""
|
|
device_info = DeviceInfo(
|
|
manufacturer="Midea",
|
|
# Map the device type (numeric ID) to a human-readable model name.
|
|
model=MIDEA_DEVICE_NAMES.get(self._device.device_type),
|
|
identifiers={(DOMAIN, str(self._device.device_id))},
|
|
name=self._device_name,
|
|
model_id=self._device.device_type.name,
|
|
hw_version=str(self._device.model),
|
|
)
|
|
if mac := self._device.mac:
|
|
device_info["connections"] = {(CONNECTION_NETWORK_MAC, mac)}
|
|
if serial_number := self._device.serial_number:
|
|
device_info["serial_number"] = serial_number
|
|
|
|
return device_info
|
|
|
|
@property
|
|
@override
|
|
def unique_id(self) -> str:
|
|
"""Return entity unique id."""
|
|
return self._unique_id
|
|
|
|
@property
|
|
@override
|
|
def available(self) -> bool:
|
|
"""Return entity availability."""
|
|
return bool(self._device.available)
|
|
|
|
def update_state(self, status: Any) -> None:
|
|
"""Update entity state."""
|
|
if self.hass.is_stopping:
|
|
LOGGER.debug(
|
|
"MideaEntity update_state for %s [%s] with status %s: HASS is stopping",
|
|
self.name,
|
|
type(self),
|
|
status,
|
|
)
|
|
return
|
|
|
|
self.schedule_update_ha_state()
|