1 """Support for AdGuard Home sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from dataclasses
import dataclass
7 from datetime
import timedelta
10 from adguardhome
import AdGuardHome
17 from .
import AdGuardConfigEntry, AdGuardData
18 from .const
import DOMAIN
19 from .entity
import AdGuardHomeEntity
25 @dataclass(frozen=True, kw_only=True)
27 """Describes AdGuard Home sensor entity."""
29 value_fn: Callable[[AdGuardHome], Coroutine[Any, Any, int | float]]
32 SENSORS: tuple[AdGuardHomeEntityDescription, ...] = (
35 translation_key=
"dns_queries",
36 native_unit_of_measurement=
"queries",
37 value_fn=
lambda adguard: adguard.stats.dns_queries(),
40 key=
"blocked_filtering",
41 translation_key=
"dns_queries_blocked",
42 native_unit_of_measurement=
"queries",
43 value_fn=
lambda adguard: adguard.stats.blocked_filtering(),
46 key=
"blocked_percentage",
47 translation_key=
"dns_queries_blocked_ratio",
48 native_unit_of_measurement=PERCENTAGE,
49 value_fn=
lambda adguard: adguard.stats.blocked_percentage(),
52 key=
"blocked_parental",
53 translation_key=
"parental_control_blocked",
54 native_unit_of_measurement=
"requests",
55 value_fn=
lambda adguard: adguard.stats.replaced_parental(),
58 key=
"blocked_safebrowsing",
59 translation_key=
"safe_browsing_blocked",
60 native_unit_of_measurement=
"requests",
61 value_fn=
lambda adguard: adguard.stats.replaced_safebrowsing(),
64 key=
"enforced_safesearch",
65 translation_key=
"safe_searches_enforced",
66 native_unit_of_measurement=
"requests",
67 value_fn=
lambda adguard: adguard.stats.replaced_safesearch(),
71 translation_key=
"average_processing_speed",
72 native_unit_of_measurement=UnitOfTime.MILLISECONDS,
73 value_fn=
lambda adguard: adguard.stats.avg_processing_time(),
77 translation_key=
"rules_count",
78 native_unit_of_measurement=
"rules",
79 value_fn=
lambda adguard: adguard.filtering.rules_count(allowlist=
False),
80 entity_registry_enabled_default=
False,
87 entry: AdGuardConfigEntry,
88 async_add_entities: AddEntitiesCallback,
90 """Set up AdGuard Home sensor based on a config entry."""
91 data = entry.runtime_data
100 """Defines a AdGuard Home sensor."""
102 entity_description: AdGuardHomeEntityDescription
107 entry: AdGuardConfigEntry,
108 description: AdGuardHomeEntityDescription,
110 """Initialize AdGuard Home sensor."""
124 """Update AdGuard Home entity."""
127 if isinstance(value, float):
None __init__(self, AdGuardData data, AdGuardConfigEntry entry, AdGuardHomeEntityDescription description)
None _adguard_update(self)
None async_setup_entry(HomeAssistant hass, AdGuardConfigEntry entry, AddEntitiesCallback async_add_entities)