Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Flo Water Monitor sensors."""
2 
3 from __future__ import annotations
4 
6  SensorDeviceClass,
7  SensorEntity,
8  SensorStateClass,
9 )
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import (
12  PERCENTAGE,
13  UnitOfPressure,
14  UnitOfTemperature,
15  UnitOfVolume,
16  UnitOfVolumeFlowRate,
17 )
18 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 
21 from .const import DOMAIN as FLO_DOMAIN
22 from .coordinator import FloDeviceDataUpdateCoordinator
23 from .entity import FloEntity
24 
25 
27  hass: HomeAssistant,
28  config_entry: ConfigEntry,
29  async_add_entities: AddEntitiesCallback,
30 ) -> None:
31  """Set up the Flo sensors from config entry."""
32  devices: list[FloDeviceDataUpdateCoordinator] = hass.data[FLO_DOMAIN][
33  config_entry.entry_id
34  ]["devices"]
35  entities = []
36  for device in devices:
37  if device.device_type == "puck_oem":
38  entities.extend(
39  [
40  FloTemperatureSensor(device, False),
41  FloHumiditySensor(device),
42  FloBatterySensor(device),
43  ]
44  )
45  else:
46  entities.extend(
47  [
48  FloDailyUsageSensor(device),
49  FloSystemModeSensor(device),
51  FloTemperatureSensor(device, True),
52  FloPressureSensor(device),
53  ]
54  )
55  async_add_entities(entities)
56 
57 
59  """Monitors the daily water usage."""
60 
61  _attr_native_unit_of_measurement = UnitOfVolume.GALLONS
62  _attr_state_class: SensorStateClass = SensorStateClass.TOTAL_INCREASING
63  _attr_device_class = SensorDeviceClass.WATER
64  _attr_translation_key = "daily_consumption"
65 
66  def __init__(self, device):
67  """Initialize the daily water usage sensor."""
68  super().__init__("daily_consumption", device)
69 
70  @property
71  def native_value(self) -> float | None:
72  """Return the current daily usage."""
73  if self._device.consumption_today is None:
74  return None
75  return round(self._device.consumption_today, 1)
76 
77 
79  """Monitors the current Flo system mode."""
80 
81  _attr_translation_key = "current_system_mode"
82 
83  def __init__(self, device):
84  """Initialize the system mode sensor."""
85  super().__init__("current_system_mode", device)
86 
87  @property
88  def native_value(self) -> str | None:
89  """Return the current system mode."""
90  if not self._device.current_system_mode:
91  return None
92  return self._device.current_system_mode
93 
94 
96  """Monitors the current water flow rate."""
97 
98  _attr_native_unit_of_measurement = UnitOfVolumeFlowRate.GALLONS_PER_MINUTE
99  _attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
100  _attr_device_class = SensorDeviceClass.VOLUME_FLOW_RATE
101  _attr_translation_key = "current_flow_rate"
102 
103  def __init__(self, device):
104  """Initialize the flow rate sensor."""
105  super().__init__("current_flow_rate", device)
106 
107  @property
108  def native_value(self) -> float | None:
109  """Return the current flow rate."""
110  if self._device.current_flow_rate is None:
111  return None
112  return round(self._device.current_flow_rate, 1)
113 
114 
116  """Monitors the temperature."""
117 
118  _attr_device_class = SensorDeviceClass.TEMPERATURE
119  _attr_native_unit_of_measurement = UnitOfTemperature.FAHRENHEIT
120  _attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
121 
122  def __init__(self, device, is_water):
123  """Initialize the temperature sensor."""
124  super().__init__("temperature", device)
125  if is_water:
126  self._attr_translation_key_attr_translation_key = "water_temperature"
127 
128  @property
129  def native_value(self) -> float | None:
130  """Return the current temperature."""
131  if self._device.temperature is None:
132  return None
133  return round(self._device.temperature, 1)
134 
135 
137  """Monitors the humidity."""
138 
139  _attr_device_class = SensorDeviceClass.HUMIDITY
140  _attr_native_unit_of_measurement = PERCENTAGE
141  _attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
142 
143  def __init__(self, device):
144  """Initialize the humidity sensor."""
145  super().__init__("humidity", device)
146 
147  @property
148  def native_value(self) -> float | None:
149  """Return the current humidity."""
150  if self._device.humidity is None:
151  return None
152  return round(self._device.humidity, 1)
153 
154 
156  """Monitors the water pressure."""
157 
158  _attr_device_class = SensorDeviceClass.PRESSURE
159  _attr_native_unit_of_measurement = UnitOfPressure.PSI
160  _attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
161  _attr_translation_key = "water_pressure"
162 
163  def __init__(self, device):
164  """Initialize the pressure sensor."""
165  super().__init__("water_pressure", device)
166 
167  @property
168  def native_value(self) -> float | None:
169  """Return the current water pressure."""
170  if self._device.current_psi is None:
171  return None
172  return round(self._device.current_psi, 1)
173 
174 
176  """Monitors the battery level for battery-powered leak detectors."""
177 
178  _attr_device_class = SensorDeviceClass.BATTERY
179  _attr_native_unit_of_measurement = PERCENTAGE
180  _attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
181 
182  def __init__(self, device):
183  """Initialize the battery sensor."""
184  super().__init__("battery", device)
185 
186  @property
187  def native_value(self) -> float | None:
188  """Return the current battery level."""
189  return self._device.battery_level
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:30