Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Dexcom sensors."""
2 
3 from __future__ import annotations
4 
5 from pydexcom import GlucoseReading
6 
7 from homeassistant.components.sensor import SensorDeviceClass, SensorEntity
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import CONF_USERNAME, UnitOfBloodGlucoseConcentration
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.device_registry import DeviceInfo
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14  CoordinatorEntity,
15  DataUpdateCoordinator,
16 )
17 
18 from .const import DOMAIN
19 
20 TRENDS = {
21  1: "rising_quickly",
22  2: "rising",
23  3: "rising_slightly",
24  4: "steady",
25  5: "falling_slightly",
26  6: "falling",
27  7: "falling_quickly",
28 }
29 
30 
32  hass: HomeAssistant,
33  config_entry: ConfigEntry,
34  async_add_entities: AddEntitiesCallback,
35 ) -> None:
36  """Set up the Dexcom sensors."""
37  coordinator = hass.data[DOMAIN][config_entry.entry_id]
38  username = config_entry.data[CONF_USERNAME]
40  [
41  DexcomGlucoseTrendSensor(coordinator, username, config_entry.entry_id),
42  DexcomGlucoseValueSensor(coordinator, username, config_entry.entry_id),
43  ],
44  )
45 
46 
48  CoordinatorEntity[DataUpdateCoordinator[GlucoseReading]], SensorEntity
49 ):
50  """Base Dexcom sensor entity."""
51 
52  _attr_has_entity_name = True
53 
54  def __init__(
55  self,
56  coordinator: DataUpdateCoordinator[GlucoseReading],
57  username: str,
58  entry_id: str,
59  key: str,
60  ) -> None:
61  """Initialize the sensor."""
62  super().__init__(coordinator)
63  self._attr_unique_id_attr_unique_id = f"{username}-{key}"
64  self._attr_device_info_attr_device_info = DeviceInfo(
65  identifiers={(DOMAIN, entry_id)},
66  name=username,
67  )
68 
69 
71  """Representation of a Dexcom glucose value sensor."""
72 
73  _attr_device_class = SensorDeviceClass.BLOOD_GLUCOSE_CONCENTRATION
74  _attr_native_unit_of_measurement = (
75  UnitOfBloodGlucoseConcentration.MILLIGRAMS_PER_DECILITER
76  )
77  _attr_translation_key = "glucose_value"
78 
79  def __init__(
80  self,
81  coordinator: DataUpdateCoordinator,
82  username: str,
83  entry_id: str,
84  ) -> None:
85  """Initialize the sensor."""
86  super().__init__(coordinator, username, entry_id, "value")
87 
88  @property
89  def native_value(self):
90  """Return the state of the sensor."""
91  if self.coordinator.data:
92  return self.coordinator.data.mg_dl
93  return None
94 
95 
97  """Representation of a Dexcom glucose trend sensor."""
98 
99  _attr_translation_key = "glucose_trend"
100  _attr_device_class = SensorDeviceClass.ENUM
101  _attr_options = list(TRENDS.values())
102 
103  def __init__(
104  self, coordinator: DataUpdateCoordinator, username: str, entry_id: str
105  ) -> None:
106  """Initialize the sensor."""
107  super().__init__(coordinator, username, entry_id, "trend")
108 
109  @property
110  def native_value(self) -> str | None:
111  """Return the state of the sensor."""
112  if self.coordinator.data:
113  return TRENDS.get(self.coordinator.data.trend)
114  return None
115 
116  @property
117  def available(self) -> bool:
118  """Return if entity is available."""
119  return super().available and (
120  self.coordinator.data is None or self.coordinator.data.trend != 9
121  )
None __init__(self, DataUpdateCoordinator coordinator, str username, str entry_id)
Definition: sensor.py:105
None __init__(self, DataUpdateCoordinator coordinator, str username, str entry_id)
Definition: sensor.py:84
None __init__(self, DataUpdateCoordinator[GlucoseReading] coordinator, str username, str entry_id, str key)
Definition: sensor.py:60
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:35