Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Platform for sensor integration."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from typing import cast
8 
9 from geocachingapi.models import GeocachingStatus
10 
11 from homeassistant.components.sensor import SensorEntity, SensorEntityDescription
12 from homeassistant.config_entries import ConfigEntry
13 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 from homeassistant.helpers.update_coordinator import CoordinatorEntity
17 
18 from .const import DOMAIN
19 from .coordinator import GeocachingDataUpdateCoordinator
20 
21 
22 @dataclass(frozen=True, kw_only=True)
24  """Define Sensor entity description class."""
25 
26  value_fn: Callable[[GeocachingStatus], str | int | None]
27 
28 
29 SENSORS: tuple[GeocachingSensorEntityDescription, ...] = (
31  key="find_count",
32  translation_key="find_count",
33  native_unit_of_measurement="caches",
34  value_fn=lambda status: status.user.find_count,
35  ),
37  key="hide_count",
38  translation_key="hide_count",
39  native_unit_of_measurement="caches",
40  entity_registry_visible_default=False,
41  value_fn=lambda status: status.user.hide_count,
42  ),
44  key="favorite_points",
45  translation_key="favorite_points",
46  native_unit_of_measurement="points",
47  entity_registry_visible_default=False,
48  value_fn=lambda status: status.user.favorite_points,
49  ),
51  key="souvenir_count",
52  translation_key="souvenir_count",
53  native_unit_of_measurement="souvenirs",
54  value_fn=lambda status: status.user.souvenir_count,
55  ),
57  key="awarded_favorite_points",
58  translation_key="awarded_favorite_points",
59  native_unit_of_measurement="points",
60  entity_registry_visible_default=False,
61  value_fn=lambda status: status.user.awarded_favorite_points,
62  ),
63 )
64 
65 
67  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
68 ) -> None:
69  """Set up a Geocaching sensor entry."""
70  coordinator = hass.data[DOMAIN][entry.entry_id]
72  GeocachingSensor(coordinator, description) for description in SENSORS
73  )
74 
75 
77  CoordinatorEntity[GeocachingDataUpdateCoordinator], SensorEntity
78 ):
79  """Representation of a Sensor."""
80 
81  entity_description: GeocachingSensorEntityDescription
82  _attr_has_entity_name = True
83 
84  def __init__(
85  self,
86  coordinator: GeocachingDataUpdateCoordinator,
87  description: GeocachingSensorEntityDescription,
88  ) -> None:
89  """Initialize the Geocaching sensor."""
90  super().__init__(coordinator)
91  self.entity_descriptionentity_description = description
92  self._attr_unique_id_attr_unique_id = (
93  f"{coordinator.data.user.reference_code}_{description.key}"
94  )
95  self._attr_device_info_attr_device_info = DeviceInfo(
96  name=f"Geocaching {coordinator.data.user.username}",
97  identifiers={(DOMAIN, cast(str, coordinator.data.user.reference_code))},
98  entry_type=DeviceEntryType.SERVICE,
99  manufacturer="Groundspeak, Inc.",
100  )
101 
102  @property
103  def native_value(self) -> str | int | None:
104  """Return the state of the sensor."""
105  return self.entity_descriptionentity_description.value_fn(self.coordinator.data)
None __init__(self, GeocachingDataUpdateCoordinator coordinator, GeocachingSensorEntityDescription description)
Definition: sensor.py:88
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:68