Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """The Tesla Powerwall integration base entity."""
2 
3 from homeassistant.helpers.device_registry import DeviceInfo
5  CoordinatorEntity,
6  DataUpdateCoordinator,
7 )
8 
9 from .const import (
10  DOMAIN,
11  MANUFACTURER,
12  MODEL,
13  POWERWALL_API,
14  POWERWALL_BASE_INFO,
15  POWERWALL_COORDINATOR,
16 )
17 from .models import BatteryResponse, PowerwallData, PowerwallRuntimeData
18 
19 
20 class PowerWallEntity(CoordinatorEntity[DataUpdateCoordinator[PowerwallData]]):
21  """Base class for powerwall entities."""
22 
23  _attr_has_entity_name = True
24 
25  def __init__(self, powerwall_data: PowerwallRuntimeData) -> None:
26  """Initialize the entity."""
27  base_info = powerwall_data[POWERWALL_BASE_INFO]
28  coordinator = powerwall_data[POWERWALL_COORDINATOR]
29  assert coordinator is not None
30  super().__init__(coordinator)
31  self.power_wallpower_wall = powerwall_data[POWERWALL_API]
32  self.base_unique_idbase_unique_id = base_info.gateway_din
33  self._attr_device_info_attr_device_info = DeviceInfo(
34  identifiers={(DOMAIN, self.base_unique_idbase_unique_id)},
35  manufacturer=MANUFACTURER,
36  model=f"{MODEL} ({base_info.device_type.name})",
37  name=base_info.site_info.site_name,
38  sw_version=base_info.status.version,
39  configuration_url=base_info.url,
40  )
41 
42  @property
43  def data(self) -> PowerwallData:
44  """Return the coordinator data."""
45  return self.coordinator.data
46 
47 
48 class BatteryEntity(CoordinatorEntity[DataUpdateCoordinator[PowerwallData]]):
49  """Base class for battery entities."""
50 
51  _attr_has_entity_name = True
52 
53  def __init__(
54  self, powerwall_data: PowerwallRuntimeData, battery: BatteryResponse
55  ) -> None:
56  """Initialize the entity."""
57  base_info = powerwall_data[POWERWALL_BASE_INFO]
58  coordinator = powerwall_data[POWERWALL_COORDINATOR]
59  assert coordinator is not None
60  super().__init__(coordinator)
61  self.serial_numberserial_number = battery.serial_number
62  self.power_wallpower_wall = powerwall_data[POWERWALL_API]
63  self.base_unique_idbase_unique_id = f"{base_info.gateway_din}_{battery.serial_number}"
64 
65  self._attr_device_info_attr_device_info = DeviceInfo(
66  identifiers={(DOMAIN, self.base_unique_idbase_unique_id)},
67  manufacturer=MANUFACTURER,
68  model=f"{MODEL} ({battery.part_number})",
69  name=f"{base_info.site_info.site_name} {battery.serial_number}",
70  sw_version=base_info.status.version,
71  configuration_url=base_info.url,
72  via_device=(DOMAIN, base_info.gateway_din),
73  )
74 
75  @property
76  def battery_data(self) -> BatteryResponse:
77  """Return the coordinator data."""
78  return self.coordinator.data.batteries[self.serial_numberserial_number]
None __init__(self, PowerwallRuntimeData powerwall_data, BatteryResponse battery)
Definition: entity.py:55
None __init__(self, PowerwallRuntimeData powerwall_data)
Definition: entity.py:25