1 """HTTP views to interact with the area registry."""
3 from __future__
import annotations
7 import voluptuous
as vol
16 """Enable the Area Registry views."""
17 websocket_api.async_register_command(hass, websocket_list_areas)
18 websocket_api.async_register_command(hass, websocket_create_area)
19 websocket_api.async_register_command(hass, websocket_delete_area)
20 websocket_api.async_register_command(hass, websocket_update_area)
24 @websocket_api.websocket_command({vol.Required("type"):
"config/area_registry/list"})
31 """Handle list areas command."""
32 registry = ar.async_get(hass)
33 connection.send_result(
35 [entry.json_fragment
for entry
in registry.async_list_areas()],
39 @websocket_api.websocket_command(
{
vol.Required("type"):
"config/area_registry/create",
40 vol.Optional(
"aliases"): list,
41 vol.Optional(
"floor_id"): str,
42 vol.Optional(
"icon"): str,
43 vol.Optional(
"labels"): [str],
44 vol.Required(
"name"): str,
45 vol.Optional(
"picture"): vol.Any(str,
None),
48 @websocket_api.require_admin
55 """Create area command."""
56 registry = ar.async_get(hass)
64 data[
"aliases"] = set(data[
"aliases"])
68 data[
"labels"] = set(data[
"labels"])
71 entry = registry.async_create(**data)
72 except ValueError
as err:
73 connection.send_error(msg[
"id"],
"invalid_info",
str(err))
75 connection.send_result(msg[
"id"], entry.json_fragment)
78 @websocket_api.websocket_command(
{
vol.Required("type"):
"config/area_registry/delete",
79 vol.Required(
"area_id"): str,
82 @websocket_api.require_admin
89 """Delete area command."""
90 registry = ar.async_get(hass)
93 registry.async_delete(msg[
"area_id"])
95 connection.send_error(msg[
"id"],
"invalid_info",
"Area ID doesn't exist")
97 connection.send_message(websocket_api.result_message(msg[
"id"],
"success"))
100 @websocket_api.websocket_command(
{
vol.Required("type"):
"config/area_registry/update",
101 vol.Optional(
"aliases"): list,
102 vol.Required(
"area_id"): str,
103 vol.Optional(
"floor_id"): vol.Any(str,
None),
104 vol.Optional(
"icon"): vol.Any(str,
None),
105 vol.Optional(
"labels"): [str],
106 vol.Optional(
"name"): str,
107 vol.Optional(
"picture"): vol.Any(str,
None),
110 @websocket_api.require_admin
117 """Handle update area websocket command."""
118 registry = ar.async_get(hass)
124 if "aliases" in data:
126 data[
"aliases"] = set(data[
"aliases"])
130 data[
"labels"] = set(data[
"labels"])
133 entry = registry.async_update(**data)
134 except ValueError
as err:
135 connection.send_error(msg[
"id"],
"invalid_info",
str(err))
137 connection.send_result(msg[
"id"], entry.json_fragment)
138
bool async_setup(HomeAssistant hass)
None websocket_update_area(HomeAssistant hass, websocket_api.ActiveConnection connection, dict[str, Any] msg)
None websocket_list_areas(HomeAssistant hass, websocket_api.ActiveConnection connection, dict[str, Any] msg)
None websocket_delete_area(HomeAssistant hass, websocket_api.ActiveConnection connection, dict[str, Any] msg)
None websocket_create_area(HomeAssistant hass, websocket_api.ActiveConnection connection, dict[str, Any] msg)