Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Modern Forms switches."""
2 
3 from __future__ import annotations
4 
5 from datetime import datetime
6 
7 from homeassistant.components.sensor import SensorDeviceClass, SensorEntity
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.core import HomeAssistant
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
11 from homeassistant.helpers.typing import StateType
12 from homeassistant.util import dt as dt_util
13 
14 from .const import CLEAR_TIMER, DOMAIN
15 from .coordinator import ModernFormsDataUpdateCoordinator
16 from .entity import ModernFormsDeviceEntity
17 
18 
20  hass: HomeAssistant,
21  entry: ConfigEntry,
22  async_add_entities: AddEntitiesCallback,
23 ) -> None:
24  """Set up Modern Forms sensor based on a config entry."""
25  coordinator: ModernFormsDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
26 
27  sensors: list[ModernFormsSensor] = [
28  ModernFormsFanTimerRemainingTimeSensor(entry.entry_id, coordinator),
29  ]
30 
31  # Only setup light sleep timer sensor if light unit installed
32  if coordinator.data.info.light_type:
33  sensors.append(
34  ModernFormsLightTimerRemainingTimeSensor(entry.entry_id, coordinator)
35  )
36 
37  async_add_entities(sensors)
38 
39 
41  """Defines a Modern Forms binary sensor."""
42 
43  def __init__(
44  self,
45  *,
46  entry_id: str,
47  coordinator: ModernFormsDataUpdateCoordinator,
48  key: str,
49  ) -> None:
50  """Initialize Modern Forms switch."""
51  self._key_key = key
52  super().__init__(entry_id=entry_id, coordinator=coordinator)
53  self._attr_unique_id_attr_unique_id = f"{self.coordinator.data.info.mac_address}_{self._key}"
54 
55 
57  """Defines the Modern Forms Light Timer remaining time sensor."""
58 
59  _attr_translation_key = "light_timer_remaining_time"
60 
61  def __init__(
62  self, entry_id: str, coordinator: ModernFormsDataUpdateCoordinator
63  ) -> None:
64  """Initialize Modern Forms Away mode switch."""
65  super().__init__(
66  coordinator=coordinator,
67  entry_id=entry_id,
68  key="light_timer_remaining_time",
69  )
70  self._attr_device_class_attr_device_class = SensorDeviceClass.TIMESTAMP
71 
72  @property
73  def native_value(self) -> StateType | datetime:
74  """Return the state of the sensor."""
75  sleep_time: datetime = dt_util.utc_from_timestamp(
76  self.coordinator.data.state.light_sleep_timer
77  )
78  if (
79  self.coordinator.data.state.light_sleep_timer == CLEAR_TIMER
80  or (sleep_time - dt_util.utcnow()).total_seconds() < 0
81  ):
82  return None
83  return sleep_time
84 
85 
87  """Defines the Modern Forms Light Timer remaining time sensor."""
88 
89  _attr_translation_key = "fan_timer_remaining_time"
90 
91  def __init__(
92  self, entry_id: str, coordinator: ModernFormsDataUpdateCoordinator
93  ) -> None:
94  """Initialize Modern Forms Away mode switch."""
95  super().__init__(
96  coordinator=coordinator,
97  entry_id=entry_id,
98  key="fan_timer_remaining_time",
99  )
100  self._attr_device_class_attr_device_class = SensorDeviceClass.TIMESTAMP
101 
102  @property
103  def native_value(self) -> StateType | datetime:
104  """Return the state of the sensor."""
105  sleep_time: datetime = dt_util.utc_from_timestamp(
106  self.coordinator.data.state.fan_sleep_timer
107  )
108 
109  if (
110  self.coordinator.data.state.fan_sleep_timer == CLEAR_TIMER
111  or (sleep_time - dt_util.utcnow()).total_seconds() < 0
112  ):
113  return None
114 
115  return sleep_time
None __init__(self, str entry_id, ModernFormsDataUpdateCoordinator coordinator)
Definition: sensor.py:93
None __init__(self, str entry_id, ModernFormsDataUpdateCoordinator coordinator)
Definition: sensor.py:63
None __init__(self, *str entry_id, ModernFormsDataUpdateCoordinator coordinator, str key)
Definition: sensor.py:49
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:23