1
0
mirror of https://github.com/home-assistant/core.git synced 2026-07-14 18:14:35 +01:00
Files
2026-07-13 17:38:53 +02:00

101 lines
3.0 KiB
Python

"""Sensor platform for Karakeep."""
from collections.abc import Callable
from dataclasses import dataclass
from typing import override
from aiokarakeep import KarakeepStats
from homeassistant.components.sensor import (
SensorEntity,
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .coordinator import KarakeepConfigEntry
from .entity import KarakeepEntity
PARALLEL_UPDATES = 0
@dataclass(frozen=True, kw_only=True)
class KarakeepSensorEntityDescription(SensorEntityDescription):
"""Describes a Karakeep sensor."""
value_fn: Callable[[KarakeepStats], int]
SENSOR_DESCRIPTIONS: tuple[KarakeepSensorEntityDescription, ...] = (
KarakeepSensorEntityDescription(
key="bookmarks",
translation_key="bookmarks",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda stats: stats.num_bookmarks,
),
KarakeepSensorEntityDescription(
key="favorites",
translation_key="favorites",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda stats: stats.num_favorites,
),
KarakeepSensorEntityDescription(
key="archived",
translation_key="archived",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda stats: stats.num_archived,
),
KarakeepSensorEntityDescription(
key="highlights",
translation_key="highlights",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda stats: stats.num_highlights,
),
KarakeepSensorEntityDescription(
key="lists",
translation_key="lists",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda stats: stats.num_lists,
),
KarakeepSensorEntityDescription(
key="tags",
translation_key="tags",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda stats: stats.num_tags,
),
)
async def async_setup_entry(
hass: HomeAssistant,
entry: KarakeepConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up Karakeep sensors based on a config entry."""
async_add_entities(
KarakeepStatSensor(entry, description) for description in SENSOR_DESCRIPTIONS
)
class KarakeepStatSensor(KarakeepEntity, SensorEntity):
"""Representation of a Karakeep statistic as a sensor entity."""
entity_description: KarakeepSensorEntityDescription
def __init__(
self,
entry: KarakeepConfigEntry,
entity_description: KarakeepSensorEntityDescription,
) -> None:
"""Initialize the sensor."""
super().__init__(entry.runtime_data)
self.entity_description = entity_description
self._attr_unique_id = f"{entry.entry_id}_{entity_description.key}"
@property
@override
def native_value(self) -> int:
"""Return the state of the sensor."""
return self.entity_description.value_fn(self.coordinator.data)