1 """AVM FRITZ!Box connectivity sensor."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
10 BinarySensorDeviceClass,
12 BinarySensorEntityDescription,
19 from .const
import DOMAIN
20 from .coordinator
import AvmWrapper, ConnectionInfo
21 from .entity
import FritzBoxBaseCoordinatorEntity, FritzEntityDescription
23 _LOGGER = logging.getLogger(__name__)
26 @dataclass(frozen=True, kw_only=True)
28 BinarySensorEntityDescription, FritzEntityDescription
30 """Describes Fritz sensor entity."""
32 is_suitable: Callable[[ConnectionInfo], bool] =
lambda info: info.wan_enabled
35 SENSOR_TYPES: tuple[FritzBinarySensorEntityDescription, ...] = (
38 translation_key=
"is_connected",
39 device_class=BinarySensorDeviceClass.CONNECTIVITY,
40 entity_category=EntityCategory.DIAGNOSTIC,
41 value_fn=
lambda status, _:
bool(status.is_connected),
45 translation_key=
"is_linked",
46 device_class=BinarySensorDeviceClass.PLUG,
47 entity_category=EntityCategory.DIAGNOSTIC,
48 value_fn=
lambda status, _:
bool(status.is_linked),
54 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
57 _LOGGER.debug(
"Setting up FRITZ!Box binary sensors")
58 avm_wrapper: AvmWrapper = hass.data[DOMAIN][entry.entry_id]
60 connection_info = await avm_wrapper.async_get_connection_info()
64 for description
in SENSOR_TYPES
65 if description.is_suitable(connection_info)
72 """Define FRITZ!Box connectivity class."""
74 entity_description: FritzBinarySensorEntityDescription
78 """Return true if the binary sensor is on."""
80 state := self.coordinator.data[
"entity_states"].
get(
web.Response get(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)