Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 32 additions & 31 deletions roborock/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@
from pyshark.capture.live_capture import LiveCapture, UnknownInterfaceException # type: ignore
from pyshark.packet.packet import Packet # type: ignore

from roborock import SHORT_MODEL_TO_ENUM, RoborockCommand
from roborock.data import DeviceData, RoborockBase, UserData
from roborock import RoborockCommand
from roborock.data import RoborockBase, UserData
from roborock.device_features import DeviceFeatures
from roborock.devices.cache import Cache, CacheData
from roborock.devices.device import RoborockDevice
Expand All @@ -53,7 +53,6 @@
from roborock.devices.traits.v1.map_content import MapContentTrait
from roborock.exceptions import RoborockException, RoborockUnsupportedFeature
from roborock.protocol import MessageParser
from roborock.version_1_apis.roborock_mqtt_client_v1 import RoborockMqttClientV1
from roborock.web_api import RoborockApiClient

_LOGGER = logging.getLogger(__name__)
Expand Down Expand Up @@ -822,44 +821,46 @@ async def get_device_info(ctx: click.Context):
"""
click.echo("Discovering devices...")
context: RoborockContext = ctx.obj
connection_cache = await context.get_devices()

home_data = connection_cache.cache_data.home_data

all_devices = home_data.get_all_devices()
if not all_devices:
device_connection_manager = await context.get_device_manager()
device_manager = await device_connection_manager.ensure_device_manager()
devices = await device_manager.get_devices()
if not devices:
click.echo("No devices found.")
return

click.echo(f"Found {len(all_devices)} devices. Fetching data...")
click.echo(f"Found {len(devices)} devices. Fetching data...")

all_products_data = {}

for device in all_devices:
for device in devices:
click.echo(f" - Processing {device.name} ({device.duid})")
product_info = home_data.product_map[device.product_id]
device_data = DeviceData(device, product_info.model)
mqtt_client = RoborockMqttClientV1(connection_cache.user_data, device_data)

try:
init_status_result = await mqtt_client.send_command(
RoborockCommand.APP_GET_INIT_STATUS,
)
product_nickname = SHORT_MODEL_TO_ENUM.get(product_info.model.split(".")[-1]).name
current_product_data = {
"Protocol Version": device.pv,
"Product Nickname": product_nickname,
"New Feature Info": init_status_result.get("new_feature_info"),
"New Feature Info Str": init_status_result.get("new_feature_info_str"),
"Feature Info": init_status_result.get("feature_info"),
}
if device.product.model in all_products_data:
click.echo(f" - Skipping duplicate model {device.product.model}")
continue

all_products_data[product_info.model] = current_product_data
current_product_data = {
"Protocol Version": device.device_info.pv,
"Product Nickname": device.product.product_nickname.name,
}
if device.v1_properties is not None:
try:
result: list[dict[str, Any]] = await device.v1_properties.command.send(
RoborockCommand.APP_GET_INIT_STATUS
)
except Exception as e:
click.echo(f" - Error processing device {device.name}: {e}", err=True)
continue
init_status_result = result[0] if result else {}
current_product_data.update(
{
"New Feature Info": init_status_result.get("new_feature_info"),
"New Feature Info Str": init_status_result.get("new_feature_info_str"),
"Feature Info": init_status_result.get("feature_info"),
}
)

except Exception as e:
click.echo(f" - Error processing device {device.name}: {e}", err=True)
finally:
await mqtt_client.async_release()
all_products_data[device.product.model] = current_product_data

if all_products_data:
click.echo("\n--- Device Information (copy to your YAML file) ---\n")
Expand Down
2 changes: 0 additions & 2 deletions roborock/devices/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -556,8 +556,6 @@ The new design:
- Clear separation of concerns through layers
- Users work with devices, not raw clients

**Note**: Legacy APIs in `version_1_apis/` and `version_a01_apis/` are deprecated and will be removed.


## Implementation Details

Expand Down