Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Support for Dovado router."""
2 
3 # mypy: ignore-errors
4 from datetime import timedelta
5 import logging
6 
7 # import dovado
8 import voluptuous as vol
9 
10 from homeassistant.const import (
11  CONF_HOST,
12  CONF_PASSWORD,
13  CONF_PORT,
14  CONF_USERNAME,
15  DEVICE_DEFAULT_NAME,
16 )
17 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.typing import ConfigType
20 from homeassistant.util import Throttle
21 
22 _LOGGER = logging.getLogger(__name__)
23 
24 DOMAIN = "dovado"
25 
26 CONFIG_SCHEMA = vol.Schema(
27  {
28  DOMAIN: vol.Schema(
29  {
30  vol.Required(CONF_USERNAME): cv.string,
31  vol.Required(CONF_PASSWORD): cv.string,
32  vol.Optional(CONF_HOST): cv.string,
33  vol.Optional(CONF_PORT): cv.port,
34  }
35  )
36  },
37  extra=vol.ALLOW_EXTRA,
38 )
39 
40 MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=30)
41 
42 
43 def setup(hass: HomeAssistant, config: ConfigType) -> bool:
44  """Set up the Dovado component."""
45 
46  hass.data[DOMAIN] = DovadoData(
47  dovado.Dovado(
48  config[DOMAIN][CONF_USERNAME],
49  config[DOMAIN][CONF_PASSWORD],
50  config[DOMAIN].get(CONF_HOST),
51  config[DOMAIN].get(CONF_PORT),
52  )
53  )
54  return True
55 
56 
57 class DovadoData:
58  """Maintain a connection to the router."""
59 
60  def __init__(self, client):
61  """Set up a new Dovado connection."""
62  self._client_client = client
63  self.statestate = {}
64 
65  @property
66  def name(self):
67  """Name of the router."""
68  return self.statestate.get("product name", DEVICE_DEFAULT_NAME)
69 
70  @Throttle(MIN_TIME_BETWEEN_UPDATES)
71  def update(self):
72  """Update device state."""
73  try:
74  self.statestate = self._client_client.state or {}
75  if not self.statestate:
76  return False
77  self.statestate.update(connected=self.statestate.get("modem status") == "CONNECTED")
78  except OSError as error:
79  _LOGGER.warning("Could not contact the router: %s", error)
80  return None
81  _LOGGER.debug("Received: %s", self.statestate)
82  return True
83 
84  @property
85  def client(self):
86  """Dovado client instance."""
87  return self._client_client
web.Response get(self, web.Request request, str config_key)
Definition: view.py:88
bool setup(HomeAssistant hass, ConfigType config)
Definition: __init__.py:43