Home Assistant Unofficial Reference 2024.12.1
area_registry.py
Go to the documentation of this file.
1 """HTTP views to interact with the area registry."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 import voluptuous as vol
8 
9 from homeassistant.components import websocket_api
10 from homeassistant.core import HomeAssistant, callback
11 from homeassistant.helpers import area_registry as ar
12 
13 
14 @callback
15 def async_setup(hass: HomeAssistant) -> bool:
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)
21  return True
22 
23 
24 @websocket_api.websocket_command({vol.Required("type"): "config/area_registry/list"})
25 @callback
27  hass: HomeAssistant,
29  msg: dict[str, Any],
30 ) -> None:
31  """Handle list areas command."""
32  registry = ar.async_get(hass)
33  connection.send_result(
34  msg["id"],
35  [entry.json_fragment for entry in registry.async_list_areas()],
36  )
37 
38 
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),
46  }
47 )
48 @websocket_api.require_admin
49 @callback
51  hass: HomeAssistant,
53  msg: dict[str, Any],
54 ) -> None:
55  """Create area command."""
56  registry = ar.async_get(hass)
57 
58  data = dict(msg)
59  data.pop("type")
60  data.pop("id")
61 
62  if "aliases" in data:
63  # Convert aliases to a set
64  data["aliases"] = set(data["aliases"])
65 
66  if "labels" in data:
67  # Convert labels to a set
68  data["labels"] = set(data["labels"])
69 
70  try:
71  entry = registry.async_create(**data)
72  except ValueError as err:
73  connection.send_error(msg["id"], "invalid_info", str(err))
74  else:
75  connection.send_result(msg["id"], entry.json_fragment)
76 
77 
78 @websocket_api.websocket_command( { vol.Required("type"): "config/area_registry/delete",
79  vol.Required("area_id"): str,
80  }
81 )
82 @websocket_api.require_admin
83 @callback
85  hass: HomeAssistant,
87  msg: dict[str, Any],
88 ) -> None:
89  """Delete area command."""
90  registry = ar.async_get(hass)
91 
92  try:
93  registry.async_delete(msg["area_id"])
94  except KeyError:
95  connection.send_error(msg["id"], "invalid_info", "Area ID doesn't exist")
96  else:
97  connection.send_message(websocket_api.result_message(msg["id"], "success"))
98 
99 
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),
108  }
109 )
110 @websocket_api.require_admin
111 @callback
113  hass: HomeAssistant,
114  connection: websocket_api.ActiveConnection,
115  msg: dict[str, Any],
116 ) -> None:
117  """Handle update area websocket command."""
118  registry = ar.async_get(hass)
119 
120  data = dict(msg)
121  data.pop("type")
122  data.pop("id")
123 
124  if "aliases" in data:
125  # Convert aliases to a set
126  data["aliases"] = set(data["aliases"])
127 
128  if "labels" in data:
129  # Convert labels to a set
130  data["labels"] = set(data["labels"])
131 
132  try:
133  entry = registry.async_update(**data)
134  except ValueError as err:
135  connection.send_error(msg["id"], "invalid_info", str(err))
136  else:
137  connection.send_result(msg["id"], entry.json_fragment)
138 
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)