Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Ebusd sensors."""
2 
3 from __future__ import annotations
4 
5 import datetime
6 import logging
7 
8 from homeassistant.components.sensor import SensorEntity
9 from homeassistant.core import HomeAssistant
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
11 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
12 from homeassistant.util import Throttle
13 import homeassistant.util.dt as dt_util
14 
15 from .const import DOMAIN
16 
17 TIME_FRAME1_BEGIN = "time_frame1_begin"
18 TIME_FRAME1_END = "time_frame1_end"
19 TIME_FRAME2_BEGIN = "time_frame2_begin"
20 TIME_FRAME2_END = "time_frame2_end"
21 TIME_FRAME3_BEGIN = "time_frame3_begin"
22 TIME_FRAME3_END = "time_frame3_end"
23 MIN_TIME_BETWEEN_UPDATES = datetime.timedelta(seconds=15)
24 
25 _LOGGER = logging.getLogger(__name__)
26 
27 
29  hass: HomeAssistant,
30  config: ConfigType,
31  add_entities: AddEntitiesCallback,
32  discovery_info: DiscoveryInfoType | None = None,
33 ) -> None:
34  """Set up the Ebus sensor."""
35  if not discovery_info:
36  return
37  ebusd_api = hass.data[DOMAIN]
38  monitored_conditions = discovery_info["monitored_conditions"]
39  name = discovery_info["client_name"]
40 
42  (
43  EbusdSensor(ebusd_api, discovery_info["sensor_types"][condition], name)
44  for condition in monitored_conditions
45  ),
46  True,
47  )
48 
49 
51  """Ebusd component sensor methods definition."""
52 
53  def __init__(self, data, sensor, name):
54  """Initialize the sensor."""
55  self._state_state = None
56  self._client_name_client_name = name
57  (
58  self._name,
59  self._unit_of_measurement,
60  self._icon,
61  self._type_type,
62  self._device_class,
63  ) = sensor
64  self.datadata = data
65 
66  @property
67  def name(self):
68  """Return the name of the sensor."""
69  return f"{self._client_name} {self._name}"
70 
71  @property
72  def native_value(self):
73  """Return the state of the sensor."""
74  return self._state_state
75 
76  @property
78  """Return the device state attributes."""
79  if self._type_type == 1 and self._state_state is not None:
80  schedule = {
81  TIME_FRAME1_BEGIN: None,
82  TIME_FRAME1_END: None,
83  TIME_FRAME2_BEGIN: None,
84  TIME_FRAME2_END: None,
85  TIME_FRAME3_BEGIN: None,
86  TIME_FRAME3_END: None,
87  }
88  time_frame = self._state_state.split(";")
89  for index, item in enumerate(sorted(schedule.items())):
90  if index < len(time_frame):
91  parsed = datetime.datetime.strptime(time_frame[index], "%H:%M")
92  parsed = parsed.replace(
93  dt_util.now().year, dt_util.now().month, dt_util.now().day
94  )
95  schedule[item[0]] = parsed.isoformat()
96  return schedule
97  return None
98 
99  @property
100  def device_class(self):
101  """Return the class of this device, from component DEVICE_CLASSES."""
102  return self._device_class
103 
104  @property
105  def icon(self):
106  """Icon to use in the frontend, if any."""
107  return self._icon
108 
109  @property
111  """Return the unit of measurement."""
112  return self._unit_of_measurement
113 
114  @Throttle(MIN_TIME_BETWEEN_UPDATES)
115  def update(self) -> None:
116  """Fetch new state data for the sensor."""
117  try:
118  self.datadata.update(self._name, self._type_type)
119  if self._name not in self.datadata.value:
120  return
121 
122  self._state_state = self.datadata.value[self._name]
123  except RuntimeError:
124  _LOGGER.debug("EbusdData.update exception")
def __init__(self, data, sensor, name)
Definition: sensor.py:53
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:33
def add_entities(account, async_add_entities, tracked)
Definition: sensor.py:40