Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Counter for the days until an HTTPS (TLS) certificate will expire."""
2 
3 from __future__ import annotations
4 
5 from datetime import datetime, timedelta
6 
7 import voluptuous as vol
8 
10  PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
11  SensorDeviceClass,
12  SensorEntity,
13 )
14 from homeassistant.config_entries import SOURCE_IMPORT
15 from homeassistant.const import CONF_HOST, CONF_PORT, EVENT_HOMEASSISTANT_START
16 from homeassistant.core import Event, HomeAssistant, callback
18 from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 from homeassistant.helpers.event import async_call_later
21 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
22 
23 from . import CertExpiryConfigEntry
24 from .const import DEFAULT_PORT, DOMAIN
25 from .coordinator import CertExpiryDataUpdateCoordinator
26 from .entity import CertExpiryEntity
27 
28 SCAN_INTERVAL = timedelta(hours=12)
29 
30 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
31  {
32  vol.Required(CONF_HOST): cv.string,
33  vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
34  }
35 )
36 
37 
39  hass: HomeAssistant,
40  config: ConfigType,
41  async_add_entities: AddEntitiesCallback,
42  discovery_info: DiscoveryInfoType | None = None,
43 ) -> None:
44  """Set up certificate expiry sensor."""
45 
46  @callback
47  def schedule_import(_: Event) -> None:
48  """Schedule delayed import after HA is fully started."""
49  async_call_later(hass, 10, do_import)
50 
51  @callback
52  def do_import(_: datetime) -> None:
53  """Process YAML import."""
54  hass.async_create_task(
55  hass.config_entries.flow.async_init(
56  DOMAIN, context={"source": SOURCE_IMPORT}, data=dict(config)
57  )
58  )
59 
60  hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, schedule_import)
61 
62 
64  hass: HomeAssistant,
65  entry: CertExpiryConfigEntry,
66  async_add_entities: AddEntitiesCallback,
67 ) -> None:
68  """Add cert-expiry entry."""
69  coordinator = entry.runtime_data
70 
71  sensors = [SSLCertificateTimestamp(coordinator)]
72 
73  async_add_entities(sensors, True)
74 
75 
77  """Implementation of the Cert Expiry timestamp sensor."""
78 
79  _attr_device_class = SensorDeviceClass.TIMESTAMP
80  _attr_translation_key = "certificate_expiry"
81 
82  def __init__(
83  self,
84  coordinator: CertExpiryDataUpdateCoordinator,
85  ) -> None:
86  """Initialize a Cert Expiry timestamp sensor."""
87  super().__init__(coordinator)
88  self._attr_unique_id_attr_unique_id = f"{coordinator.host}:{coordinator.port}-timestamp"
89  self._attr_device_info_attr_device_info = DeviceInfo(
90  identifiers={(DOMAIN, f"{coordinator.host}:{coordinator.port}")},
91  name=coordinator.name,
92  entry_type=DeviceEntryType.SERVICE,
93  )
94 
95  @property
96  def native_value(self) -> datetime | None:
97  """Return the state of the sensor."""
98  if self.coordinator.data:
99  return self.coordinator.data
100  return None
None __init__(self, CertExpiryDataUpdateCoordinator coordinator)
Definition: sensor.py:85
None async_setup_entry(HomeAssistant hass, CertExpiryConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:67
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:43
CALLBACK_TYPE async_call_later(HomeAssistant hass, float|timedelta delay, HassJob[[datetime], Coroutine[Any, Any, None]|None]|Callable[[datetime], Coroutine[Any, Any, None]|None] action)
Definition: event.py:1597