core/homeassistant/components/motionblinds_ble/entity.py

53 lines
1.8 KiB
Python

"""Base entities for the Motionblinds Bluetooth integration."""
import logging
from motionblindsble.const import MotionBlindType
from motionblindsble.device import MotionDevice
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_ADDRESS
from homeassistant.helpers.device_registry import CONNECTION_BLUETOOTH, DeviceInfo
from homeassistant.helpers.entity import Entity, EntityDescription
from .const import CONF_BLIND_TYPE, CONF_MAC_CODE, MANUFACTURER
_LOGGER = logging.getLogger(__name__)
class MotionblindsBLEEntity(Entity):
"""Base class for Motionblinds Bluetooth entities."""
_attr_has_entity_name = True
_attr_should_poll = False
device: MotionDevice
entry: ConfigEntry
def __init__(
self,
device: MotionDevice,
entry: ConfigEntry,
entity_description: EntityDescription,
unique_id_suffix: str | None = None,
) -> None:
"""Initialize the entity."""
if unique_id_suffix is None:
self._attr_unique_id = entry.data[CONF_ADDRESS]
else:
self._attr_unique_id = f"{entry.data[CONF_ADDRESS]}_{unique_id_suffix}"
self.device = device
self.entry = entry
self.entity_description = entity_description
self._attr_device_info = DeviceInfo(
connections={(CONNECTION_BLUETOOTH, entry.data[CONF_ADDRESS])},
manufacturer=MANUFACTURER,
model=MotionBlindType[entry.data[CONF_BLIND_TYPE].upper()].value,
name=device.display_name,
)
async def async_update(self) -> None:
"""Update state, called by HA if there is a poll interval and by the service homeassistant.update_entity."""
_LOGGER.debug("(%s) Updating entity", self.entry.data[CONF_MAC_CODE])
await self.device.status_query()