Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """Base class for the La Marzocco entities."""
2 
3 from collections.abc import Callable
4 from dataclasses import dataclass
5 
6 from pylamarzocco.const import FirmwareType
7 from pylamarzocco.lm_machine import LaMarzoccoMachine
8 
9 from homeassistant.const import CONF_ADDRESS
10 from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC, DeviceInfo
11 from homeassistant.helpers.entity import EntityDescription
12 from homeassistant.helpers.update_coordinator import CoordinatorEntity
13 
14 from .const import DOMAIN
15 from .coordinator import LaMarzoccoUpdateCoordinator
16 
17 
18 @dataclass(frozen=True, kw_only=True)
20  """Description for all LM entities."""
21 
22  available_fn: Callable[[LaMarzoccoMachine], bool] = lambda _: True
23  supported_fn: Callable[[LaMarzoccoUpdateCoordinator], bool] = lambda _: True
24 
25 
27  CoordinatorEntity[LaMarzoccoUpdateCoordinator],
28 ):
29  """Common elements for all entities."""
30 
31  _attr_has_entity_name = True
32 
33  def __init__(
34  self,
35  coordinator: LaMarzoccoUpdateCoordinator,
36  key: str,
37  ) -> None:
38  """Initialize the entity."""
39  super().__init__(coordinator)
40  device = coordinator.device
41  self._attr_unique_id_attr_unique_id = f"{device.serial_number}_{key}"
42  self._attr_device_info_attr_device_info = DeviceInfo(
43  identifiers={(DOMAIN, device.serial_number)},
44  name=device.name,
45  manufacturer="La Marzocco",
46  model=device.full_model_name,
47  model_id=device.model,
48  serial_number=device.serial_number,
49  sw_version=device.firmware[FirmwareType.MACHINE].current_version,
50  )
51  if coordinator.config_entry.data.get(CONF_ADDRESS):
52  self._attr_device_info_attr_device_info.update(
53  DeviceInfo(
54  connections={
55  (
56  CONNECTION_NETWORK_MAC,
57  coordinator.config_entry.data[CONF_ADDRESS],
58  )
59  }
60  )
61  )
62 
63 
65  """Common elements for all entities."""
66 
67  entity_description: LaMarzoccoEntityDescription
68 
69  @property
70  def available(self) -> bool:
71  """Return True if entity is available."""
72  if super().available:
73  return self.entity_descriptionentity_description.available_fn(self.coordinator.device)
74  return False
75 
76  def __init__(
77  self,
78  coordinator: LaMarzoccoUpdateCoordinator,
79  entity_description: LaMarzoccoEntityDescription,
80  ) -> None:
81  """Initialize the entity."""
82  super().__init__(coordinator, entity_description.key)
83  self.entity_descriptionentity_description = entity_description
None __init__(self, LaMarzoccoUpdateCoordinator coordinator, str key)
Definition: entity.py:37
None __init__(self, LaMarzoccoUpdateCoordinator coordinator, LaMarzoccoEntityDescription entity_description)
Definition: entity.py:80