Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Binary Sensor platform for FireServiceRota integration."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from homeassistant.components.binary_sensor import BinarySensorEntity
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.core import HomeAssistant
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12  CoordinatorEntity,
13  DataUpdateCoordinator,
14 )
15 
16 from . import FireServiceRotaClient
17 from .const import DATA_CLIENT, DATA_COORDINATOR, DOMAIN as FIRESERVICEROTA_DOMAIN
18 
19 
21  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
22 ) -> None:
23  """Set up FireServiceRota binary sensor based on a config entry."""
24 
25  client: FireServiceRotaClient = hass.data[FIRESERVICEROTA_DOMAIN][entry.entry_id][
26  DATA_CLIENT
27  ]
28 
29  coordinator: DataUpdateCoordinator = hass.data[FIRESERVICEROTA_DOMAIN][
30  entry.entry_id
31  ][DATA_COORDINATOR]
32 
33  async_add_entities([ResponseBinarySensor(coordinator, client, entry)])
34 
35 
37  """Representation of an FireServiceRota sensor."""
38 
39  _attr_has_entity_name = True
40  _attr_translation_key = "duty"
41 
42  def __init__(
43  self,
44  coordinator: DataUpdateCoordinator,
45  client: FireServiceRotaClient,
46  entry: ConfigEntry,
47  ) -> None:
48  """Initialize."""
49  super().__init__(coordinator)
50  self._client_client = client
51  self._attr_unique_id_attr_unique_id = f"{entry.unique_id}_Duty"
52 
53  @property
54  def is_on(self) -> bool | None:
55  """Return the state of the binary sensor."""
56  return self._client_client.on_duty
57 
58  @property
59  def extra_state_attributes(self) -> dict[str, Any]:
60  """Return available attributes for binary sensor."""
61  attr: dict[str, Any] = {}
62  if not self.coordinator.data:
63  return attr
64 
65  data = self.coordinator.data
66  return {
67  key: data[key]
68  for key in (
69  "start_time",
70  "end_time",
71  "available",
72  "active",
73  "assigned_function_ids",
74  "skill_ids",
75  "type",
76  "assigned_function",
77  )
78  if key in data
79  }
None __init__(self, DataUpdateCoordinator coordinator, FireServiceRotaClient client, ConfigEntry entry)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)