mirror of https://github.com/home-assistant/core
69 lines
2.2 KiB
Python
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,
|
|
)
|