1 """Select platform for Tessie integration."""
3 from __future__
import annotations
5 from itertools
import chain
7 from tesla_fleet_api.const
import EnergyExportMode, EnergyOperationMode
8 from tessie_api
import set_seat_cool, set_seat_heat
14 from .
import TessieConfigEntry
15 from .const
import TessieSeatCoolerOptions, TessieSeatHeaterOptions
16 from .entity
import TessieEnergyEntity, TessieEntity
17 from .helpers
import handle_command
18 from .models
import TessieEnergyData
21 "climate_state_seat_heater_left":
"front_left",
22 "climate_state_seat_heater_right":
"front_right",
23 "climate_state_seat_heater_rear_left":
"rear_left",
24 "climate_state_seat_heater_rear_center":
"rear_center",
25 "climate_state_seat_heater_rear_right":
"rear_right",
26 "climate_state_seat_heater_third_row_left":
"third_row_left",
27 "climate_state_seat_heater_third_row_right":
"third_row_right",
31 "climate_state_seat_fan_front_left":
"front_left",
32 "climate_state_seat_fan_front_right":
"front_right",
40 entry: TessieConfigEntry,
41 async_add_entities: AddEntitiesCallback,
43 """Set up the Tessie select platform from a config entry."""
49 for vehicle
in entry.runtime_data.vehicles
50 for key
in SEAT_HEATERS
52 in vehicle.data_coordinator.data
56 for vehicle
in entry.runtime_data.vehicles
57 for key
in SEAT_COOLERS
59 in vehicle.data_coordinator.data
63 for energysite
in entry.runtime_data.energysites
64 if energysite.info_coordinator.data.get(
"components_battery")
68 for energysite
in entry.runtime_data.energysites
69 if energysite.info_coordinator.data.get(
"components_battery")
70 and energysite.info_coordinator.data.get(
"components_solar")
77 """Select entity for current charge."""
80 TessieSeatHeaterOptions.OFF,
81 TessieSeatHeaterOptions.LOW,
82 TessieSeatHeaterOptions.MEDIUM,
83 TessieSeatHeaterOptions.HIGH,
88 """Return the current selected option."""
92 """Change the selected option."""
94 await self.
runrun(set_seat_heat, seat=SEAT_HEATERS[self.
keykey], level=level)
95 self.
setset((self.
keykey, level))
99 """Select entity for cooled seat."""
102 TessieSeatCoolerOptions.OFF,
103 TessieSeatCoolerOptions.LOW,
104 TessieSeatCoolerOptions.MEDIUM,
105 TessieSeatCoolerOptions.HIGH,
110 """Return the current selected option."""
114 """Change the selected option."""
116 await self.
runrun(set_seat_cool, seat=SEAT_COOLERS[self.
keykey], level=level)
117 self.
setset((self.
keykey, level))
121 """Select entity for operation mode select entities."""
123 _attr_options: list[str] = [
124 EnergyOperationMode.AUTONOMOUS,
125 EnergyOperationMode.BACKUP,
126 EnergyOperationMode.SELF_CONSUMPTION,
131 data: TessieEnergyData,
133 """Initialize the operation mode select entity."""
134 super().
__init__(data, data.info_coordinator,
"default_real_mode")
137 """Update the attributes of the entity."""
141 """Change the selected option."""
148 """Select entity for export rules select entities."""
150 _attr_options: list[str] = [
151 EnergyExportMode.NEVER,
152 EnergyExportMode.BATTERY_OK,
153 EnergyExportMode.PV_ONLY,
158 data: TessieEnergyData,
160 """Initialize the export rules select entity."""
162 data, data.info_coordinator,
"components_customer_preferred_export_rule"
166 """Update the attributes of the entity."""
170 """Change the selected option."""
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_select_option(self, str option)
None __init__(self, TessieEnergyData data)
None _async_update_attrs(self)
None __init__(self, TessieEnergyData data)
None async_select_option(self, str option)
None _async_update_attrs(self)
str|None current_option(self)
None async_select_option(self, str option)
None async_select_option(self, str option)
str|None current_option(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)