Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Philips TV binary sensors."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass
6 
7 from haphilipsjs import PhilipsTV
8 
10  BinarySensorEntity,
11  BinarySensorEntityDescription,
12 )
13 from homeassistant.core import HomeAssistant, callback
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 
16 from . import PhilipsTVConfigEntry
17 from .coordinator import PhilipsTVDataUpdateCoordinator
18 from .entity import PhilipsJsEntity
19 
20 
21 @dataclass(frozen=True, kw_only=True)
23  """A entity description for Philips TV binary sensor."""
24 
25  recording_value: str
26 
27 
28 DESCRIPTIONS = (
30  key="recording_ongoing",
31  translation_key="recording_ongoing",
32  recording_value="RECORDING_ONGOING",
33  ),
35  key="recording_new",
36  translation_key="recording_new",
37  recording_value="RECORDING_NEW",
38  ),
39 )
40 
41 
43  hass: HomeAssistant,
44  config_entry: PhilipsTVConfigEntry,
45  async_add_entities: AddEntitiesCallback,
46 ) -> None:
47  """Set up the configuration entry."""
48  coordinator = config_entry.runtime_data
49 
50  if (
51  coordinator.api.json_feature_supported("recordings", "List")
52  and coordinator.api.api_version == 6
53  ):
55  PhilipsTVBinarySensorEntityRecordingType(coordinator, description)
56  for description in DESCRIPTIONS
57  )
58 
59 
60 def _check_for_recording_entry(api: PhilipsTV, entry: str, value: str) -> bool:
61  """Return True if at least one specified value is available within entry of list."""
62  if api.recordings_list is None:
63  return False
64  return any(rec.get(entry) == value for rec in api.recordings_list["recordings"])
65 
66 
68  """A Philips TV binary sensor class, which allows multiple entities given by a BinarySensorEntityDescription."""
69 
70  entity_description: PhilipsTVBinarySensorEntityDescription
71 
72  def __init__(
73  self,
74  coordinator: PhilipsTVDataUpdateCoordinator,
75  description: PhilipsTVBinarySensorEntityDescription,
76  ) -> None:
77  """Initialize entity class."""
78  self.entity_descriptionentity_description = description
79  self._attr_unique_id_attr_unique_id = f"{coordinator.unique_id}_{description.key}"
80  self._attr_device_info_attr_device_info_attr_device_info = coordinator.device_info
82  coordinator.api,
83  "RecordingType",
84  description.recording_value,
85  )
86 
87  super().__init__(coordinator)
88 
89  @callback
90  def _handle_coordinator_update(self) -> None:
91  """Handle updated data from the coordinator and set is_on true if one specified value is available within given entry of list."""
92  self._attr_is_on_attr_is_on = _check_for_recording_entry(
93  self.coordinator.api,
94  "RecordingType",
95  self.entity_descriptionentity_description.recording_value,
96  )
None __init__(self, PhilipsTVDataUpdateCoordinator coordinator, PhilipsTVBinarySensorEntityDescription description)
None async_setup_entry(HomeAssistant hass, PhilipsTVConfigEntry config_entry, AddEntitiesCallback async_add_entities)
bool _check_for_recording_entry(PhilipsTV api, str entry, str value)