Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Sensor platform for Hass.io addons."""
2 
3 from __future__ import annotations
4 
6  SensorDeviceClass,
7  SensorEntity,
8  SensorEntityDescription,
9  SensorStateClass,
10 )
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.const import PERCENTAGE, EntityCategory, UnitOfInformation
13 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 
16 from .const import (
17  ADDONS_COORDINATOR,
18  ATTR_CPU_PERCENT,
19  ATTR_MEMORY_PERCENT,
20  ATTR_VERSION,
21  ATTR_VERSION_LATEST,
22  DATA_KEY_ADDONS,
23  DATA_KEY_CORE,
24  DATA_KEY_HOST,
25  DATA_KEY_OS,
26  DATA_KEY_SUPERVISOR,
27 )
28 from .entity import (
29  HassioAddonEntity,
30  HassioCoreEntity,
31  HassioHostEntity,
32  HassioOSEntity,
33  HassioSupervisorEntity,
34 )
35 
36 COMMON_ENTITY_DESCRIPTIONS = (
38  entity_registry_enabled_default=False,
39  key=ATTR_VERSION,
40  translation_key="version",
41  ),
43  entity_registry_enabled_default=False,
44  key=ATTR_VERSION_LATEST,
45  translation_key="version_latest",
46  ),
47 )
48 
49 STATS_ENTITY_DESCRIPTIONS = (
51  entity_registry_enabled_default=False,
52  key=ATTR_CPU_PERCENT,
53  translation_key="cpu_percent",
54  native_unit_of_measurement=PERCENTAGE,
55  state_class=SensorStateClass.MEASUREMENT,
56  ),
58  entity_registry_enabled_default=False,
59  key=ATTR_MEMORY_PERCENT,
60  translation_key="memory_percent",
61  native_unit_of_measurement=PERCENTAGE,
62  state_class=SensorStateClass.MEASUREMENT,
63  ),
64 )
65 
66 ADDON_ENTITY_DESCRIPTIONS = COMMON_ENTITY_DESCRIPTIONS + STATS_ENTITY_DESCRIPTIONS
67 CORE_ENTITY_DESCRIPTIONS = STATS_ENTITY_DESCRIPTIONS
68 OS_ENTITY_DESCRIPTIONS = COMMON_ENTITY_DESCRIPTIONS
69 SUPERVISOR_ENTITY_DESCRIPTIONS = STATS_ENTITY_DESCRIPTIONS
70 
71 HOST_ENTITY_DESCRIPTIONS = (
73  entity_registry_enabled_default=False,
74  key="agent_version",
75  translation_key="agent_version",
76  entity_category=EntityCategory.DIAGNOSTIC,
77  ),
79  entity_registry_enabled_default=False,
80  key="apparmor_version",
81  translation_key="apparmor_version",
82  entity_category=EntityCategory.DIAGNOSTIC,
83  ),
85  entity_registry_enabled_default=False,
86  key="disk_total",
87  translation_key="disk_total",
88  native_unit_of_measurement=UnitOfInformation.GIGABYTES,
89  device_class=SensorDeviceClass.DATA_SIZE,
90  entity_category=EntityCategory.DIAGNOSTIC,
91  ),
93  entity_registry_enabled_default=False,
94  key="disk_used",
95  translation_key="disk_used",
96  native_unit_of_measurement=UnitOfInformation.GIGABYTES,
97  device_class=SensorDeviceClass.DATA_SIZE,
98  entity_category=EntityCategory.DIAGNOSTIC,
99  ),
101  entity_registry_enabled_default=False,
102  key="disk_free",
103  translation_key="disk_free",
104  native_unit_of_measurement=UnitOfInformation.GIGABYTES,
105  device_class=SensorDeviceClass.DATA_SIZE,
106  entity_category=EntityCategory.DIAGNOSTIC,
107  ),
108 )
109 
110 
112  hass: HomeAssistant,
113  config_entry: ConfigEntry,
114  async_add_entities: AddEntitiesCallback,
115 ) -> None:
116  """Sensor set up for Hass.io config entry."""
117  coordinator = hass.data[ADDONS_COORDINATOR]
118 
119  entities: list[
120  HassioOSSensor | HassioAddonSensor | CoreSensor | SupervisorSensor | HostSensor
121  ] = [
123  addon=addon,
124  coordinator=coordinator,
125  entity_description=entity_description,
126  )
127  for addon in coordinator.data[DATA_KEY_ADDONS].values()
128  for entity_description in ADDON_ENTITY_DESCRIPTIONS
129  ]
130 
131  entities.extend(
132  CoreSensor(
133  coordinator=coordinator,
134  entity_description=entity_description,
135  )
136  for entity_description in CORE_ENTITY_DESCRIPTIONS
137  )
138 
139  entities.extend(
141  coordinator=coordinator,
142  entity_description=entity_description,
143  )
144  for entity_description in SUPERVISOR_ENTITY_DESCRIPTIONS
145  )
146 
147  entities.extend(
148  HostSensor(
149  coordinator=coordinator,
150  entity_description=entity_description,
151  )
152  for entity_description in HOST_ENTITY_DESCRIPTIONS
153  )
154 
155  if coordinator.is_hass_os:
156  entities.extend(
158  coordinator=coordinator,
159  entity_description=entity_description,
160  )
161  for entity_description in OS_ENTITY_DESCRIPTIONS
162  )
163 
164  async_add_entities(entities)
165 
166 
168  """Sensor to track a Hass.io add-on attribute."""
169 
170  @property
171  def native_value(self) -> str:
172  """Return native value of entity."""
173  return self.coordinator.data[DATA_KEY_ADDONS][self._addon_slug_addon_slug][
174  self.entity_descriptionentity_description.key
175  ]
176 
177 
179  """Sensor to track a Hass.io add-on attribute."""
180 
181  @property
182  def native_value(self) -> str:
183  """Return native value of entity."""
184  return self.coordinator.data[DATA_KEY_OS][self.entity_descriptionentity_description.key]
185 
186 
188  """Sensor to track a core attribute."""
189 
190  @property
191  def native_value(self) -> str:
192  """Return native value of entity."""
193  return self.coordinator.data[DATA_KEY_CORE][self.entity_descriptionentity_description.key]
194 
195 
197  """Sensor to track a supervisor attribute."""
198 
199  @property
200  def native_value(self) -> str:
201  """Return native value of entity."""
202  return self.coordinator.data[DATA_KEY_SUPERVISOR][self.entity_descriptionentity_description.key]
203 
204 
206  """Sensor to track a host attribute."""
207 
208  @property
209  def native_value(self) -> str:
210  """Return native value of entity."""
211  return self.coordinator.data[DATA_KEY_HOST][self.entity_descriptionentity_description.key]
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:115