|
11 | 11 | import aiohttp
|
12 | 12 | from aiohttp import ContentTypeError
|
13 | 13 |
|
14 |
| -from roborock.containers import HomeData, HomeDataRoom, ProductResponse, RRiot, UserData |
| 14 | +from roborock.containers import HomeData, HomeDataRoom, ProductResponse, RRiot, UserData, HomeDataScene |
15 | 15 | from roborock.exceptions import (
|
16 | 16 | RoborockAccountDoesNotExist,
|
17 | 17 | RoborockException,
|
@@ -269,6 +269,46 @@ async def get_rooms(self, user_data: UserData, home_id: int | None = None) -> li
|
269 | 269 | else:
|
270 | 270 | raise RoborockException("home_response result was an unexpected type")
|
271 | 271 |
|
| 272 | + async def get_scenes(self, user_data: UserData, home_id: int) -> list[HomeDataRoom]: |
| 273 | + rriot = user_data.rriot |
| 274 | + if rriot is None: |
| 275 | + raise RoborockException("rriot is none") |
| 276 | + if rriot.r.a is None: |
| 277 | + raise RoborockException("Missing field 'a' in rriot reference") |
| 278 | + scenes_request = PreparedRequest( |
| 279 | + rriot.r.a, |
| 280 | + { |
| 281 | + "Authorization": self._get_hawk_authentication(rriot, f"/user/scene/device/{str(home_id)}"), |
| 282 | + }, |
| 283 | + ) |
| 284 | + scenes_response = await scenes_request.request("get", f"/user/scene/device/{str(home_id)}") |
| 285 | + if not scenes_response.get("success"): |
| 286 | + raise RoborockException(scenes_response) |
| 287 | + scenes = scenes_response.get("result") |
| 288 | + if isinstance(scenes, list): |
| 289 | + output_list = [] |
| 290 | + for scene in scenes: |
| 291 | + output_list.append(HomeDataScene.from_dict(scene)) |
| 292 | + return output_list |
| 293 | + else: |
| 294 | + raise RoborockException("home_response result was an unexpected type") |
| 295 | + |
| 296 | + async def execute_scene(self, user_data: UserData, scene_id: int) -> list[HomeDataRoom]: |
| 297 | + rriot = user_data.rriot |
| 298 | + if rriot is None: |
| 299 | + raise RoborockException("rriot is none") |
| 300 | + if rriot.r.a is None: |
| 301 | + raise RoborockException("Missing field 'a' in rriot reference") |
| 302 | + execute_scene_request = PreparedRequest( |
| 303 | + rriot.r.a, |
| 304 | + { |
| 305 | + "Authorization": self._get_hawk_authentication(rriot, f"/user/scene/{str(scene_id)}/execute"), |
| 306 | + }, |
| 307 | + ) |
| 308 | + execute_scene_response = await execute_scene_request.request("post", f"/user/scene/{str(scene_id)}/execute") |
| 309 | + if not execute_scene_response.get("success"): |
| 310 | + raise RoborockException(execute_scene_response) |
| 311 | + |
272 | 312 | async def get_products(self, user_data: UserData) -> ProductResponse:
|
273 | 313 | """Gets all products and their schemas, good for determining status codes and model numbers."""
|
274 | 314 | base_url = await self._get_base_url()
|
|
0 commit comments