1 """Sensor for Home Assistant analytics."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
10 SensorEntityDescription,
20 from .
import AnalyticsInsightsConfigEntry
21 from .const
import DOMAIN
22 from .coordinator
import AnalyticsData, HomeassistantAnalyticsDataUpdateCoordinator
25 @dataclass(frozen=True, kw_only=True)
27 """Analytics sensor entity description."""
29 value_fn: Callable[[AnalyticsData], StateType]
34 ) -> AnalyticsSensorEntityDescription:
35 """Get addon entity description."""
37 key=f
"addon_{name_slug}_active_installations",
38 translation_key=
"addons",
40 state_class=SensorStateClass.TOTAL,
41 native_unit_of_measurement=
"active installations",
42 value_fn=
lambda data: data.addons.get(name_slug),
47 domain: str, name: str
48 ) -> AnalyticsSensorEntityDescription:
49 """Get core integration entity description."""
51 key=f
"core_{domain}_active_installations",
52 translation_key=
"core_integrations",
54 state_class=SensorStateClass.TOTAL,
55 native_unit_of_measurement=
"active installations",
56 value_fn=
lambda data: data.core_integrations.get(domain),
62 ) -> AnalyticsSensorEntityDescription:
63 """Get custom integration entity description."""
65 key=f
"custom_{domain}_active_installations",
66 translation_key=
"custom_integrations",
67 translation_placeholders={
"custom_integration_domain": domain},
68 state_class=SensorStateClass.TOTAL,
69 native_unit_of_measurement=
"active installations",
70 value_fn=
lambda data: data.custom_integrations.get(domain),
76 key=
"total_active_installations",
77 translation_key=
"total_active_installations",
78 entity_registry_enabled_default=
False,
79 state_class=SensorStateClass.TOTAL,
80 native_unit_of_measurement=
"active installations",
81 value_fn=
lambda data: data.active_installations,
84 key=
"total_reports_integrations",
85 translation_key=
"total_reports_integrations",
86 entity_registry_enabled_default=
False,
87 state_class=SensorStateClass.TOTAL,
88 native_unit_of_measurement=
"active installations",
89 value_fn=
lambda data: data.reports_integrations,
96 entry: AnalyticsInsightsConfigEntry,
97 async_add_entities: AddEntitiesCallback,
99 """Initialize the entries."""
101 analytics_data = entry.runtime_data
102 coordinator: HomeassistantAnalyticsDataUpdateCoordinator = (
103 analytics_data.coordinator
105 entities: list[HomeassistantAnalyticsSensor] = []
111 for addon_name_slug
in coordinator.data.addons
117 integration_domain, analytics_data.names[integration_domain]
120 for integration_domain
in coordinator.data.core_integrations
127 for integration_domain
in coordinator.data.custom_integrations
132 for entity_description
in GENERAL_SENSORS
139 CoordinatorEntity[HomeassistantAnalyticsDataUpdateCoordinator], SensorEntity
141 """Home Assistant Analytics Sensor."""
143 _attr_has_entity_name =
True
144 _attr_entity_category = EntityCategory.DIAGNOSTIC
146 entity_description: AnalyticsSensorEntityDescription
150 coordinator: HomeassistantAnalyticsDataUpdateCoordinator,
151 entity_description: AnalyticsSensorEntityDescription,
153 """Initialize the sensor."""
158 identifiers={(DOMAIN, DOMAIN)},
159 entry_type=DeviceEntryType.SERVICE,
164 """Return the state of the sensor."""
None __init__(self, HomeassistantAnalyticsDataUpdateCoordinator coordinator, AnalyticsSensorEntityDescription entity_description)
StateType native_value(self)
AnalyticsSensorEntityDescription get_addon_entity_description(str name_slug)
None async_setup_entry(HomeAssistant hass, AnalyticsInsightsConfigEntry entry, AddEntitiesCallback async_add_entities)
AnalyticsSensorEntityDescription get_core_integration_entity_description(str domain, str name)
AnalyticsSensorEntityDescription get_custom_integration_entity_description(str domain)