Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for monitoring juicenet/juicepoint/juicebox based EVSE sensors."""
2 
3 from __future__ import annotations
4 
6  SensorDeviceClass,
7  SensorEntity,
8  SensorEntityDescription,
9  SensorStateClass,
10 )
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.const import (
13  UnitOfElectricCurrent,
14  UnitOfElectricPotential,
15  UnitOfEnergy,
16  UnitOfPower,
17  UnitOfTemperature,
18  UnitOfTime,
19 )
20 from homeassistant.core import HomeAssistant
21 from homeassistant.helpers.entity_platform import AddEntitiesCallback
22 
23 from .const import DOMAIN, JUICENET_API, JUICENET_COORDINATOR
24 from .entity import JuiceNetDevice
25 
26 SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
28  key="status",
29  name="Charging Status",
30  ),
32  key="temperature",
33  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
34  device_class=SensorDeviceClass.TEMPERATURE,
35  state_class=SensorStateClass.MEASUREMENT,
36  ),
38  key="voltage",
39  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
40  device_class=SensorDeviceClass.VOLTAGE,
41  ),
43  key="amps",
44  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
45  device_class=SensorDeviceClass.CURRENT,
46  state_class=SensorStateClass.MEASUREMENT,
47  ),
49  key="watts",
50  native_unit_of_measurement=UnitOfPower.WATT,
51  device_class=SensorDeviceClass.POWER,
52  state_class=SensorStateClass.MEASUREMENT,
53  ),
55  key="charge_time",
56  translation_key="charge_time",
57  native_unit_of_measurement=UnitOfTime.SECONDS,
58  icon="mdi:timer-outline",
59  ),
61  key="energy_added",
62  translation_key="energy_added",
63  native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
64  device_class=SensorDeviceClass.ENERGY,
65  state_class=SensorStateClass.TOTAL_INCREASING,
66  ),
67 )
68 
69 
71  hass: HomeAssistant,
72  config_entry: ConfigEntry,
73  async_add_entities: AddEntitiesCallback,
74 ) -> None:
75  """Set up the JuiceNet Sensors."""
76  juicenet_data = hass.data[DOMAIN][config_entry.entry_id]
77  api = juicenet_data[JUICENET_API]
78  coordinator = juicenet_data[JUICENET_COORDINATOR]
79 
80  entities = [
81  JuiceNetSensorDevice(device, coordinator, description)
82  for device in api.devices
83  for description in SENSOR_TYPES
84  ]
85  async_add_entities(entities)
86 
87 
89  """Implementation of a JuiceNet sensor."""
90 
91  def __init__(
92  self, device, coordinator, description: SensorEntityDescription
93  ) -> None:
94  """Initialise the sensor."""
95  super().__init__(device, description.key, coordinator)
96  self.entity_descriptionentity_description = description
97 
98  @property
99  def icon(self):
100  """Return the icon of the sensor."""
101  icon = None
102  if self.entity_descriptionentity_description.key == "status":
103  status = self.devicedevice.status
104  if status == "standby":
105  icon = "mdi:power-plug-off"
106  elif status == "plugged":
107  icon = "mdi:power-plug"
108  elif status == "charging":
109  icon = "mdi:battery-positive"
110  else:
111  icon = self.entity_descriptionentity_description.icon
112  return icon
113 
114  @property
115  def native_value(self):
116  """Return the state."""
117  return getattr(self.devicedevice, self.entity_descriptionentity_description.key, None)
None __init__(self, device, coordinator, SensorEntityDescription description)
Definition: sensor.py:93
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:74