1 """Number platform for Tessie integration."""
3 from __future__
import annotations
5 from collections.abc
import Awaitable, Callable
6 from dataclasses
import dataclass
7 from itertools
import chain
10 from tesla_fleet_api
import EnergySpecific
11 from tessie_api
import set_charge_limit, set_charging_amps, set_speed_limit
16 NumberEntityDescription,
22 UnitOfElectricCurrent,
29 from .
import TessieConfigEntry
30 from .entity
import TessieEnergyEntity, TessieEntity
31 from .helpers
import handle_command
32 from .models
import TessieEnergyData, TessieVehicleData
37 @dataclass(frozen=True, kw_only=True)
39 """Describes Tessie Number entity."""
43 native_min_value: float
44 native_max_value: float
45 min_key: str |
None =
None
49 VEHICLE_DESCRIPTIONS: tuple[TessieNumberEntityDescription, ...] = (
51 key=
"charge_state_charge_current_request",
52 native_step=PRECISION_WHOLE,
55 native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
56 device_class=NumberDeviceClass.CURRENT,
57 max_key=
"charge_state_charge_current_request_max",
58 func=
lambda: set_charging_amps,
62 key=
"charge_state_charge_limit_soc",
63 native_step=PRECISION_WHOLE,
66 native_unit_of_measurement=PERCENTAGE,
67 device_class=NumberDeviceClass.BATTERY,
68 min_key=
"charge_state_charge_limit_soc_min",
69 max_key=
"charge_state_charge_limit_soc_max",
70 func=
lambda: set_charge_limit,
74 key=
"vehicle_state_speed_limit_mode_current_limit_mph",
75 native_step=PRECISION_WHOLE,
78 native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
79 device_class=NumberDeviceClass.SPEED,
81 min_key=
"vehicle_state_speed_limit_mode_min_limit_mph",
82 max_key=
"vehicle_state_speed_limit_mode_max_limit_mph",
83 func=
lambda: set_speed_limit,
89 @dataclass(frozen=True, kw_only=True)
91 """Describes Tessie Number entity."""
93 func: Callable[[EnergySpecific, float], Awaitable[Any]]
97 ENERGY_INFO_DESCRIPTIONS: tuple[TessieNumberBatteryEntityDescription, ...] = (
99 key=
"backup_reserve_percent",
100 func=
lambda api, value: api.backup(
int(value)),
101 requires=
"components_battery",
104 key=
"off_grid_vehicle_charging_reserve_percent",
105 func=
lambda api, value: api.off_grid_vehicle_charging_reserve(
int(value)),
106 requires=
"components_off_grid_vehicle_charging_reserve_supported",
113 entry: TessieConfigEntry,
114 async_add_entities: AddEntitiesCallback,
116 """Set up the Tessie sensor platform from a config entry."""
117 data = entry.runtime_data
123 for vehicle
in data.vehicles
124 for description
in VEHICLE_DESCRIPTIONS
128 for energysite
in entry.runtime_data.energysites
129 for description
in ENERGY_INFO_DESCRIPTIONS
130 if energysite.info_coordinator.data.get(description.requires)
137 """Number entity for current charge."""
139 entity_description: TessieNumberEntityDescription
143 vehicle: TessieVehicleData,
144 description: TessieNumberEntityDescription,
146 """Initialize the Number entity."""
147 super().
__init__(vehicle, description.key)
152 """Return the value reported by the number."""
157 """Return the minimum value."""
167 """Return the maximum value."""
177 self.
setset((self.
keykey, value))
181 """Energy info number entity base class."""
183 entity_description: TessieNumberBatteryEntityDescription
184 _attr_native_step = PRECISION_WHOLE
185 _attr_native_min_value = 0
186 _attr_native_max_value = 100
187 _attr_device_class = NumberDeviceClass.BATTERY
188 _attr_native_unit_of_measurement = PERCENTAGE
192 data: TessieEnergyData,
193 description: TessieNumberBatteryEntityDescription,
195 """Initialize the number entity."""
197 super().
__init__(data, data.info_coordinator, description.key)
200 """Update the attributes of the entity."""
float|None native_value(self)
Any get(self, str|None key=None, Any|None default=None)
None set(self, *Any args)
None run(self, Callable[..., Awaitable[dict[str, Any]]] func, **Any kargs)
None async_set_native_value(self, float value)
None __init__(self, TessieEnergyData data, TessieNumberBatteryEntityDescription description)
None _async_update_attrs(self)
float native_min_value(self)
None async_set_native_value(self, float value)
float native_max_value(self)
None __init__(self, TessieVehicleData vehicle, TessieNumberEntityDescription description)
float|None native_value(self)
None async_write_ha_state(self)
dict[str, Any] handle_command(Awaitable command)
None async_setup_entry(HomeAssistant hass, TessieConfigEntry entry, AddEntitiesCallback async_add_entities)
str icon_for_battery_level(int|None battery_level=None, bool charging=False)