Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Ombi."""
2 
3 from __future__ import annotations
4 
5 from datetime import timedelta
6 import logging
7 
8 from pyombi import OmbiError
9 
10 from homeassistant.components.sensor import SensorEntity, SensorEntityDescription
11 from homeassistant.core import HomeAssistant
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
14 
15 from .const import DOMAIN
16 
17 _LOGGER = logging.getLogger(__name__)
18 
19 SCAN_INTERVAL = timedelta(seconds=60)
20 
21 
22 SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
24  key="movies",
25  name="Movie requests",
26  icon="mdi:movie",
27  ),
29  key="tv",
30  name="TV show requests",
31  icon="mdi:television-classic",
32  ),
34  key="music",
35  name="Music album requests",
36  icon="mdi:album",
37  ),
39  key="pending",
40  name="Pending requests",
41  icon="mdi:clock-alert-outline",
42  ),
44  key="approved",
45  name="Approved requests",
46  icon="mdi:check",
47  ),
49  key="available",
50  name="Available requests",
51  icon="mdi:download",
52  ),
53 )
54 
55 
57  hass: HomeAssistant,
58  config: ConfigType,
59  add_entities: AddEntitiesCallback,
60  discovery_info: DiscoveryInfoType | None = None,
61 ) -> None:
62  """Set up the Ombi sensor platform."""
63  if discovery_info is None:
64  return
65 
66  ombi = hass.data[DOMAIN]["instance"]
67 
68  entities = [OmbiSensor(ombi, description) for description in SENSOR_TYPES]
69 
70  add_entities(entities, True)
71 
72 
74  """Representation of an Ombi sensor."""
75 
76  def __init__(self, ombi, description: SensorEntityDescription) -> None:
77  """Initialize the sensor."""
78  self.entity_descriptionentity_description = description
79  self._ombi_ombi = ombi
80 
81  self._attr_name_attr_name = f"Ombi {description.name}"
82 
83  def update(self) -> None:
84  """Update the sensor."""
85  try:
86  sensor_type = self.entity_descriptionentity_description.key
87  if sensor_type == "movies":
88  self._attr_native_value_attr_native_value = self._ombi_ombi.movie_requests
89  elif sensor_type == "tv":
90  self._attr_native_value_attr_native_value = self._ombi_ombi.tv_requests
91  elif sensor_type == "music":
92  self._attr_native_value_attr_native_value = self._ombi_ombi.music_requests
93  elif sensor_type == "pending":
94  self._attr_native_value_attr_native_value = self._ombi_ombi.total_requests["pending"]
95  elif sensor_type == "approved":
96  self._attr_native_value_attr_native_value = self._ombi_ombi.total_requests["approved"]
97  elif sensor_type == "available":
98  self._attr_native_value_attr_native_value = self._ombi_ombi.total_requests["available"]
99  except OmbiError as err:
100  _LOGGER.warning("Unable to update Ombi sensor: %s", err)
101  self._attr_native_value_attr_native_value = None
None __init__(self, ombi, SensorEntityDescription description)
Definition: sensor.py:76
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:61