Home Assistant Unofficial Reference 2024.12.1
services.py
Go to the documentation of this file.
1 """Services for the HEOS integration."""
2 
3 import functools
4 import logging
5 
6 from pyheos import CommandFailedError, Heos, HeosError, const
7 import voluptuous as vol
8 
9 from homeassistant.core import HomeAssistant, ServiceCall
10 from homeassistant.helpers import config_validation as cv
11 
12 from .const import (
13  ATTR_PASSWORD,
14  ATTR_USERNAME,
15  DOMAIN,
16  SERVICE_SIGN_IN,
17  SERVICE_SIGN_OUT,
18 )
19 
20 _LOGGER = logging.getLogger(__name__)
21 
22 HEOS_SIGN_IN_SCHEMA = vol.Schema(
23  {vol.Required(ATTR_USERNAME): cv.string, vol.Required(ATTR_PASSWORD): cv.string}
24 )
25 
26 HEOS_SIGN_OUT_SCHEMA = vol.Schema({})
27 
28 
29 def register(hass: HomeAssistant, controller: Heos):
30  """Register HEOS services."""
31  hass.services.async_register(
32  DOMAIN,
33  SERVICE_SIGN_IN,
34  functools.partial(_sign_in_handler, controller),
35  schema=HEOS_SIGN_IN_SCHEMA,
36  )
37  hass.services.async_register(
38  DOMAIN,
39  SERVICE_SIGN_OUT,
40  functools.partial(_sign_out_handler, controller),
41  schema=HEOS_SIGN_OUT_SCHEMA,
42  )
43 
44 
45 def remove(hass: HomeAssistant):
46  """Unregister HEOS services."""
47  hass.services.async_remove(DOMAIN, SERVICE_SIGN_IN)
48  hass.services.async_remove(DOMAIN, SERVICE_SIGN_OUT)
49 
50 
51 async def _sign_in_handler(controller: Heos, service: ServiceCall) -> None:
52  """Sign in to the HEOS account."""
53  if controller.connection_state != const.STATE_CONNECTED:
54  _LOGGER.error("Unable to sign in because HEOS is not connected")
55  return
56  username = service.data[ATTR_USERNAME]
57  password = service.data[ATTR_PASSWORD]
58  try:
59  await controller.sign_in(username, password)
60  except CommandFailedError as err:
61  _LOGGER.error("Sign in failed: %s", err)
62  except HeosError as err:
63  _LOGGER.error("Unable to sign in: %s", err)
64 
65 
66 async def _sign_out_handler(controller: Heos, service: ServiceCall) -> None:
67  """Sign out of the HEOS account."""
68  if controller.connection_state != const.STATE_CONNECTED:
69  _LOGGER.error("Unable to sign out because HEOS is not connected")
70  return
71  try:
72  await controller.sign_out()
73  except HeosError as err:
74  _LOGGER.error("Unable to sign out: %s", err)
def remove(HomeAssistant hass)
Definition: services.py:45
None _sign_out_handler(Heos controller, ServiceCall service)
Definition: services.py:66
def register(HomeAssistant hass, Heos controller)
Definition: services.py:29
None _sign_in_handler(Heos controller, ServiceCall service)
Definition: services.py:51