66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
"""Broadlink entities."""
 | 
						|
 | 
						|
from homeassistant.helpers import device_registry as dr
 | 
						|
from homeassistant.helpers.entity import DeviceInfo, 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))
 | 
						|
 | 
						|
    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,
 | 
						|
        )
 |