Add individual battery banks as devices (#108339)

This commit is contained in:
Josh Pettersen 2024-01-30 21:03:01 -08:00 committed by GitHub
parent 5fd6028d97
commit b629ad9c3d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 299 additions and 5 deletions

View file

@ -14,7 +14,7 @@ from .const import (
POWERWALL_BASE_INFO,
POWERWALL_COORDINATOR,
)
from .models import PowerwallData, PowerwallRuntimeData
from .models import BatteryResponse, PowerwallData, PowerwallRuntimeData
class PowerWallEntity(CoordinatorEntity[DataUpdateCoordinator[PowerwallData]]):
@ -43,3 +43,36 @@ class PowerWallEntity(CoordinatorEntity[DataUpdateCoordinator[PowerwallData]]):
def data(self) -> PowerwallData:
"""Return the coordinator data."""
return self.coordinator.data
class BatteryEntity(CoordinatorEntity[DataUpdateCoordinator[PowerwallData]]):
"""Base class for battery entities."""
_attr_has_entity_name = True
def __init__(
self, powerwall_data: PowerwallRuntimeData, battery: BatteryResponse
) -> None:
"""Initialize the entity."""
base_info = powerwall_data[POWERWALL_BASE_INFO]
coordinator = powerwall_data[POWERWALL_COORDINATOR]
assert coordinator is not None
super().__init__(coordinator)
self.serial_number = battery.serial_number
self.power_wall = powerwall_data[POWERWALL_API]
self.base_unique_id = f"{base_info.gateway_din}_{battery.serial_number}"
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, self.base_unique_id)},
manufacturer=MANUFACTURER,
model=f"{MODEL} ({battery.part_number})",
name=f"{base_info.site_info.site_name} {battery.serial_number}",
sw_version=base_info.status.version,
configuration_url=base_info.url,
via_device=(DOMAIN, base_info.gateway_din),
)
@property
def battery_data(self) -> BatteryResponse:
"""Return the coordinator data."""
return self.coordinator.data.batteries[self.serial_number]