1 """Tessie parent entity class."""
3 from abc
import abstractmethod
4 from collections.abc
import Awaitable, Callable
7 from aiohttp
import ClientResponseError
13 from .const
import DOMAIN, TRANSLATED_ERRORS
14 from .coordinator
import (
15 TessieEnergySiteInfoCoordinator,
16 TessieEnergySiteLiveCoordinator,
17 TessieStateUpdateCoordinator,
19 from .models
import TessieEnergyData, TessieVehicleData
24 TessieStateUpdateCoordinator
25 | TessieEnergySiteInfoCoordinator
26 | TessieEnergySiteLiveCoordinator
29 """Parent class for Tessie entities."""
31 _attr_has_entity_name =
True
35 coordinator: TessieStateUpdateCoordinator
36 | TessieEnergySiteInfoCoordinator
37 | TessieEnergySiteLiveCoordinator,
40 """Initialize common aspects of a Tessie entity."""
49 """Return value from coordinator data."""
50 return self.coordinator.data.get(self.
keykey)
52 def get(self, key: str |
None =
None, default: Any |
None =
None) -> Any:
53 """Return a specific value from coordinator data."""
54 return self.coordinator.data.get(key
or self.
keykey, default)
57 """Handle updated data from the coordinator."""
63 """Update the attributes of the entity."""
66 class TessieEntity(TessieBaseEntity):
67 """Parent class for Tessie vehicle entities."""
71 vehicle: TessieVehicleData,
74 """Initialize common aspects of a Tessie vehicle entity."""
76 self.
_session_session = vehicle.data_coordinator.session
77 self.
_api_key_api_key = vehicle.data_coordinator.api_key
81 super().
__init__(vehicle.data_coordinator, key)
85 """Return value from coordinator data."""
86 return self.coordinator.data.get(self.
keykey)
88 def set(self, *args: Any) ->
None:
89 """Set a value in coordinator data."""
90 for key, value
in args:
91 self.coordinator.data[key] = value
92 self.async_write_ha_state()
95 self, func: Callable[..., Awaitable[dict[str, Any]]], **kargs: Any
97 """Run a tessie_api function and handle exceptions."""
99 response = await func(
105 except ClientResponseError
as e:
106 raise HomeAssistantError
from e
107 if response[
"result"]
is False:
108 name: str = getattr(self,
"name", self.entity_id)
109 reason: str = response.get(
"reason",
"unknown")
110 translation_key = TRANSLATED_ERRORS.get(reason,
"command_failed")
112 translation_domain=DOMAIN,
113 translation_key=translation_key,
114 translation_placeholders={
"name": name,
"message": reason},
118 """Update the attributes of the entity."""
122 class TessieEnergyEntity(TessieBaseEntity):
123 """Parent class for Tessie energy site entities."""
127 data: TessieEnergyData,
128 coordinator: TessieEnergySiteInfoCoordinator | TessieEnergySiteLiveCoordinator,
131 """Initialize common aspects of a Tessie energy site entity."""
140 """Parent class for Tessie wall connector entities."""
144 data: TessieEnergyData,
148 """Initialize common aspects of a Teslemetry entity."""
152 identifiers={(DOMAIN, din)},
153 manufacturer=
"Tesla",
154 name=
"Wall Connector",
155 via_device=(DOMAIN,
str(data.id)),
156 serial_number=din.split(
"-")[-1],
159 super().
__init__(data.live_coordinator, key)
163 """Return a specific wall connector value from coordinator data."""
165 self.coordinator.data.get(
"wall_connectors", {})
None __init__(self, TessieStateUpdateCoordinator|TessieEnergySiteInfoCoordinator|TessieEnergySiteLiveCoordinator coordinator, str key)
Any get(self, str|None key=None, Any|None default=None)
None _handle_coordinator_update(self)
None _async_update_attrs(self)
None __init__(self, TessieEnergyData data, TessieEnergySiteInfoCoordinator|TessieEnergySiteLiveCoordinator coordinator, str key)
None _async_update_attrs(self)
None __init__(self, TessieVehicleData vehicle, str key)
None set(self, *Any args)
None run(self, Callable[..., Awaitable[dict[str, Any]]] func, **Any kargs)
None __init__(self, TessieEnergyData data, str din, str key)