Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Rheem EcoNet water heaters."""
2 
3 from __future__ import annotations
4 
5 from pyeconet.equipment import Equipment, EquipmentType
6 
8  SensorDeviceClass,
9  SensorEntity,
10  SensorEntityDescription,
11  SensorStateClass,
12 )
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.const import (
15  PERCENTAGE,
16  SIGNAL_STRENGTH_DECIBELS,
17  EntityCategory,
18  UnitOfEnergy,
19  UnitOfVolume,
20 )
21 from homeassistant.core import HomeAssistant
22 from homeassistant.helpers.entity_platform import AddEntitiesCallback
23 
24 from .const import DOMAIN, EQUIPMENT
25 from .entity import EcoNetEntity
26 
27 SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
29  key="tank_health",
30  name="tank_health",
31  native_unit_of_measurement=PERCENTAGE,
32  state_class=SensorStateClass.MEASUREMENT,
33  ),
35  key="tank_hot_water_availability",
36  name="available_hot_water",
37  native_unit_of_measurement=PERCENTAGE,
38  state_class=SensorStateClass.MEASUREMENT,
39  ),
41  key="compressor_health",
42  name="compressor_health",
43  native_unit_of_measurement=PERCENTAGE,
44  state_class=SensorStateClass.MEASUREMENT,
45  ),
47  key="override_status",
48  name="override_status",
49  ),
51  key="todays_water_usage",
52  name="water_usage_today",
53  native_unit_of_measurement=UnitOfVolume.GALLONS,
54  device_class=SensorDeviceClass.WATER,
55  state_class=SensorStateClass.TOTAL_INCREASING,
56  ),
58  key="todays_energy_usage",
59  name="power_usage_today",
60  native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
61  device_class=SensorDeviceClass.ENERGY,
62  state_class=SensorStateClass.TOTAL_INCREASING,
63  ),
65  key="alert_count",
66  name="alert_count",
67  ),
69  key="wifi_signal",
70  name="wifi_signal",
71  native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
72  device_class=SensorDeviceClass.SIGNAL_STRENGTH,
73  state_class=SensorStateClass.MEASUREMENT,
74  entity_registry_enabled_default=False,
75  entity_category=EntityCategory.DIAGNOSTIC,
76  ),
78  key="running_state",
79  name="running_state",
80  ),
81 )
82 
83 
85  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
86 ) -> None:
87  """Set up EcoNet sensor based on a config entry."""
88 
89  data = hass.data[DOMAIN][EQUIPMENT][entry.entry_id]
90  equipment = data[EquipmentType.WATER_HEATER].copy()
91  equipment.extend(data[EquipmentType.THERMOSTAT].copy())
92 
93  sensors = [
94  EcoNetSensor(_equip, description)
95  for _equip in equipment
96  for description in SENSOR_TYPES
97  if getattr(_equip, description.key, False) is not False
98  ]
99 
100  async_add_entities(sensors)
101 
102 
104  """Define a Econet sensor."""
105 
106  def __init__(
107  self,
108  econet_device: Equipment,
109  description: SensorEntityDescription,
110  ) -> None:
111  """Initialize."""
112  super().__init__(econet_device)
113  self.entity_descriptionentity_description = description
114  self._attr_name_attr_name_attr_name = f"{econet_device.device_name}_{description.name}"
115  self._attr_unique_id_attr_unique_id_attr_unique_id = (
116  f"{econet_device.device_id}_{econet_device.device_name}_{description.name}"
117  )
118 
119  @property
120  def native_value(self):
121  """Return sensors state."""
122  value = getattr(self._econet_econet, self.entity_descriptionentity_description.key)
123  if self.entity_descriptionentity_description.name == "power_usage_today":
124  if self._econet_econet.energy_type == "KBTU":
125  value = value * 0.2930710702 # Convert kBtu to kWh
126  if isinstance(value, float):
127  value = round(value, 2)
128  return value
None __init__(self, Equipment econet_device, SensorEntityDescription description)
Definition: sensor.py:110
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:86