Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """AdGuard Home base entity."""
2 
3 from __future__ import annotations
4 
5 from adguardhome import AdGuardHomeError
6 
7 from homeassistant.config_entries import SOURCE_HASSIO
8 from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
9 from homeassistant.helpers.entity import Entity
10 
11 from . import AdGuardConfigEntry, AdGuardData
12 from .const import DOMAIN, LOGGER
13 
14 
16  """Defines a base AdGuard Home entity."""
17 
18  _attr_has_entity_name = True
19  _attr_available = True
20 
21  def __init__(
22  self,
23  data: AdGuardData,
24  entry: AdGuardConfigEntry,
25  ) -> None:
26  """Initialize the AdGuard Home entity."""
27  self._entry_entry = entry
28  self.datadata = data
29  self.adguardadguard = data.client
30 
31  async def async_update(self) -> None:
32  """Update AdGuard Home entity."""
33  if not self.enabledenabled:
34  return
35 
36  try:
37  await self._adguard_update_adguard_update()
38  self._attr_available_attr_available_attr_available = True
39  except AdGuardHomeError:
40  if self._attr_available_attr_available_attr_available:
41  LOGGER.debug(
42  "An error occurred while updating AdGuard Home sensor",
43  exc_info=True,
44  )
45  self._attr_available_attr_available_attr_available = False
46 
47  async def _adguard_update(self) -> None:
48  """Update AdGuard Home entity."""
49  raise NotImplementedError
50 
51  @property
52  def device_info(self) -> DeviceInfo:
53  """Return device information about this AdGuard Home instance."""
54  if self._entry_entry.source == SOURCE_HASSIO:
55  config_url = "homeassistant://hassio/ingress/a0d7b954_adguard"
56  elif self.adguardadguard.tls:
57  config_url = f"https://{self.adguard.host}:{self.adguard.port}"
58  else:
59  config_url = f"http://{self.adguard.host}:{self.adguard.port}"
60 
61  return DeviceInfo(
62  entry_type=DeviceEntryType.SERVICE,
63  identifiers={
64  ( # type: ignore[arg-type]
65  DOMAIN,
66  self.adguardadguard.host,
67  self.adguardadguard.port,
68  self.adguardadguard.base_path,
69  )
70  },
71  manufacturer="AdGuard Team",
72  name="AdGuard Home",
73  sw_version=self.datadata.version,
74  configuration_url=config_url,
75  )
None __init__(self, AdGuardData data, AdGuardConfigEntry entry)
Definition: entity.py:25