|
11 | 11 | from pyshark.packet.packet import Packet # type: ignore |
12 | 12 |
|
13 | 13 | from roborock import RoborockException |
14 | | -from roborock.containers import DeviceData, LoginData |
| 14 | +from roborock.containers import DeviceData, HomeDataProduct, LoginData |
15 | 15 | from roborock.protocol import MessageParser |
16 | 16 | from roborock.util import run_sync |
| 17 | +from roborock.version_1_apis.roborock_local_client_v1 import RoborockLocalClientV1 |
17 | 18 | from roborock.version_1_apis.roborock_mqtt_client_v1 import RoborockMqttClientV1 |
18 | 19 | from roborock.web_api import RoborockApiClient |
19 | 20 |
|
@@ -145,6 +146,29 @@ async def execute_scene(ctx, scene_id): |
145 | 146 | await client.execute_scene(login_data.user_data, scene_id) |
146 | 147 |
|
147 | 148 |
|
| 149 | +@click.command() |
| 150 | +@click.option("--device_id", required=True) |
| 151 | +@click.pass_context |
| 152 | +@run_sync() |
| 153 | +async def status(ctx, device_id): |
| 154 | + context: RoborockContext = ctx.obj |
| 155 | + login_data = context.login_data() |
| 156 | + if not login_data.home_data: |
| 157 | + await _discover(ctx) |
| 158 | + login_data = context.login_data() |
| 159 | + home_data = login_data.home_data |
| 160 | + devices = home_data.devices + home_data.received_devices |
| 161 | + device = next(device for device in devices if device.duid == device_id) |
| 162 | + product_info: dict[str, HomeDataProduct] = {product.id: product for product in home_data.products} |
| 163 | + device_data = DeviceData(device, product_info[device.product_id].model) |
| 164 | + mqtt_client = RoborockMqttClientV1(login_data.user_data, device_data) |
| 165 | + networking = await mqtt_client.get_networking() |
| 166 | + local_device_data = DeviceData(device, product_info[device.product_id].model, networking.ip) |
| 167 | + local_client = RoborockLocalClientV1(local_device_data) |
| 168 | + status = await local_client.get_status() |
| 169 | + click.echo(json.dumps(status.as_dict(), indent=4)) |
| 170 | + |
| 171 | + |
148 | 172 | @click.command() |
149 | 173 | @click.option("--device_id", required=True) |
150 | 174 | @click.option("--cmd", required=True) |
@@ -226,6 +250,7 @@ def on_package(packet: Packet): |
226 | 250 | cli.add_command(list_devices) |
227 | 251 | cli.add_command(list_scenes) |
228 | 252 | cli.add_command(execute_scene) |
| 253 | +cli.add_command(status) |
229 | 254 | cli.add_command(command) |
230 | 255 | cli.add_command(parser) |
231 | 256 |
|
|
0 commit comments