1 """Support for the NextDNS service."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
8 from nextdns
import ConnectionStatus
11 BinarySensorDeviceClass,
13 BinarySensorEntityDescription,
20 from .
import NextDnsConfigEntry
21 from .coordinator
import NextDnsUpdateCoordinator
26 @dataclass(frozen=True, kw_only=True)
28 """NextDNS binary sensor entity description."""
30 state: Callable[[ConnectionStatus, str], bool]
35 key=
"this_device_nextdns_connection_status",
36 entity_category=EntityCategory.DIAGNOSTIC,
37 translation_key=
"device_connection_status",
38 device_class=BinarySensorDeviceClass.CONNECTIVITY,
39 state=
lambda data, _: data.connected,
42 key=
"this_device_profile_connection_status",
43 entity_category=EntityCategory.DIAGNOSTIC,
44 translation_key=
"device_profile_connection_status",
45 device_class=BinarySensorDeviceClass.CONNECTIVITY,
46 state=
lambda data, profile_id: profile_id == data.profile_id,
53 entry: NextDnsConfigEntry,
54 async_add_entities: AddEntitiesCallback,
56 """Add NextDNS entities from a config_entry."""
57 coordinator = entry.runtime_data.connection
65 CoordinatorEntity[NextDnsUpdateCoordinator[ConnectionStatus]], BinarySensorEntity
67 """Define an NextDNS binary sensor."""
69 _attr_has_entity_name =
True
70 entity_description: NextDnsBinarySensorEntityDescription
74 coordinator: NextDnsUpdateCoordinator[ConnectionStatus],
75 description: NextDnsBinarySensorEntityDescription,
80 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.profile_id}_{description.key}"
81 self.
_attr_is_on_attr_is_on = description.state(coordinator.data, coordinator.profile_id)
86 """Handle updated data from the coordinator."""
88 self.coordinator.data, self.coordinator.profile_id
None _handle_coordinator_update(self)
None __init__(self, NextDnsUpdateCoordinator[ConnectionStatus] coordinator, NextDnsBinarySensorEntityDescription description)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, NextDnsConfigEntry entry, AddEntitiesCallback async_add_entities)