Home Assistant Unofficial Reference 2024.12.1
websocket.py
Go to the documentation of this file.
1 """The Network Configuration integration websocket commands."""
2 
3 from __future__ import annotations
4 
5 from contextlib import suppress
6 from typing import Any
7 
8 import voluptuous as vol
9 
10 from homeassistant.components import websocket_api
11 from homeassistant.components.websocket_api import ActiveConnection
12 from homeassistant.core import HomeAssistant, callback
13 from homeassistant.helpers.network import NoURLAvailableError, get_url
14 
15 from .const import ATTR_ADAPTERS, ATTR_CONFIGURED_ADAPTERS, NETWORK_CONFIG_SCHEMA
16 from .network import async_get_network
17 
18 
19 @callback
20 def async_register_websocket_commands(hass: HomeAssistant) -> None:
21  """Register network websocket commands."""
22  websocket_api.async_register_command(hass, websocket_network_adapters)
23  websocket_api.async_register_command(hass, websocket_network_adapters_configure)
24  websocket_api.async_register_command(hass, websocket_network_url)
25 
26 
27 @websocket_api.require_admin
28 @websocket_api.websocket_command({vol.Required("type"): "network"})
29 @websocket_api.async_response
31  hass: HomeAssistant,
32  connection: ActiveConnection,
33  msg: dict[str, Any],
34 ) -> None:
35  """Return network preferences."""
36  network = await async_get_network(hass)
37  connection.send_result(
38  msg["id"],
39  {
40  ATTR_ADAPTERS: network.adapters,
41  ATTR_CONFIGURED_ADAPTERS: network.configured_adapters,
42  },
43  )
44 
45 
46 @websocket_api.require_admin
47 @websocket_api.websocket_command( { vol.Required("type"): "network/configure",
48  vol.Required("config", default={}): NETWORK_CONFIG_SCHEMA,
49  }
50 )
51 @websocket_api.async_response
53  hass: HomeAssistant,
54  connection: ActiveConnection,
55  msg: dict[str, Any],
56 ) -> None:
57  """Update network config."""
58  network = await async_get_network(hass)
59 
60  await network.async_reconfig(msg["config"])
61 
62  connection.send_result(
63  msg["id"],
64  {ATTR_CONFIGURED_ADAPTERS: network.configured_adapters},
65  )
66 
67 
68 @callback
69 @websocket_api.require_admin
70 @websocket_api.websocket_command( { vol.Required("type"): "network/url",
71  }
72 )
74  hass: HomeAssistant,
75  connection: ActiveConnection,
76  msg: dict[str, Any],
77 ) -> None:
78  """Get the internal, external, and cloud URLs."""
79  internal_url = None
80  external_url = None
81  cloud_url = None
82  with suppress(NoURLAvailableError):
83  internal_url = get_url(
84  hass, allow_internal=True, allow_external=False, allow_cloud=False
85  )
86  with suppress(NoURLAvailableError):
87  external_url = get_url(
88  hass, allow_internal=False, allow_external=True, prefer_external=True
89  )
90  with suppress(NoURLAvailableError):
91  cloud_url = get_url(hass, allow_internal=False, require_cloud=True)
92 
93  connection.send_result(
94  msg["id"],
95  {
96  "internal": internal_url,
97  "external": external_url,
98  "cloud": cloud_url,
99  },
100  )
101 
Network async_get_network(HomeAssistant hass)
Definition: network.py:27
None websocket_network_adapters_configure(HomeAssistant hass, ActiveConnection connection, dict[str, Any] msg)
Definition: websocket.py:58
None async_register_websocket_commands(HomeAssistant hass)
Definition: websocket.py:20
None websocket_network_url(HomeAssistant hass, ActiveConnection connection, dict[str, Any] msg)
Definition: websocket.py:81
None websocket_network_adapters(HomeAssistant hass, ActiveConnection connection, dict[str, Any] msg)
Definition: websocket.py:34
str get_url(HomeAssistant hass, *bool require_current_request=False, bool require_ssl=False, bool require_standard_port=False, bool require_cloud=False, bool allow_internal=True, bool allow_external=True, bool allow_cloud=True, bool|None allow_ip=None, bool|None prefer_external=None, bool prefer_cloud=False)
Definition: network.py:131