hass-core/homeassistant/components/analytics_insights/sensor.py
Joost Lekkerkerker d9f1450ee6
Add Homeassistant Analytics Insights integration (#107634)
* Add Homeassistant Analytics integration

* Add Homeassistant Analytics integration

* Add Homeassistant Analytics integration

* Fix feedback

* Fix test

* Update conftest.py

* Add some testcases

* Make code clear

* log exception

* Bump python-homeassistant-analytics to 0.2.1

* Bump python-homeassistant-analytics to 0.3.0

* Change domain to homeassistant_analytics_consumer

* Add integration name to config flow selector

* Update homeassistant/components/homeassistant_analytics_consumer/manifest.json

Co-authored-by: Sid <27780930+autinerd@users.noreply.github.com>

* Fix hassfest

* Apply suggestions from code review

Co-authored-by: Robert Resch <robert@resch.dev>

* Bump python-homeassistant-analytics to 0.4.0

* Rename to Home Assistant Analytics Insights

* Update homeassistant/components/analytics_insights/config_flow.py

Co-authored-by: Robert Resch <robert@resch.dev>

* Update homeassistant/components/analytics_insights/manifest.json

Co-authored-by: Robert Resch <robert@resch.dev>

* Rename to Home Assistant Analytics Insights

* add test

* Fallback to 0 when there is no data found

* Allow to select any integration

* Fix tests

* Fix tests

* Update tests/components/analytics_insights/conftest.py

Co-authored-by: Robert Resch <robert@resch.dev>

* Update tests/components/analytics_insights/test_sensor.py

Co-authored-by: Robert Resch <robert@resch.dev>

* Fix format

* Fix tests

---------

Co-authored-by: Sid <27780930+autinerd@users.noreply.github.com>
Co-authored-by: Robert Resch <robert@resch.dev>
2024-01-23 10:32:31 +01:00

62 lines
2.1 KiB
Python

"""Sensor for Home Assistant analytics."""
from __future__ import annotations
from homeassistant.components.sensor import SensorEntity, SensorStateClass
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import AnalyticsData
from .const import DOMAIN
from .coordinator import HomeassistantAnalyticsDataUpdateCoordinator
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Initialize the entries."""
analytics_data: AnalyticsData = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
HomeassistantAnalyticsSensor(
analytics_data.coordinator,
integration_domain,
analytics_data.names[integration_domain],
)
for integration_domain in analytics_data.coordinator.data
)
class HomeassistantAnalyticsSensor(
CoordinatorEntity[HomeassistantAnalyticsDataUpdateCoordinator], SensorEntity
):
"""Home Assistant Analytics Sensor."""
_attr_has_entity_name = True
_attr_state_class = SensorStateClass.TOTAL
_attr_native_unit_of_measurement = "active installations"
def __init__(
self,
coordinator: HomeassistantAnalyticsDataUpdateCoordinator,
integration_domain: str,
name: str,
) -> None:
"""Initialize the sensor."""
super().__init__(coordinator)
self._attr_name = name
self._attr_unique_id = f"core_{integration_domain}_active_installations"
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, DOMAIN)},
entry_type=DeviceEntryType.SERVICE,
)
self._integration_domain = integration_domain
@property
def native_value(self) -> int | None:
"""Return the state of the sensor."""
return self.coordinator.data.get(self._integration_domain)