Home Assistant Unofficial Reference 2024.12.1
services.py
Go to the documentation of this file.
1 """Services for the Netgear LTE integration."""
2 
3 from eternalegypt.eternalegypt import Modem
4 import voluptuous as vol
5 
6 from homeassistant.core import HomeAssistant, ServiceCall
7 from homeassistant.helpers import config_validation as cv
8 
9 from .const import (
10  ATTR_AUTOCONNECT,
11  ATTR_FAILOVER,
12  ATTR_HOST,
13  ATTR_SMS_ID,
14  AUTOCONNECT_MODES,
15  DOMAIN,
16  FAILOVER_MODES,
17  LOGGER,
18 )
19 
20 SERVICE_DELETE_SMS = "delete_sms"
21 SERVICE_SET_OPTION = "set_option"
22 SERVICE_CONNECT_LTE = "connect_lte"
23 SERVICE_DISCONNECT_LTE = "disconnect_lte"
24 
25 DELETE_SMS_SCHEMA = vol.Schema(
26  {
27  vol.Optional(ATTR_HOST): cv.string,
28  vol.Required(ATTR_SMS_ID): vol.All(cv.ensure_list, [cv.positive_int]),
29  }
30 )
31 
32 SET_OPTION_SCHEMA = vol.Schema(
33  vol.All(
34  cv.has_at_least_one_key(ATTR_FAILOVER, ATTR_AUTOCONNECT),
35  {
36  vol.Optional(ATTR_HOST): cv.string,
37  vol.Optional(ATTR_FAILOVER): vol.In(FAILOVER_MODES),
38  vol.Optional(ATTR_AUTOCONNECT): vol.In(AUTOCONNECT_MODES),
39  },
40  )
41 )
42 
43 CONNECT_LTE_SCHEMA = vol.Schema({vol.Optional(ATTR_HOST): cv.string})
44 
45 DISCONNECT_LTE_SCHEMA = vol.Schema({vol.Optional(ATTR_HOST): cv.string})
46 
47 
48 async def async_setup_services(hass: HomeAssistant, modem: Modem) -> None:
49  """Set up services for Netgear LTE integration."""
50 
51  async def service_handler(call: ServiceCall) -> None:
52  """Apply a service."""
53  host = call.data.get(ATTR_HOST)
54 
55  if not modem.token:
56  LOGGER.error("%s: host %s unavailable", call.service, host)
57  return
58 
59  if call.service == SERVICE_DELETE_SMS:
60  for sms_id in call.data[ATTR_SMS_ID]:
61  await modem.delete_sms(sms_id)
62  elif call.service == SERVICE_SET_OPTION:
63  if failover := call.data.get(ATTR_FAILOVER):
64  await modem.set_failover_mode(failover)
65  if autoconnect := call.data.get(ATTR_AUTOCONNECT):
66  await modem.set_autoconnect_mode(autoconnect)
67  elif call.service == SERVICE_CONNECT_LTE:
68  await modem.connect_lte()
69  elif call.service == SERVICE_DISCONNECT_LTE:
70  await modem.disconnect_lte()
71 
72  service_schemas = {
73  SERVICE_DELETE_SMS: DELETE_SMS_SCHEMA,
74  SERVICE_SET_OPTION: SET_OPTION_SCHEMA,
75  SERVICE_CONNECT_LTE: CONNECT_LTE_SCHEMA,
76  SERVICE_DISCONNECT_LTE: DISCONNECT_LTE_SCHEMA,
77  }
78 
79  for service, schema in service_schemas.items():
80  hass.services.async_register(DOMAIN, service, service_handler, schema=schema)
None async_setup_services(HomeAssistant hass, Modem modem)
Definition: services.py:48