Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Jellyfin sensors."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from typing import Any
8 
9 from homeassistant.components.sensor import SensorEntity, SensorEntityDescription
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12 from homeassistant.helpers.typing import StateType
13 
14 from . import JellyfinConfigEntry, JellyfinDataUpdateCoordinator
15 from .entity import JellyfinServerEntity
16 
17 
18 @dataclass(frozen=True, kw_only=True)
20  """Describes Jellyfin sensor entity."""
21 
22  value_fn: Callable[[dict[str, dict[str, Any]]], StateType]
23 
24 
25 def _count_now_playing(data: dict[str, dict[str, Any]]) -> int:
26  """Count the number of now playing."""
27  session_ids = [
28  sid for (sid, session) in data.items() if "NowPlayingItem" in session
29  ]
30 
31  return len(session_ids)
32 
33 
34 SENSOR_TYPES: tuple[JellyfinSensorEntityDescription, ...] = (
36  key="watching",
37  translation_key="watching",
38  value_fn=_count_now_playing,
39  ),
40 )
41 
42 
44  hass: HomeAssistant,
45  entry: JellyfinConfigEntry,
46  async_add_entities: AddEntitiesCallback,
47 ) -> None:
48  """Set up Jellyfin sensor based on a config entry."""
49  coordinator = entry.runtime_data
50 
52  JellyfinServerSensor(coordinator, description) for description in SENSOR_TYPES
53  )
54 
55 
57  """Defines a Jellyfin sensor entity."""
58 
59  entity_description: JellyfinSensorEntityDescription
60 
61  def __init__(
62  self,
63  coordinator: JellyfinDataUpdateCoordinator,
64  description: JellyfinSensorEntityDescription,
65  ) -> None:
66  """Initialize Jellyfin sensor."""
67  super().__init__(coordinator)
68  self.entity_descriptionentity_description = description
69  self._attr_unique_id_attr_unique_id = f"{coordinator.server_id}-{description.key}"
70 
71  @property
72  def native_value(self) -> StateType:
73  """Return the state of the sensor."""
74  return self.entity_descriptionentity_description.value_fn(self.coordinator.data)
None __init__(self, JellyfinDataUpdateCoordinator coordinator, JellyfinSensorEntityDescription description)
Definition: sensor.py:65
int _count_now_playing(dict[str, dict[str, Any]] data)
Definition: sensor.py:25
None async_setup_entry(HomeAssistant hass, JellyfinConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:47