1 """Teslemetry parent entity class."""
3 from abc
import abstractmethod
6 from tesla_fleet_api
import EnergySpecific, VehicleSpecific
7 from tesla_fleet_api.const
import Scope
13 from .const
import DOMAIN
14 from .coordinator
import (
15 TeslemetryEnergyHistoryCoordinator,
16 TeslemetryEnergySiteInfoCoordinator,
17 TeslemetryEnergySiteLiveCoordinator,
18 TeslemetryVehicleDataCoordinator,
20 from .helpers
import wake_up_vehicle
21 from .models
import TeslemetryEnergyData, TeslemetryVehicleData
26 TeslemetryVehicleDataCoordinator
27 | TeslemetryEnergyHistoryCoordinator
28 | TeslemetryEnergySiteLiveCoordinator
29 | TeslemetryEnergySiteInfoCoordinator
32 """Parent class for all Teslemetry entities."""
34 _attr_has_entity_name =
True
39 coordinator: TeslemetryVehicleDataCoordinator
40 | TeslemetryEnergyHistoryCoordinator
41 | TeslemetryEnergySiteLiveCoordinator
42 | TeslemetryEnergySiteInfoCoordinator,
45 """Initialize common aspects of a Teslemetry entity."""
53 """Return if sensor is available."""
54 return self.coordinator.last_update_success
and self._attr_available
58 """Return a specific value from coordinator data."""
59 return self.coordinator.data.get(self.
keykey)
61 def get(self, key: str, default: Any |
None =
None) -> Any |
None:
62 """Return a specific value from coordinator data."""
63 return self.coordinator.data.get(key, default)
66 """Return a specific number from coordinator data."""
67 if isinstance(value := self.coordinator.data.get(key), (int, float)):
73 """Return if the value is a literal None."""
74 return self.
getget(self.
keykey,
False)
is None
77 def has(self) -> bool:
78 """Return True if a specific value is in coordinator data."""
79 return self.
keykey
in self.coordinator.data
82 """Handle updated data from the coordinator."""
84 self.async_write_ha_state()
88 """Update the attributes of the entity."""
91 """Raise an error if a scope is not available."""
93 raise ServiceValidationError(
94 translation_domain=DOMAIN,
95 translation_key=
"missing_scope",
96 translation_placeholders={
"scope": scope},
101 """Parent class for Teslemetry Vehicle entities."""
103 _last_update: int = 0
105 vehicle: TeslemetryVehicleData
109 data: TeslemetryVehicleData,
112 """Initialize common aspects of a Teslemetry entity."""
118 super().
__init__(data.coordinator, key)
122 """Return a specific value from coordinator data."""
123 return self.coordinator.data.get(self.
keykey)
126 """Wake up the vehicle if its asleep."""
131 """Parent class for Teslemetry Energy Site Live entities."""
137 data: TeslemetryEnergyData,
140 """Initialize common aspects of a Teslemetry Energy Site Live entity."""
146 super().
__init__(data.live_coordinator, key)
150 """Parent class for Teslemetry Energy Site Info Entities."""
156 data: TeslemetryEnergyData,
159 """Initialize common aspects of a Teslemetry Energy Site Info entity."""
165 super().
__init__(data.info_coordinator, key)
169 """Parent class for Teslemetry Energy History Entities."""
173 data: TeslemetryEnergyData,
176 """Initialize common aspects of a Teslemetry Energy Site Info entity."""
178 assert data.history_coordinator
184 super().
__init__(data.history_coordinator, key)
188 """Parent class for Teslemetry Wall Connector Entities."""
190 _attr_has_entity_name =
True
195 data: TeslemetryEnergyData,
199 """Initialize common aspects of a Teslemetry entity."""
206 model: str |
None =
None
207 for wc
in data.info_coordinator.data.get(
"components_wall_connectors", []):
209 model = wc.get(
"part_name")
213 identifiers={(DOMAIN, din)},
214 manufacturer=
"Tesla",
215 configuration_url=
"https://teslemetry.com/console",
216 name=
"Wall Connector",
217 via_device=(DOMAIN,
str(data.id)),
218 serial_number=din.split(
"-")[-1],
222 super().
__init__(data.live_coordinator, key)
226 """Return a specific wall connector value from coordinator data."""
228 self.coordinator.data.get(
"wall_connectors", {})
235 """Return True if it exists in the wall connector coordinator data."""
236 return self.
keykey
in self.coordinator.data.get(
"wall_connectors", {}).
get(
None __init__(self, TeslemetryEnergyData data, str key)
None __init__(self, TeslemetryEnergyData data, str key)
None __init__(self, TeslemetryEnergyData data, str key)
def raise_for_scope(self, Scope scope)
float get_number(self, str key, float default)
None _handle_coordinator_update(self)
None __init__(self, TeslemetryVehicleDataCoordinator|TeslemetryEnergyHistoryCoordinator|TeslemetryEnergySiteLiveCoordinator|TeslemetryEnergySiteInfoCoordinator coordinator, str key)
None _async_update_attrs(self)
Any|None get(self, str key, Any|None default=None)
None __init__(self, TeslemetryVehicleData data, str key)
None wake_up_if_asleep(self)
None __init__(self, TeslemetryEnergyData data, str din, str key)
None wake_up_vehicle(TeslaFleetVehicleData vehicle)