Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """AVM FRITZ!Box connectivity sensor."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 import logging
8 
10  BinarySensorDeviceClass,
11  BinarySensorEntity,
12  BinarySensorEntityDescription,
13 )
14 from homeassistant.config_entries import ConfigEntry
15 from homeassistant.const import EntityCategory
16 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 
19 from .const import DOMAIN
20 from .coordinator import AvmWrapper, ConnectionInfo
21 from .entity import FritzBoxBaseCoordinatorEntity, FritzEntityDescription
22 
23 _LOGGER = logging.getLogger(__name__)
24 
25 
26 @dataclass(frozen=True, kw_only=True)
28  BinarySensorEntityDescription, FritzEntityDescription
29 ):
30  """Describes Fritz sensor entity."""
31 
32  is_suitable: Callable[[ConnectionInfo], bool] = lambda info: info.wan_enabled
33 
34 
35 SENSOR_TYPES: tuple[FritzBinarySensorEntityDescription, ...] = (
37  key="is_connected",
38  translation_key="is_connected",
39  device_class=BinarySensorDeviceClass.CONNECTIVITY,
40  entity_category=EntityCategory.DIAGNOSTIC,
41  value_fn=lambda status, _: bool(status.is_connected),
42  ),
44  key="is_linked",
45  translation_key="is_linked",
46  device_class=BinarySensorDeviceClass.PLUG,
47  entity_category=EntityCategory.DIAGNOSTIC,
48  value_fn=lambda status, _: bool(status.is_linked),
49  ),
50 )
51 
52 
54  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
55 ) -> None:
56  """Set up entry."""
57  _LOGGER.debug("Setting up FRITZ!Box binary sensors")
58  avm_wrapper: AvmWrapper = hass.data[DOMAIN][entry.entry_id]
59 
60  connection_info = await avm_wrapper.async_get_connection_info()
61 
62  entities = [
63  FritzBoxBinarySensor(avm_wrapper, entry.title, description)
64  for description in SENSOR_TYPES
65  if description.is_suitable(connection_info)
66  ]
67 
68  async_add_entities(entities)
69 
70 
72  """Define FRITZ!Box connectivity class."""
73 
74  entity_description: FritzBinarySensorEntityDescription
75 
76  @property
77  def is_on(self) -> bool | None:
78  """Return true if the binary sensor is on."""
79  if isinstance(
80  state := self.coordinator.data["entity_states"].get(
81  self.entity_descriptionentity_description.key
82  ),
83  bool,
84  ):
85  return state
86  return None
web.Response get(self, web.Request request, str config_key)
Definition: view.py:88
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)