Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Support for Joaoapps Join services."""
2 
3 import logging
4 
5 from pyjoin import (
6  get_devices,
7  ring_device,
8  send_file,
9  send_notification,
10  send_sms,
11  send_url,
12  set_wallpaper,
13 )
14 import voluptuous as vol
15 
16 from homeassistant.const import CONF_API_KEY, CONF_DEVICE_ID, CONF_NAME
17 from homeassistant.core import HomeAssistant, ServiceCall
19 from homeassistant.helpers.typing import ConfigType
20 
21 _LOGGER = logging.getLogger(__name__)
22 
23 DOMAIN = "joaoapps_join"
24 
25 CONF_DEVICE_IDS = "device_ids"
26 CONF_DEVICE_NAMES = "device_names"
27 
28 CONFIG_SCHEMA = vol.Schema(
29  {
30  DOMAIN: vol.All(
31  cv.ensure_list,
32  [
33  {
34  vol.Required(CONF_API_KEY): cv.string,
35  vol.Optional(CONF_DEVICE_ID): cv.string,
36  vol.Optional(CONF_DEVICE_IDS): cv.string,
37  vol.Optional(CONF_DEVICE_NAMES): cv.string,
38  vol.Optional(CONF_NAME): cv.string,
39  }
40  ],
41  )
42  },
43  extra=vol.ALLOW_EXTRA,
44 )
45 
46 
47 def register_device(hass, api_key, name, device_id, device_ids, device_names):
48  """Register services for each join device listed."""
49 
50  def ring_service(service: ServiceCall) -> None:
51  """Service to ring devices."""
52  ring_device(
53  api_key=api_key,
54  device_id=device_id,
55  device_ids=device_ids,
56  device_names=device_names,
57  )
58 
59  def set_wallpaper_service(service: ServiceCall) -> None:
60  """Service to set wallpaper on devices."""
61  set_wallpaper(
62  api_key=api_key,
63  device_id=device_id,
64  device_ids=device_ids,
65  device_names=device_names,
66  url=service.data.get("url"),
67  )
68 
69  def send_file_service(service: ServiceCall) -> None:
70  """Service to send files to devices."""
71  send_file(
72  api_key=api_key,
73  device_id=device_id,
74  device_ids=device_ids,
75  device_names=device_names,
76  url=service.data.get("url"),
77  )
78 
79  def send_url_service(service: ServiceCall) -> None:
80  """Service to open url on devices."""
81  send_url(
82  api_key=api_key,
83  device_id=device_id,
84  device_ids=device_ids,
85  device_names=device_names,
86  url=service.data.get("url"),
87  )
88 
89  def send_tasker_service(service: ServiceCall) -> None:
90  """Service to open url on devices."""
91  send_notification(
92  api_key=api_key,
93  device_id=device_id,
94  device_ids=device_ids,
95  device_names=device_names,
96  text=service.data.get("command"),
97  )
98 
99  def send_sms_service(service: ServiceCall) -> None:
100  """Service to send sms from devices."""
101  send_sms(
102  device_id=device_id,
103  device_ids=device_ids,
104  device_names=device_names,
105  sms_number=service.data.get("number"),
106  sms_text=service.data.get("message"),
107  api_key=api_key,
108  )
109 
110  hass.services.register(DOMAIN, f"{name}ring", ring_service)
111  hass.services.register(DOMAIN, f"{name}set_wallpaper", set_wallpaper_service)
112  hass.services.register(DOMAIN, f"{name}send_sms", send_sms_service)
113  hass.services.register(DOMAIN, f"{name}send_file", send_file_service)
114  hass.services.register(DOMAIN, f"{name}send_url", send_url_service)
115  hass.services.register(DOMAIN, f"{name}send_tasker", send_tasker_service)
116 
117 
118 def setup(hass: HomeAssistant, config: ConfigType) -> bool:
119  """Set up the Join services."""
120  for device in config[DOMAIN]:
121  api_key = device.get(CONF_API_KEY)
122  device_id = device.get(CONF_DEVICE_ID)
123  device_ids = device.get(CONF_DEVICE_IDS)
124  device_names = device.get(CONF_DEVICE_NAMES)
125  name = device.get(CONF_NAME)
126  name = f"{name.lower().replace(' ', '_')}_" if name else ""
127  if api_key and not get_devices(api_key):
128  _LOGGER.error("Error connecting to Join, check API key")
129  return False
130  if device_id is None and device_ids is None and device_names is None:
131  _LOGGER.error(
132  "No device was provided. Please specify device_id"
133  ", device_ids, or device_names"
134  )
135  return False
136 
137  register_device(hass, api_key, name, device_id, device_ids, device_names)
138  return True
def register_device(hass, api_key, name, device_id, device_ids, device_names)
Definition: __init__.py:47
bool setup(HomeAssistant hass, ConfigType config)
Definition: __init__.py:118