Home Assistant Unofficial Reference 2024.12.1
const.py
Go to the documentation of this file.
1 """Constants for Google Assistant."""
2 
3 from homeassistant.components import (
4  alarm_control_panel,
5  binary_sensor,
6  button,
7  camera,
8  climate,
9  cover,
10  event,
11  fan,
12  group,
13  humidifier,
14  input_boolean,
15  input_button,
16  input_select,
17  light,
18  lock,
19  media_player,
20  scene,
21  script,
22  select,
23  sensor,
24  switch,
25  vacuum,
26  valve,
27  water_heater,
28 )
29 
30 DOMAIN = "google_assistant"
31 
32 GOOGLE_ASSISTANT_API_ENDPOINT = "/api/google_assistant"
33 
34 CONF_ALIASES = "aliases"
35 CONF_CLIENT_EMAIL = "client_email"
36 CONF_ENTITY_CONFIG = "entity_config"
37 CONF_EXPOSE = "expose"
38 CONF_EXPOSE_BY_DEFAULT = "expose_by_default"
39 CONF_EXPOSED_DOMAINS = "exposed_domains"
40 CONF_PRIVATE_KEY = "private_key"
41 CONF_PROJECT_ID = "project_id"
42 CONF_REPORT_STATE = "report_state"
43 CONF_ROOM_HINT = "room"
44 CONF_SECURE_DEVICES_PIN = "secure_devices_pin"
45 CONF_SERVICE_ACCOUNT = "service_account"
46 
47 DATA_CONFIG = "config"
48 
49 DEFAULT_EXPOSE_BY_DEFAULT = True
50 DEFAULT_EXPOSED_DOMAINS = [
51  "alarm_control_panel",
52  "binary_sensor",
53  "climate",
54  "cover",
55  "event",
56  "fan",
57  "group",
58  "humidifier",
59  "input_boolean",
60  "input_select",
61  "light",
62  "lock",
63  "media_player",
64  "scene",
65  "script",
66  "select",
67  "sensor",
68  "switch",
69  "vacuum",
70  "valve",
71  "water_heater",
72 ]
73 
74 # https://developers.google.com/assistant/smarthome/guides
75 PREFIX_TYPES = "action.devices.types."
76 TYPE_ALARM = f"{PREFIX_TYPES}SECURITYSYSTEM"
77 TYPE_AWNING = f"{PREFIX_TYPES}AWNING"
78 TYPE_BLINDS = f"{PREFIX_TYPES}BLINDS"
79 TYPE_CAMERA = f"{PREFIX_TYPES}CAMERA"
80 TYPE_CURTAIN = f"{PREFIX_TYPES}CURTAIN"
81 TYPE_CARBON_MONOXIDE_DETECTOR = f"{PREFIX_TYPES}CARBON_MONOXIDE_DETECTOR"
82 TYPE_DEHUMIDIFIER = f"{PREFIX_TYPES}DEHUMIDIFIER"
83 TYPE_DOOR = f"{PREFIX_TYPES}DOOR"
84 TYPE_DOORBELL = f"{PREFIX_TYPES}DOORBELL"
85 TYPE_FAN = f"{PREFIX_TYPES}FAN"
86 TYPE_GARAGE = f"{PREFIX_TYPES}GARAGE"
87 TYPE_GATE = f"{PREFIX_TYPES}GATE"
88 TYPE_HUMIDIFIER = f"{PREFIX_TYPES}HUMIDIFIER"
89 TYPE_LIGHT = f"{PREFIX_TYPES}LIGHT"
90 TYPE_LOCK = f"{PREFIX_TYPES}LOCK"
91 TYPE_OUTLET = f"{PREFIX_TYPES}OUTLET"
92 TYPE_RECEIVER = f"{PREFIX_TYPES}AUDIO_VIDEO_RECEIVER"
93 TYPE_SCENE = f"{PREFIX_TYPES}SCENE"
94 TYPE_SENSOR = f"{PREFIX_TYPES}SENSOR"
95 TYPE_SETTOP = f"{PREFIX_TYPES}SETTOP"
96 TYPE_SHUTTER = f"{PREFIX_TYPES}SHUTTER"
97 TYPE_SMOKE_DETECTOR = f"{PREFIX_TYPES}SMOKE_DETECTOR"
98 TYPE_SPEAKER = f"{PREFIX_TYPES}SPEAKER"
99 TYPE_SWITCH = f"{PREFIX_TYPES}SWITCH"
100 TYPE_THERMOSTAT = f"{PREFIX_TYPES}THERMOSTAT"
101 TYPE_TV = f"{PREFIX_TYPES}TV"
102 TYPE_WINDOW = f"{PREFIX_TYPES}WINDOW"
103 TYPE_VACUUM = f"{PREFIX_TYPES}VACUUM"
104 TYPE_VALVE = f"{PREFIX_TYPES}VALVE"
105 TYPE_WATERHEATER = f"{PREFIX_TYPES}WATERHEATER"
106 
107 SERVICE_REQUEST_SYNC = "request_sync"
108 HOMEGRAPH_URL = "https://homegraph.googleapis.com/"
109 HOMEGRAPH_SCOPE = "https://www.googleapis.com/auth/homegraph"
110 HOMEGRAPH_TOKEN_URL = "https://accounts.google.com/o/oauth2/token"
111 REQUEST_SYNC_BASE_URL = f"{HOMEGRAPH_URL}v1/devices:requestSync"
112 REPORT_STATE_BASE_URL = f"{HOMEGRAPH_URL}v1/devices:reportStateAndNotification"
113 
114 # Error codes used for SmartHomeError class
115 # https://developers.google.com/actions/reference/smarthome/errors-exceptions
116 ERR_ALREADY_ARMED = "alreadyArmed"
117 ERR_ALREADY_DISARMED = "alreadyDisarmed"
118 ERR_ALREADY_STOPPED = "alreadyStopped"
119 ERR_CHALLENGE_NEEDED = "challengeNeeded"
120 ERR_CHALLENGE_NOT_SETUP = "challengeFailedNotSetup"
121 ERR_DEVICE_NOT_FOUND = "deviceNotFound"
122 ERR_DEVICE_OFFLINE = "deviceOffline"
123 ERR_FUNCTION_NOT_SUPPORTED = "functionNotSupported"
124 ERR_NO_AVAILABLE_CHANNEL = "noAvailableChannel"
125 ERR_NOT_SUPPORTED = "notSupported"
126 ERR_PIN_INCORRECT = "pinIncorrect"
127 ERR_PROTOCOL_ERROR = "protocolError"
128 ERR_TOO_MANY_FAILED_ATTEMPTS = "tooManyFailedAttempts"
129 ERR_UNKNOWN_ERROR = "unknownError"
130 ERR_UNSUPPORTED_INPUT = "unsupportedInput"
131 ERR_USER_CANCELLED = "userCancelled"
132 ERR_VALUE_OUT_OF_RANGE = "valueOutOfRange"
133 
134 # Event types
135 EVENT_COMMAND_RECEIVED = "google_assistant_command"
136 EVENT_QUERY_RECEIVED = "google_assistant_query"
137 EVENT_SYNC_RECEIVED = "google_assistant_sync"
138 
139 DOMAIN_TO_GOOGLE_TYPES = {
140  alarm_control_panel.DOMAIN: TYPE_ALARM,
141  binary_sensor.DOMAIN: TYPE_SENSOR,
142  button.DOMAIN: TYPE_SCENE,
143  camera.DOMAIN: TYPE_CAMERA,
144  climate.DOMAIN: TYPE_THERMOSTAT,
145  cover.DOMAIN: TYPE_BLINDS,
146  fan.DOMAIN: TYPE_FAN,
147  group.DOMAIN: TYPE_SWITCH,
148  humidifier.DOMAIN: TYPE_HUMIDIFIER,
149  input_boolean.DOMAIN: TYPE_SWITCH,
150  input_button.DOMAIN: TYPE_SCENE,
151  input_select.DOMAIN: TYPE_SENSOR,
152  light.DOMAIN: TYPE_LIGHT,
153  lock.DOMAIN: TYPE_LOCK,
154  media_player.DOMAIN: TYPE_SETTOP,
155  scene.DOMAIN: TYPE_SCENE,
156  script.DOMAIN: TYPE_SCENE,
157  select.DOMAIN: TYPE_SENSOR,
158  sensor.DOMAIN: TYPE_SENSOR,
159  switch.DOMAIN: TYPE_SWITCH,
160  vacuum.DOMAIN: TYPE_VACUUM,
161  valve.DOMAIN: TYPE_VALVE,
162  water_heater.DOMAIN: TYPE_WATERHEATER,
163 }
164 
165 DEVICE_CLASS_TO_GOOGLE_TYPES = {
166  (binary_sensor.DOMAIN, binary_sensor.BinarySensorDeviceClass.DOOR): TYPE_DOOR,
167  (binary_sensor.DOMAIN, binary_sensor.BinarySensorDeviceClass.LOCK): TYPE_SENSOR,
168  (binary_sensor.DOMAIN, binary_sensor.BinarySensorDeviceClass.OPENING): TYPE_SENSOR,
169  (binary_sensor.DOMAIN, binary_sensor.BinarySensorDeviceClass.WINDOW): TYPE_WINDOW,
170  (
171  binary_sensor.DOMAIN,
172  binary_sensor.BinarySensorDeviceClass.GARAGE_DOOR,
173  ): TYPE_GARAGE,
174  (
175  binary_sensor.DOMAIN,
176  binary_sensor.BinarySensorDeviceClass.SMOKE,
177  ): TYPE_SMOKE_DETECTOR,
178  (
179  binary_sensor.DOMAIN,
180  binary_sensor.BinarySensorDeviceClass.CO,
181  ): TYPE_CARBON_MONOXIDE_DETECTOR,
182  (cover.DOMAIN, cover.CoverDeviceClass.AWNING): TYPE_AWNING,
183  (cover.DOMAIN, cover.CoverDeviceClass.CURTAIN): TYPE_CURTAIN,
184  (cover.DOMAIN, cover.CoverDeviceClass.DOOR): TYPE_DOOR,
185  (cover.DOMAIN, cover.CoverDeviceClass.GARAGE): TYPE_GARAGE,
186  (cover.DOMAIN, cover.CoverDeviceClass.GATE): TYPE_GATE,
187  (cover.DOMAIN, cover.CoverDeviceClass.SHUTTER): TYPE_SHUTTER,
188  (cover.DOMAIN, cover.CoverDeviceClass.WINDOW): TYPE_WINDOW,
189  (event.DOMAIN, event.EventDeviceClass.DOORBELL): TYPE_DOORBELL,
190  (
191  humidifier.DOMAIN,
192  humidifier.HumidifierDeviceClass.DEHUMIDIFIER,
193  ): TYPE_DEHUMIDIFIER,
194  (humidifier.DOMAIN, humidifier.HumidifierDeviceClass.HUMIDIFIER): TYPE_HUMIDIFIER,
195  (media_player.DOMAIN, media_player.MediaPlayerDeviceClass.RECEIVER): TYPE_RECEIVER,
196  (media_player.DOMAIN, media_player.MediaPlayerDeviceClass.SPEAKER): TYPE_SPEAKER,
197  (media_player.DOMAIN, media_player.MediaPlayerDeviceClass.TV): TYPE_TV,
198  (sensor.DOMAIN, sensor.SensorDeviceClass.AQI): TYPE_SENSOR,
199  (sensor.DOMAIN, sensor.SensorDeviceClass.HUMIDITY): TYPE_SENSOR,
200  (sensor.DOMAIN, sensor.SensorDeviceClass.TEMPERATURE): TYPE_SENSOR,
201  (switch.DOMAIN, switch.SwitchDeviceClass.OUTLET): TYPE_OUTLET,
202  (switch.DOMAIN, switch.SwitchDeviceClass.SWITCH): TYPE_SWITCH,
203 }
204 
205 CHALLENGE_ACK_NEEDED = "ackNeeded"
206 CHALLENGE_FAILED_PIN_NEEDED = "challengeFailedPinNeeded"
207 CHALLENGE_PIN_NEEDED = "pinNeeded"
208 
209 STORE_AGENT_USER_IDS = "agent_user_ids"
210 STORE_GOOGLE_LOCAL_WEBHOOK_ID = "local_webhook_id"
211 
212 SOURCE_CLOUD = "cloud"
213 SOURCE_LOCAL = "local"
214 
215 NOT_EXPOSE_LOCAL = {TYPE_ALARM, TYPE_LOCK, TYPE_THERMOSTAT}
216 
217 FAN_SPEEDS = {
218  "5/5": ["High", "Max", "Fast", "5"],
219  "4/5": ["Medium High", "4"],
220  "3/5": ["Medium", "3"],
221  "2/5": ["Medium Low", "2"],
222  "1/5": ["Low", "Min", "Slow", "1"],
223  "4/4": ["High", "Max", "Fast", "4"],
224  "3/4": ["Medium High", "3"],
225  "2/4": ["Medium Low", "2"],
226  "1/4": ["Low", "Min", "Slow", "1"],
227  "3/3": ["High", "Max", "Fast", "3"],
228  "2/3": ["Medium", "2"],
229  "1/3": ["Low", "Min", "Slow", "1"],
230  "2/2": ["High", "Max", "Fast", "2"],
231  "1/2": ["Low", "Min", "Slow", "1"],
232  "1/1": ["Normal", "1"],
233 }