mirror of https://github.com/home-assistant/core
91 lines
2.9 KiB
Python
91 lines
2.9 KiB
Python
"""LCN parent entity class."""
|
|
|
|
from collections.abc import Callable
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import CONF_ADDRESS, CONF_DOMAIN, CONF_NAME, CONF_RESOURCE
|
|
from homeassistant.helpers.device_registry import DeviceInfo
|
|
from homeassistant.helpers.entity import Entity
|
|
from homeassistant.helpers.typing import ConfigType
|
|
|
|
from .const import CONF_DOMAIN_DATA, DOMAIN
|
|
from .helpers import (
|
|
AddressType,
|
|
DeviceConnectionType,
|
|
InputType,
|
|
generate_unique_id,
|
|
get_device_connection,
|
|
get_device_model,
|
|
)
|
|
|
|
|
|
class LcnEntity(Entity):
|
|
"""Parent class for all entities associated with the LCN component."""
|
|
|
|
_attr_should_poll = False
|
|
device_connection: DeviceConnectionType
|
|
|
|
def __init__(
|
|
self,
|
|
config: ConfigType,
|
|
config_entry: ConfigEntry,
|
|
) -> None:
|
|
"""Initialize the LCN device."""
|
|
self.config = config
|
|
self.config_entry = config_entry
|
|
self.address: AddressType = config[CONF_ADDRESS]
|
|
self._unregister_for_inputs: Callable | None = None
|
|
self._name: str = config[CONF_NAME]
|
|
|
|
@property
|
|
def unique_id(self) -> str:
|
|
"""Return a unique ID."""
|
|
return generate_unique_id(
|
|
self.config_entry.entry_id, self.address, self.config[CONF_RESOURCE]
|
|
)
|
|
|
|
@property
|
|
def device_info(self) -> DeviceInfo | None:
|
|
"""Return device specific attributes."""
|
|
address = f"{'g' if self.address[2] else 'm'}{self.address[0]:03d}{self.address[1]:03d}"
|
|
model = (
|
|
"LCN resource"
|
|
f" ({get_device_model(self.config[CONF_DOMAIN], self.config[CONF_DOMAIN_DATA])})"
|
|
)
|
|
|
|
return DeviceInfo(
|
|
identifiers={(DOMAIN, self.unique_id)},
|
|
name=f"{address}.{self.config[CONF_RESOURCE]}",
|
|
model=model,
|
|
manufacturer="Issendorff",
|
|
via_device=(
|
|
DOMAIN,
|
|
generate_unique_id(
|
|
self.config_entry.entry_id, self.config[CONF_ADDRESS]
|
|
),
|
|
),
|
|
)
|
|
|
|
async def async_added_to_hass(self) -> None:
|
|
"""Run when entity about to be added to hass."""
|
|
self.device_connection = get_device_connection(
|
|
self.hass, self.config[CONF_ADDRESS], self.config_entry
|
|
)
|
|
if not self.device_connection.is_group:
|
|
self._unregister_for_inputs = self.device_connection.register_for_inputs(
|
|
self.input_received
|
|
)
|
|
|
|
async def async_will_remove_from_hass(self) -> None:
|
|
"""Run when entity will be removed from hass."""
|
|
if self._unregister_for_inputs is not None:
|
|
self._unregister_for_inputs()
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
"""Return the name of the device."""
|
|
return self._name
|
|
|
|
def input_received(self, input_obj: InputType) -> None:
|
|
"""Set state/value when LCN input object (command) is received."""
|