core/homeassistant/components/broadlink/entity.py

69 lines
2.2 KiB
Python

"""Broadlink entities."""
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity import Entity
from .const import DOMAIN
class BroadlinkEntity(Entity):
"""Representation of a Broadlink entity."""
_attr_should_poll = False
def __init__(self, device):
"""Initialize the entity."""
self._device = device
self._coordinator = device.update_manager.coordinator
async def async_added_to_hass(self):
"""Call when the entity is added to hass."""
self.async_on_remove(self._coordinator.async_add_listener(self._recv_data))
if self._coordinator.data:
self._update_state(self._coordinator.data)
async def async_update(self):
"""Update the state of the entity."""
await self._coordinator.async_request_refresh()
def _recv_data(self):
"""Receive data from the update coordinator.
This event listener should be called by the coordinator whenever
there is an update available.
It works as a template for the _update_state() method, which should
be overridden by child classes in order to update the state of the
entities, when applicable.
"""
if self._coordinator.last_update_success:
self._update_state(self._coordinator.data)
self.async_write_ha_state()
def _update_state(self, data):
"""Update the state of the entity.
This method should be overridden by child classes in order to
internalize state and attributes received from the coordinator.
"""
@property
def available(self):
"""Return True if the entity is available."""
return self._device.available
@property
def device_info(self) -> DeviceInfo:
"""Return device info."""
device = self._device
return DeviceInfo(
connections={(dr.CONNECTION_NETWORK_MAC, device.mac_address)},
identifiers={(DOMAIN, device.unique_id)},
manufacturer=device.api.manufacturer,
model=device.api.model,
name=device.name,
sw_version=device.fw_version,
)