Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Melnor RainCloud sprinkler water timer."""
2 
3 from __future__ import annotations
4 
5 import logging
6 
7 import voluptuous as vol
8 
10  PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
11  SensorEntity,
12 )
13 from homeassistant.const import CONF_MONITORED_CONDITIONS, PERCENTAGE, UnitOfTime
14 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 from homeassistant.helpers.icon import icon_for_battery_level
18 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
19 
20 from .const import DATA_RAINCLOUD, ICON_MAP
21 from .entity import RainCloudEntity
22 
23 _LOGGER = logging.getLogger(__name__)
24 
25 SENSORS = ["battery", "next_cycle", "rain_delay", "watering_time"]
26 
27 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
28  {
29  vol.Optional(CONF_MONITORED_CONDITIONS, default=list(SENSORS)): vol.All(
30  cv.ensure_list, [vol.In(SENSORS)]
31  )
32  }
33 )
34 
35 UNIT_OF_MEASUREMENT_MAP = {
36  "auto_watering": "",
37  "battery": PERCENTAGE,
38  "is_watering": "",
39  "manual_watering": "",
40  "next_cycle": "",
41  "rain_delay": UnitOfTime.DAYS,
42  "status": "",
43  "watering_time": UnitOfTime.MINUTES,
44 }
45 
46 
48  hass: HomeAssistant,
49  config: ConfigType,
50  add_entities: AddEntitiesCallback,
51  discovery_info: DiscoveryInfoType | None = None,
52 ) -> None:
53  """Set up a sensor for a raincloud device."""
54  raincloud = hass.data[DATA_RAINCLOUD].data
55 
56  sensors = []
57  for sensor_type in config[CONF_MONITORED_CONDITIONS]:
58  if sensor_type == "battery":
59  sensors.append(RainCloudSensor(raincloud.controller.faucet, sensor_type))
60  else:
61  # create a sensor for each zone managed by a faucet
62  sensors.extend(
63  RainCloudSensor(zone, sensor_type)
64  for zone in raincloud.controller.faucet.zones
65  )
66 
67  add_entities(sensors, True)
68 
69 
71  """A sensor implementation for raincloud device."""
72 
73  @property
74  def native_value(self):
75  """Return the state of the sensor."""
76  return self._state_state_state
77 
78  @property
80  """Return the units of measurement."""
81  return UNIT_OF_MEASUREMENT_MAP.get(self._sensor_type_sensor_type_sensor_type)
82 
83  def update(self) -> None:
84  """Get the latest data and updates the states."""
85  _LOGGER.debug("Updating RainCloud sensor: %s", self._name_name)
86  if self._sensor_type_sensor_type_sensor_type == "battery":
87  self._state_state_state = self.datadata.battery
88  else:
89  self._state_state_state = getattr(self.datadata, self._sensor_type_sensor_type_sensor_type)
90 
91  @property
92  def icon(self):
93  """Icon to use in the frontend, if any."""
94  if self._sensor_type_sensor_type_sensor_type == "battery" and self._state_state_state is not None:
96  battery_level=int(self._state_state_state), charging=False
97  )
98  return ICON_MAP.get(self._sensor_type_sensor_type_sensor_type)
def add_entities(account, async_add_entities, tracked)
Definition: sensor.py:40
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:52
str icon_for_battery_level(int|None battery_level=None, bool charging=False)
Definition: icon.py:169