Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Sensors for Tesla Wall Connector."""
2 
3 from dataclasses import dataclass
4 import logging
5 
7  SensorDeviceClass,
8  SensorEntity,
9  SensorEntityDescription,
10  SensorStateClass,
11 )
12 from homeassistant.config_entries import ConfigEntry
13 from homeassistant.const import (
14  EntityCategory,
15  UnitOfElectricCurrent,
16  UnitOfElectricPotential,
17  UnitOfEnergy,
18  UnitOfFrequency,
19  UnitOfTemperature,
20 )
21 from homeassistant.core import HomeAssistant
22 from homeassistant.helpers.entity_platform import AddEntitiesCallback
23 
24 from . import WallConnectorData
25 from .const import DOMAIN, WALLCONNECTOR_DATA_LIFETIME, WALLCONNECTOR_DATA_VITALS
26 from .entity import WallConnectorEntity, WallConnectorLambdaValueGetterMixin
27 
28 _LOGGER = logging.getLogger(__name__)
29 
30 EVSE_STATE = {
31  0: "booting",
32  1: "not_connected",
33  2: "connected",
34  4: "ready",
35  6: "negotiating",
36  7: "error",
37  8: "charging_finished",
38  9: "waiting_car",
39  10: "charging_reduced",
40  11: "charging",
41 }
42 
43 
44 @dataclass(frozen=True)
46  SensorEntityDescription, WallConnectorLambdaValueGetterMixin
47 ):
48  """Sensor entity description with a function pointer for getting sensor value."""
49 
50 
51 WALL_CONNECTOR_SENSORS = [
53  key="evse_state",
54  translation_key="status_code",
55  entity_category=EntityCategory.DIAGNOSTIC,
56  value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].evse_state,
57  entity_registry_enabled_default=False,
58  ),
60  key="status",
61  translation_key="status",
62  device_class=SensorDeviceClass.ENUM,
63  value_fn=lambda data: EVSE_STATE.get(
64  data[WALLCONNECTOR_DATA_VITALS].evse_state
65  ),
66  options=list(EVSE_STATE.values()),
67  ),
69  key="handle_temp_c",
70  translation_key="handle_temp_c",
71  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
72  value_fn=lambda data: round(data[WALLCONNECTOR_DATA_VITALS].handle_temp_c, 1),
73  device_class=SensorDeviceClass.TEMPERATURE,
74  entity_category=EntityCategory.DIAGNOSTIC,
75  state_class=SensorStateClass.MEASUREMENT,
76  ),
78  key="pcba_temp_c",
79  translation_key="pcba_temp_c",
80  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
81  value_fn=lambda data: round(data[WALLCONNECTOR_DATA_VITALS].pcba_temp_c, 1),
82  device_class=SensorDeviceClass.TEMPERATURE,
83  entity_category=EntityCategory.DIAGNOSTIC,
84  state_class=SensorStateClass.MEASUREMENT,
85  ),
87  key="mcu_temp_c",
88  translation_key="mcu_temp_c",
89  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
90  value_fn=lambda data: round(data[WALLCONNECTOR_DATA_VITALS].mcu_temp_c, 1),
91  device_class=SensorDeviceClass.TEMPERATURE,
92  entity_category=EntityCategory.DIAGNOSTIC,
93  state_class=SensorStateClass.MEASUREMENT,
94  ),
96  key="grid_v",
97  translation_key="grid_v",
98  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
99  value_fn=lambda data: round(data[WALLCONNECTOR_DATA_VITALS].grid_v, 1),
100  device_class=SensorDeviceClass.VOLTAGE,
101  state_class=SensorStateClass.MEASUREMENT,
102  entity_category=EntityCategory.DIAGNOSTIC,
103  ),
105  key="grid_hz",
106  translation_key="grid_hz",
107  native_unit_of_measurement=UnitOfFrequency.HERTZ,
108  value_fn=lambda data: round(data[WALLCONNECTOR_DATA_VITALS].grid_hz, 3),
109  device_class=SensorDeviceClass.FREQUENCY,
110  state_class=SensorStateClass.MEASUREMENT,
111  entity_category=EntityCategory.DIAGNOSTIC,
112  ),
114  key="current_a_a",
115  translation_key="current_a_a",
116  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
117  value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].currentA_a,
118  device_class=SensorDeviceClass.CURRENT,
119  state_class=SensorStateClass.MEASUREMENT,
120  entity_category=EntityCategory.DIAGNOSTIC,
121  ),
123  key="current_b_a",
124  translation_key="current_b_a",
125  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
126  value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].currentB_a,
127  device_class=SensorDeviceClass.CURRENT,
128  state_class=SensorStateClass.MEASUREMENT,
129  entity_category=EntityCategory.DIAGNOSTIC,
130  ),
132  key="current_c_a",
133  translation_key="current_c_a",
134  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
135  value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].currentC_a,
136  device_class=SensorDeviceClass.CURRENT,
137  state_class=SensorStateClass.MEASUREMENT,
138  entity_category=EntityCategory.DIAGNOSTIC,
139  ),
141  key="voltage_a_v",
142  translation_key="voltage_a_v",
143  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
144  value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].voltageA_v,
145  device_class=SensorDeviceClass.VOLTAGE,
146  state_class=SensorStateClass.MEASUREMENT,
147  entity_category=EntityCategory.DIAGNOSTIC,
148  ),
150  key="voltage_b_v",
151  translation_key="voltage_b_v",
152  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
153  value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].voltageB_v,
154  device_class=SensorDeviceClass.VOLTAGE,
155  state_class=SensorStateClass.MEASUREMENT,
156  entity_category=EntityCategory.DIAGNOSTIC,
157  ),
159  key="voltage_c_v",
160  translation_key="voltage_c_v",
161  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
162  value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].voltageC_v,
163  device_class=SensorDeviceClass.VOLTAGE,
164  state_class=SensorStateClass.MEASUREMENT,
165  entity_category=EntityCategory.DIAGNOSTIC,
166  ),
168  key="session_energy_wh",
169  translation_key="session_energy_wh",
170  native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
171  suggested_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
172  value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].session_energy_wh,
173  device_class=SensorDeviceClass.ENERGY,
174  state_class=SensorStateClass.TOTAL_INCREASING,
175  ),
177  key="energy_kWh",
178  native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
179  suggested_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
180  value_fn=lambda data: data[WALLCONNECTOR_DATA_LIFETIME].energy_wh,
181  device_class=SensorDeviceClass.ENERGY,
182  state_class=SensorStateClass.TOTAL_INCREASING,
183  ),
184 ]
185 
186 
188  hass: HomeAssistant,
189  config_entry: ConfigEntry,
190  async_add_entities: AddEntitiesCallback,
191 ) -> None:
192  """Create the Wall Connector sensor devices."""
193  wall_connector_data = hass.data[DOMAIN][config_entry.entry_id]
194 
195  all_entities = [
196  WallConnectorSensorEntity(wall_connector_data, description)
197  for description in WALL_CONNECTOR_SENSORS
198  ]
199 
200  async_add_entities(all_entities)
201 
202 
204  """Wall Connector Sensor Entity."""
205 
206  entity_description: WallConnectorSensorDescription
207 
208  def __init__(
209  self,
210  wall_connector_data: WallConnectorData,
211  description: WallConnectorSensorDescription,
212  ) -> None:
213  """Initialize WallConnectorSensorEntity."""
214  self.entity_descriptionentity_description = description
215  super().__init__(wall_connector_data)
216 
217  @property
218  def native_value(self):
219  """Return the state of the sensor."""
220 
221  return self.entity_descriptionentity_description.value_fn(self.coordinator.data)
None __init__(self, WallConnectorData wall_connector_data, WallConnectorSensorDescription description)
Definition: sensor.py:212
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:191