Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
49 changes: 25 additions & 24 deletions roborock/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 @@ -826,40 +825,42 @@ async def get_device_info(ctx: click.Context):

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,
if device.product.model in all_products_data:
click.echo(f" - Skipping duplicate model {device.product.model}")
continue

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"),
}

all_products_data[product_info.model] = current_product_data

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
Loading