Skip to content
Closed
Changes from 1 commit
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
6122647
feat(q10): Add Q10 vacuum CLI commands
lboue Feb 1, 2026
98f83f0
refactor(q10): Extract Q10 vacuum trait helper to reduce duplication
lboue Feb 1, 2026
2cf5bd1
fix(q10): Handle unsupported device errors gracefully
lboue Feb 1, 2026
6f4b506
fix(q10): Use correct B01 Q10 properties API
lboue Feb 1, 2026
dc8ba01
fix(q10): Register Q10 commands in session shell
lboue Feb 1, 2026
d9e226c
feat(q10): Add status API for B01 Q10 devices
lboue Feb 1, 2026
d742167
feat(q10): Add status trait and fan level mapping
lboue Feb 1, 2026
a86e8f0
chore(release): 4.10.0 with Q10 status API and CLI commands
lboue Feb 1, 2026
31b2328
Handle None result from home data API endpoints gracefully
lboue Feb 1, 2026
e1f6ac2
feat(q10): Add Q10 vacuum CLI commands
lboue Feb 1, 2026
f091059
refactor(q10): Extract Q10 vacuum trait helper to reduce duplication
lboue Feb 1, 2026
3d56591
fix(q10): Handle unsupported device errors gracefully
lboue Feb 1, 2026
fc076f6
fix(q10): Use correct B01 Q10 properties API
lboue Feb 1, 2026
353babc
fix(q10): Register Q10 commands in session shell
lboue Feb 1, 2026
1976c84
feat(q10): Add status API for B01 Q10 devices
lboue Feb 1, 2026
de7cf69
feat(q10): Add status trait and fan level mapping
lboue Feb 1, 2026
34b1160
chore(release): 4.10.0 with Q10 status API and CLI commands
lboue Feb 1, 2026
5e90a9c
chore(q10): Update power levels in b01_q10_code_mappings.py
lboue Feb 1, 2026
4adc9c1
fix: Address unresolved code review comments on PR #759
lboue Feb 1, 2026
08de5c2
chore: Fix pre-commit violations (mypy type errors and formatting)
lboue Feb 1, 2026
28716c9
chore: Revert CHANGELOG.md and pyproject.toml to pre-PR state
lboue Feb 1, 2026
8c3345d
fix: changelog
lboue Feb 1, 2026
76605ac
fix: restore pyproject.toml
lboue Feb 1, 2026
e24004e
Add methods to empty dustbin and set clean mode
lboue Feb 13, 2026
48b7fcf
Merge branches 'feat/q10-cli-commands' and 'feat/q10-cli-commands' of…
lboue Feb 13, 2026
d8b759b
Merge branch 'main' into feat/q10-cli-commands
lboue Feb 13, 2026
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
85 changes: 85 additions & 0 deletions roborock/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -1141,6 +1141,86 @@ def write_markdown_table(product_features: dict[str, dict[str, any]], all_featur
click.echo("Done.")


@click.command()
@click.option("--device_id", required=True, help="Device ID")
@click.pass_context
@async_command
async def q10_vacuum_start(ctx, device_id):
Comment thread
lboue marked this conversation as resolved.
Outdated
"""Start vacuum cleaning on Q10 device."""
context: RoborockContext = ctx.obj
device_manager = await context.get_device_manager()
device = await device_manager.get_device(device_id)
Comment thread
lboue marked this conversation as resolved.
Outdated
trait = device.traits.get("VacuumTrait")
if not trait:
raise RoborockUnsupportedFeature("Device does not have VacuumTrait. Is it a Q10?")
await trait.start_clean()
Comment thread
lboue marked this conversation as resolved.
Outdated
Comment thread
lboue marked this conversation as resolved.
Outdated
click.echo("Starting vacuum cleaning...")


@click.command()
@click.option("--device_id", required=True, help="Device ID")
@click.pass_context
@async_command
async def q10_vacuum_pause(ctx, device_id):
"""Pause vacuum cleaning on Q10 device."""
context: RoborockContext = ctx.obj
device_manager = await context.get_device_manager()
device = await device_manager.get_device(device_id)
trait = device.traits.get("VacuumTrait")
if not trait:
raise RoborockUnsupportedFeature("Device does not have VacuumTrait. Is it a Q10?")
await trait.pause_clean()
Comment thread
lboue marked this conversation as resolved.
Outdated
click.echo("Pausing vacuum cleaning...")


@click.command()
@click.option("--device_id", required=True, help="Device ID")
@click.pass_context
@async_command
async def q10_vacuum_resume(ctx, device_id):
"""Resume vacuum cleaning on Q10 device."""
context: RoborockContext = ctx.obj
device_manager = await context.get_device_manager()
device = await device_manager.get_device(device_id)
trait = device.traits.get("VacuumTrait")
if not trait:
raise RoborockUnsupportedFeature("Device does not have VacuumTrait. Is it a Q10?")
await trait.resume_clean()
click.echo("Resuming vacuum cleaning...")
Comment thread
lboue marked this conversation as resolved.
Outdated


@click.command()
@click.option("--device_id", required=True, help="Device ID")
@click.pass_context
@async_command
async def q10_vacuum_stop(ctx, device_id):
"""Stop vacuum cleaning on Q10 device."""
context: RoborockContext = ctx.obj
device_manager = await context.get_device_manager()
device = await device_manager.get_device(device_id)
trait = device.traits.get("VacuumTrait")
if not trait:
raise RoborockUnsupportedFeature("Device does not have VacuumTrait. Is it a Q10?")
await trait.stop_clean()
click.echo("Stopping vacuum cleaning...")
Comment thread
lboue marked this conversation as resolved.
Outdated


@click.command()
@click.option("--device_id", required=True, help="Device ID")
@click.pass_context
@async_command
async def q10_vacuum_dock(ctx, device_id):
"""Return vacuum to dock on Q10 device."""
context: RoborockContext = ctx.obj
device_manager = await context.get_device_manager()
device = await device_manager.get_device(device_id)
trait = device.traits.get("VacuumTrait")
if not trait:
raise RoborockUnsupportedFeature("Device does not have VacuumTrait. Is it a Q10?")
await trait.return_to_dock()
click.echo("Returning vacuum to dock...")
Comment thread
lboue marked this conversation as resolved.
Outdated


cli.add_command(login)
cli.add_command(discover)
cli.add_command(list_devices)
Expand Down Expand Up @@ -1170,6 +1250,11 @@ def write_markdown_table(product_features: dict[str, dict[str, any]], all_featur
cli.add_command(flow_led_status)
cli.add_command(led_status)
cli.add_command(network_info)
cli.add_command(q10_vacuum_start)
cli.add_command(q10_vacuum_pause)
cli.add_command(q10_vacuum_resume)
cli.add_command(q10_vacuum_stop)
cli.add_command(q10_vacuum_dock)


def main():
Expand Down
Loading