Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Tailscale sensors."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from datetime import datetime
8 
9 from tailscale import Device as TailscaleDevice
10 
12  SensorDeviceClass,
13  SensorEntity,
14  SensorEntityDescription,
15 )
16 from homeassistant.config_entries import ConfigEntry
17 from homeassistant.const import EntityCategory
18 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 
21 from .const import DOMAIN
22 from .entity import TailscaleEntity
23 
24 
25 @dataclass(frozen=True, kw_only=True)
27  """Describes a Tailscale sensor entity."""
28 
29  value_fn: Callable[[TailscaleDevice], datetime | str | None]
30 
31 
32 SENSORS: tuple[TailscaleSensorEntityDescription, ...] = (
34  key="expires",
35  translation_key="expires",
36  device_class=SensorDeviceClass.TIMESTAMP,
37  entity_category=EntityCategory.DIAGNOSTIC,
38  value_fn=lambda device: device.expires,
39  ),
41  key="ip",
42  translation_key="ip",
43  entity_category=EntityCategory.DIAGNOSTIC,
44  value_fn=lambda device: device.addresses[0] if device.addresses else None,
45  ),
47  key="last_seen",
48  translation_key="last_seen",
49  device_class=SensorDeviceClass.TIMESTAMP,
50  value_fn=lambda device: device.last_seen,
51  ),
52 )
53 
54 
56  hass: HomeAssistant,
57  entry: ConfigEntry,
58  async_add_entities: AddEntitiesCallback,
59 ) -> None:
60  """Set up a Tailscale sensors based on a config entry."""
61  coordinator = hass.data[DOMAIN][entry.entry_id]
64  coordinator=coordinator,
65  device=device,
66  description=description,
67  )
68  for device in coordinator.data.values()
69  for description in SENSORS
70  )
71 
72 
74  """Defines a Tailscale sensor."""
75 
76  entity_description: TailscaleSensorEntityDescription
77 
78  @property
79  def native_value(self) -> datetime | str | None:
80  """Return the state of the sensor."""
81  return self.entity_descriptionentity_description.value_fn(self.coordinator.data[self.device_iddevice_id])
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:59