Install
openclaw skills install @jru001/roborock-2014教 OpenClaw 如何安装、配置和使用 roborock-cli(石头扫地机 CLI 控制工具)。 涵盖:uv 安装、认证流程、15 个 CLI 命令的使用、设备控制、错误诊断与恢复。 当用户提到"扫地机"、"roborock"、"扫地"、"拖地"、"清洁机器人"、"回充"、"集尘"、 "洗拖布"、"勿扰模式"、"roborock-cli"、"石头扫地机"、"扫地机器人"时触发本 skill。 也适用于用户想编写扫地机自动化脚本、定时清洁、集成 roborock-cli 到其他系统的场景。
openclaw skills install @jru001/roborock-2014本 skill 指导你(OpenClaw)如何安装和使用 roborock-cli 来控制石头扫地机。
所有命令输出格式化 JSON,可直接用 jq 解析。
用户想做什么?
├─ 安装 roborock-cli → §1 安装流程
├─ 首次使用 / 认证问题 → §2 认证流程
├─ 查询设备信息 → §3 查询命令
├─ 控制扫地机 → §4 控制命令
├─ 故障排除 → §5 错误处理
└─ 编写自动化脚本 → §6 脚本集成
uv --version
command not found → 执行 1.2macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
安装后验证:uv --version
uv tool install roborock-cli
验证:
roborock-cli --version
roborock-cli x.y.zos error 4551):→ §5.4uv tool upgrade roborock-cli
uv tool uninstall roborock-cli
rm -rf ~/.cache/roborock-cli/ # 清理认证和缓存
认证是所有其他命令的前置条件。认证信息保存在 ~/.cache/roborock-cli/user_data.json。
roborock-cli auth
要求:必须在交互式 TTY 终端执行(不支持管道/非交互环境)。
流程:
roborock-cli auth,提示用户输入 Roborock 账号邮箱⚠️ 重要:避免重复运行 roborock-cli auth
每次运行 roborock-cli auth 都会发送新的验证码,导致之前的验证码立即失效。正确做法:
roborock-cli auth,然后等待用户提供验证码roborock-cli authroborock-cli authroborock-cli devices
roborock-cli auth查询命令不改变设备状态,可安全执行。
| 命令 | 用途 | 关键输出 |
|---|---|---|
devices | 列出设备 | devices[].name → -d 参数 |
status -d DEV | 设备状态 | rooms[].segment_id → start-clean -s |
routines -d DEV | 智能场景 | routines[].id → execute-routine |
map -d DEV | 地图信息 | 位置坐标、可选保存 PNG |
devices → name ──────────────────────► 所有命令的 -d 参数(模糊匹配)
status → rooms[].segment_id ───────► start-clean -s(指定房间)
status → dnd_enabled/start/end ────► set-dnd(修改勿扰)
status → volume.value ────────────► set-volume(修改音量)
routines → routines[].id ──────────► execute-routine(执行场景)
-d 参数)-d,自动选择-d,否则报 exit_code=4(ParamError)-d 客厅 匹配 "客厅扫地机")# 1. 获取设备名
roborock-cli devices | jq '.devices[].name'
# 2. 获取设备状态(含房间列表)
roborock-cli status -d "设备名" | jq '.rooms.value'
# 3. 获取场景列表
roborock-cli routines -d "设备名" | jq '.routines[]'
完整的命令参数和输出字段规格,参见 references/commands.md。
所有控制命令成功返回 {"status": "ok", ...}。执行前应确认设备状态。
用户意图
├─ 清洁
│ ├─ 全屋清洁 → start-clean
│ ├─ 指定房间 → 先 status 获取 segment_id → start-clean -s ID [-r N]
│ ├─ 暂停 → pause-clean
│ ├─ 恢复 → resume-clean
│ └─ 停止 → stop-clean
├─ 回充电座 → go-home
├─ 基座操作
│ ├─ 集尘 → dock-action start_collect_dust / stop_collect_dust
│ └─ 洗拖布 → dock-action start_wash / stop_wash
├─ 声音与勿扰
│ ├─ 调节音量 → set-volume N(0-100)
│ ├─ 发声寻找机器人 → find-robot(让机器人发出"滴滴"声,不返回坐标)
│ └─ 勿扰模式 → set-dnd enable --start HH:MM --end HH:MM / set-dnd disable
└─ 场景 → 先 routines 获取 id → execute-routine ID
在执行控制命令前,建议先检查设备状态:
# 检查设备是否空闲
STATE=$(roborock-cli status -d "设备名" | jq -r '.state.value')
# state=charging / idle → 可以开始清洁
# state=cleaning → 正在清洁中
# state=error → 有错误,检查 error_code
# 1. 获取房间 segment_id
roborock-cli status -d "设备名" | jq '.rooms.value[] | "\(.segment_id) → \(.name)"'
# 2. 执行清洁(segment_id=16,清洁 2 遍)
roborock-cli start-clean -d "设备名" -s 16 -r 2
# 3. 验证已开始
roborock-cli status -d "设备名" | jq '.state.value'
# 期望输出: "cleaning"
完整的命令参数规格,参见 references/commands.md。
| 退出码 | 含义 | 恢复动作 |
|---|---|---|
| 0 | 成功 | — |
| 1 | 通用错误(连接超时等) | 检查网络 → 重试 |
| 2 | 认证错误 | roborock-cli auth 重新认证 |
| 3 | 设备错误 | roborock-cli devices 确认设备名 |
| 4 | 参数无效 | 检查参数范围(音量 0-100、时间 HH:MM) |
| 5 | 内部错误 | 报告给用户 |
| 130 | 用户中断 | Ctrl+C,无需处理 |
错误输出格式:{"error": "描述", "exit_code": N}
{"error": "连接超时(30.0秒)", "exit_code": 1}
排查步骤:
roborock-cli auth # 重新认证即可
Roborock API 限制 get_home_data 调用 5 次/小时、40 次/天。
诊断:
ls -la ~/.cache/roborock-cli/device_cache.pkl
# 正常 ~3KB,0 字节说明缓存写入失败
修复:
rm ~/.cache/roborock-cli/device_cache.pkl
roborock-cli devices # 重建缓存
os error 4551Windows 安全策略阻止 uv 缓存目录下的 Python 解释器。
修复方法 1(推荐):
uv cache clean
uv tool install roborock-cli
修复方法 2:
uv tool install --python python3.12 roborock-cli
if roborock-cli start-clean -s 16 >/dev/null; then
echo "清洁已启动"
else
echo "启动失败,退出码: $?"
fi
注意:roborock-cli 的正常输出和错误 JSON 都输出到 stdout,不输出到 stderr。抑制输出用
>/dev/null,不是2>/dev/null。
所有正常输出为格式化 JSON(indent=2, ensure_ascii=False),可用 jq 处理:
# 获取电池电量
roborock-cli status -d "设备名" | jq '.battery.value'
# 获取所有房间名和 ID
roborock-cli status -d "设备名" | jq '.rooms.value[] | {name, segment_id}'
# 获取场景 ID 和名称
roborock-cli routines -d "设备名" | jq '.routines[] | "\(.id) → \(.name)"'
| 变量 | 默认值 | 说明 |
|---|---|---|
ROBOROCK_AUTH_CACHE | ~/.cache/roborock-cli/user_data.json | 认证缓存路径 |
ROBOROCK_DEVICE_CACHE | ~/.cache/roborock-cli/device_cache.pkl | 设备缓存路径 |
除 auth 和 devices 外,所有命令要求设备支持 V1 协议。不支持时返回 exit_code=3。绝大多数近年 Roborock 设备均支持。
references/commands.md