Home Assistant Unofficial Reference 2024.12.1
binary_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 BINARY_SENSOR_PLATFORM_SCHEMA,
11  BinarySensorEntity,
12 )
13 from homeassistant.const import CONF_MONITORED_CONDITIONS
14 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
18 
19 from .const import DATA_RAINCLOUD, ICON_MAP
20 from .entity import RainCloudEntity
21 
22 _LOGGER = logging.getLogger(__name__)
23 
24 BINARY_SENSORS = ["is_watering", "status"]
25 
26 PLATFORM_SCHEMA = BINARY_SENSOR_PLATFORM_SCHEMA.extend(
27  {
28  vol.Optional(CONF_MONITORED_CONDITIONS, default=list(BINARY_SENSORS)): vol.All(
29  cv.ensure_list, [vol.In(BINARY_SENSORS)]
30  )
31  }
32 )
33 
34 
36  hass: HomeAssistant,
37  config: ConfigType,
38  add_entities: AddEntitiesCallback,
39  discovery_info: DiscoveryInfoType | None = None,
40 ) -> None:
41  """Set up a sensor for a raincloud device."""
42  raincloud = hass.data[DATA_RAINCLOUD].data
43 
44  sensors = []
45  for sensor_type in config[CONF_MONITORED_CONDITIONS]:
46  if sensor_type == "status":
47  sensors.append(RainCloudBinarySensor(raincloud.controller, sensor_type))
48  sensors.append(
49  RainCloudBinarySensor(raincloud.controller.faucet, sensor_type)
50  )
51 
52  else:
53  # create a sensor for each zone managed by faucet
54  sensors.extend(
55  RainCloudBinarySensor(zone, sensor_type)
56  for zone in raincloud.controller.faucet.zones
57  )
58 
59  add_entities(sensors, True)
60 
61 
63  """A sensor implementation for raincloud device."""
64 
65  @property
66  def is_on(self):
67  """Return true if the binary sensor is on."""
68  return self._state_state_state
69 
70  def update(self) -> None:
71  """Get the latest data and updates the state."""
72  _LOGGER.debug("Updating RainCloud sensor: %s", self._name_name)
73  self._state_state_state = getattr(self.datadata, self._sensor_type_sensor_type_sensor_type)
74  if self._sensor_type_sensor_type_sensor_type == "status":
75  self._state_state_state = self._state_state_state == "Online"
76 
77  @property
78  def icon(self):
79  """Return the icon of this device."""
80  if self._sensor_type_sensor_type_sensor_type == "is_watering":
81  return "mdi:water" if self.is_onis_on else "mdi:water-off"
82  if self._sensor_type_sensor_type_sensor_type == "status":
83  return "mdi:pipe" if self.is_onis_on else "mdi:pipe-disconnected"
84  return ICON_MAP.get(self._sensor_type_sensor_type_sensor_type)
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)