1 """Binary Sensor platform for Tesla Fleet integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from itertools
import chain
8 from typing
import cast
11 BinarySensorDeviceClass,
13 BinarySensorEntityDescription,
20 from .
import TeslaFleetConfigEntry
21 from .const
import TeslaFleetState
23 TeslaFleetEnergyInfoEntity,
24 TeslaFleetEnergyLiveEntity,
25 TeslaFleetVehicleEntity,
27 from .models
import TeslaFleetEnergyData, TeslaFleetVehicleData
32 @dataclass(frozen=True, kw_only=True)
34 """Describes Tesla Fleet binary sensor entity."""
36 is_on: Callable[[StateType], bool] = bool
39 VEHICLE_DESCRIPTIONS: tuple[TeslaFleetBinarySensorEntityDescription, ...] = (
42 device_class=BinarySensorDeviceClass.CONNECTIVITY,
43 is_on=
lambda x: x == TeslaFleetState.ONLINE,
46 key=
"charge_state_battery_heater_on",
47 device_class=BinarySensorDeviceClass.HEAT,
48 entity_category=EntityCategory.DIAGNOSTIC,
49 entity_registry_enabled_default=
False,
52 key=
"charge_state_charger_phases",
53 is_on=
lambda x: cast(int, x) > 1,
54 entity_registry_enabled_default=
False,
57 key=
"charge_state_preconditioning_enabled",
58 entity_category=EntityCategory.DIAGNOSTIC,
59 entity_registry_enabled_default=
False,
62 key=
"climate_state_is_preconditioning",
63 entity_category=EntityCategory.DIAGNOSTIC,
64 entity_registry_enabled_default=
False,
67 key=
"charge_state_scheduled_charging_pending",
68 entity_category=EntityCategory.DIAGNOSTIC,
69 entity_registry_enabled_default=
False,
72 key=
"charge_state_trip_charging",
73 entity_category=EntityCategory.DIAGNOSTIC,
74 entity_registry_enabled_default=
False,
77 key=
"charge_state_conn_charge_cable",
78 is_on=
lambda x: x !=
"<invalid>",
79 entity_category=EntityCategory.DIAGNOSTIC,
80 device_class=BinarySensorDeviceClass.CONNECTIVITY,
83 key=
"climate_state_cabin_overheat_protection_actively_cooling",
84 device_class=BinarySensorDeviceClass.HEAT,
85 entity_category=EntityCategory.DIAGNOSTIC,
86 entity_registry_enabled_default=
False,
89 key=
"vehicle_state_dashcam_state",
90 device_class=BinarySensorDeviceClass.RUNNING,
91 is_on=
lambda x: x ==
"Recording",
92 entity_category=EntityCategory.DIAGNOSTIC,
93 entity_registry_enabled_default=
False,
96 key=
"vehicle_state_is_user_present",
97 device_class=BinarySensorDeviceClass.PRESENCE,
100 key=
"vehicle_state_tpms_soft_warning_fl",
101 device_class=BinarySensorDeviceClass.PROBLEM,
102 entity_category=EntityCategory.DIAGNOSTIC,
103 entity_registry_enabled_default=
False,
106 key=
"vehicle_state_tpms_soft_warning_fr",
107 device_class=BinarySensorDeviceClass.PROBLEM,
108 entity_category=EntityCategory.DIAGNOSTIC,
109 entity_registry_enabled_default=
False,
112 key=
"vehicle_state_tpms_soft_warning_rl",
113 device_class=BinarySensorDeviceClass.PROBLEM,
114 entity_category=EntityCategory.DIAGNOSTIC,
115 entity_registry_enabled_default=
False,
118 key=
"vehicle_state_tpms_soft_warning_rr",
119 device_class=BinarySensorDeviceClass.PROBLEM,
120 entity_category=EntityCategory.DIAGNOSTIC,
121 entity_registry_enabled_default=
False,
124 key=
"vehicle_state_fd_window",
125 device_class=BinarySensorDeviceClass.WINDOW,
126 entity_category=EntityCategory.DIAGNOSTIC,
129 key=
"vehicle_state_fp_window",
130 device_class=BinarySensorDeviceClass.WINDOW,
131 entity_category=EntityCategory.DIAGNOSTIC,
134 key=
"vehicle_state_rd_window",
135 device_class=BinarySensorDeviceClass.WINDOW,
136 entity_category=EntityCategory.DIAGNOSTIC,
139 key=
"vehicle_state_rp_window",
140 device_class=BinarySensorDeviceClass.WINDOW,
141 entity_category=EntityCategory.DIAGNOSTIC,
144 key=
"vehicle_state_df",
145 device_class=BinarySensorDeviceClass.DOOR,
146 entity_category=EntityCategory.DIAGNOSTIC,
149 key=
"vehicle_state_dr",
150 device_class=BinarySensorDeviceClass.DOOR,
151 entity_category=EntityCategory.DIAGNOSTIC,
154 key=
"vehicle_state_pf",
155 device_class=BinarySensorDeviceClass.DOOR,
156 entity_category=EntityCategory.DIAGNOSTIC,
159 key=
"vehicle_state_pr",
160 device_class=BinarySensorDeviceClass.DOOR,
161 entity_category=EntityCategory.DIAGNOSTIC,
165 ENERGY_LIVE_DESCRIPTIONS: tuple[BinarySensorEntityDescription, ...] = (
172 ENERGY_INFO_DESCRIPTIONS: tuple[BinarySensorEntityDescription, ...] = (
174 key=
"components_grid_services_enabled",
181 entry: TeslaFleetConfigEntry,
182 async_add_entities: AddEntitiesCallback,
184 """Set up the Tesla Fleet binary sensor platform from a config entry."""
190 for vehicle
in entry.runtime_data.vehicles
191 for description
in VEHICLE_DESCRIPTIONS
195 for energysite
in entry.runtime_data.energysites
196 for description
in ENERGY_LIVE_DESCRIPTIONS
197 if energysite.info_coordinator.data.get(
"components_battery")
201 for energysite
in entry.runtime_data.energysites
202 for description
in ENERGY_INFO_DESCRIPTIONS
203 if energysite.info_coordinator.data.get(
"components_battery")
210 """Base class for Tesla Fleet vehicle binary sensors."""
212 entity_description: TeslaFleetBinarySensorEntityDescription
216 data: TeslaFleetVehicleData,
217 description: TeslaFleetBinarySensorEntityDescription,
219 """Initialize the binary sensor."""
221 super().
__init__(data, description.key)
224 """Update the attributes of the binary sensor."""
226 if self.coordinator.updated_once:
238 TeslaFleetEnergyLiveEntity, BinarySensorEntity
240 """Base class for Tesla Fleet energy live binary sensors."""
242 entity_description: BinarySensorEntityDescription
246 data: TeslaFleetEnergyData,
247 description: BinarySensorEntityDescription,
249 """Initialize the binary sensor."""
251 super().
__init__(data, description.key)
254 """Update the attributes of the binary sensor."""
259 TeslaFleetEnergyInfoEntity, BinarySensorEntity
261 """Base class for Tesla Fleet energy info binary sensors."""
263 entity_description: BinarySensorEntityDescription
267 data: TeslaFleetEnergyData,
268 description: BinarySensorEntityDescription,
270 """Initialize the binary sensor."""
272 super().
__init__(data, description.key)
275 """Update the attributes of the binary sensor."""
None _async_update_attrs(self)
None __init__(self, TeslaFleetEnergyData data, BinarySensorEntityDescription description)
None _async_update_attrs(self)
None __init__(self, TeslaFleetEnergyData data, BinarySensorEntityDescription description)
None __init__(self, TeslaFleetVehicleData data, TeslaFleetBinarySensorEntityDescription description)
None _async_update_attrs(self)
None async_setup_entry(HomeAssistant hass, TeslaFleetConfigEntry entry, AddEntitiesCallback async_add_entities)