Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Support for Modern Forms Binary Sensors."""
2 
3 from __future__ import annotations
4 
5 from homeassistant.components.binary_sensor import BinarySensorEntity
6 from homeassistant.config_entries import ConfigEntry
7 from homeassistant.core import HomeAssistant
8 from homeassistant.helpers.entity_platform import AddEntitiesCallback
9 from homeassistant.util import dt as dt_util
10 
11 from .const import CLEAR_TIMER, DOMAIN
12 from .coordinator import ModernFormsDataUpdateCoordinator
13 from .entity import ModernFormsDeviceEntity
14 
15 
17  hass: HomeAssistant,
18  entry: ConfigEntry,
19  async_add_entities: AddEntitiesCallback,
20 ) -> None:
21  """Set up Modern Forms binary sensors."""
22  coordinator: ModernFormsDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
23 
24  binary_sensors: list[ModernFormsBinarySensor] = [
25  ModernFormsFanSleepTimerActive(entry.entry_id, coordinator),
26  ]
27 
28  # Only setup light sleep timer sensor if light unit installed
29  if coordinator.data.info.light_type:
30  binary_sensors.append(
31  ModernFormsLightSleepTimerActive(entry.entry_id, coordinator)
32  )
33 
34  async_add_entities(binary_sensors)
35 
36 
38  """Defines a Modern Forms binary sensor."""
39 
40  def __init__(
41  self,
42  *,
43  entry_id: str,
44  coordinator: ModernFormsDataUpdateCoordinator,
45  key: str,
46  ) -> None:
47  """Initialize Modern Forms switch."""
48  super().__init__(entry_id=entry_id, coordinator=coordinator)
49 
50  self._attr_unique_id_attr_unique_id = f"{coordinator.data.info.mac_address}_{key}"
51 
52 
54  """Defines a Modern Forms Light Sleep Timer Active sensor."""
55 
56  _attr_entity_registry_enabled_default = False
57  _attr_translation_key = "light_sleep_timer_active"
58 
59  def __init__(
60  self, entry_id: str, coordinator: ModernFormsDataUpdateCoordinator
61  ) -> None:
62  """Initialize Modern Forms Light Sleep Timer Active sensor."""
63  super().__init__(
64  coordinator=coordinator,
65  entry_id=entry_id,
66  key="light_sleep_timer_active",
67  )
68 
69  @property
70  def is_on(self) -> bool:
71  """Return the state of the timer."""
72  return not (
73  self.coordinator.data.state.light_sleep_timer == CLEAR_TIMER
74  or (
75  dt_util.utc_from_timestamp(
76  self.coordinator.data.state.light_sleep_timer
77  )
78  - dt_util.utcnow()
79  ).total_seconds()
80  < 0
81  )
82 
83 
85  """Defines a Modern Forms Fan Sleep Timer Active sensor."""
86 
87  _attr_entity_registry_enabled_default = False
88  _attr_translation_key = "fan_sleep_timer_active"
89 
90  def __init__(
91  self, entry_id: str, coordinator: ModernFormsDataUpdateCoordinator
92  ) -> None:
93  """Initialize Modern Forms Fan Sleep Timer Active sensor."""
94  super().__init__(
95  coordinator=coordinator,
96  entry_id=entry_id,
97  key="fan_sleep_timer_active",
98  )
99 
100  @property
101  def is_on(self) -> bool:
102  """Return the state of the timer."""
103  return not (
104  self.coordinator.data.state.fan_sleep_timer == CLEAR_TIMER
105  or (
106  dt_util.utc_from_timestamp(self.coordinator.data.state.fan_sleep_timer)
107  - dt_util.utcnow()
108  ).total_seconds()
109  < 0
110  )
None __init__(self, *str entry_id, ModernFormsDataUpdateCoordinator coordinator, str key)
None __init__(self, str entry_id, ModernFormsDataUpdateCoordinator coordinator)
None __init__(self, str entry_id, ModernFormsDataUpdateCoordinator coordinator)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)