返回精选库
Sonoscli·办公与效率

Sonoscli 使用指南:让 OpenClaw 先只读检查 Sonos

本文目录

Sonoscli 让 OpenClaw 通过独立的 sonos 命令查询和控制局域网里的 Sonos 音箱。第一次先做一个小任务:找到自己的房间,读取播放状态和音量。下面以已有 Homebrew 的 macOS 为例;运行命令的机器必须与 Sonos 在同一局域网,且能访问音箱的 TCP 1400 端口。这是 Peter Steinberger 的独立项目,不是 Sonos 官方工具。

先确认 Skill 是否可用

在运行 OpenClaw 的机器上打开终端:

命令
openclaw skills info sonoscli
openclaw skills check

查看它是否已存在、是否满足依赖,以及是否对当前 Agent 可见。列在清单里不等于已经就绪;若提示缺少 sonos,先安装下一节的 CLI,再检查一次。使用多个 Agent 时,可给 check 加 --agent <id> 检查实际使用的那个 Agent。

只有确实缺少 Skill,才考虑安装 ClawHub 上 steipete 的 v1.0.0:

命令
openclaw skills install @steipete/sonoscli --version 1.0.0

Skill 说明与 sonos 命令需要分别准备。当前 OpenClaw 内置版还包含 macOS 本地网络权限和沙盒故障说明,ClawHub v1.0.0 没有这两段;已有内置版时不必用同名上架版覆盖。

安装 sonos,并确认运行位置

在这台 Mac 的终端执行:

命令
brew install steipete/tap/sonoscli
sonos --version

安装包叫 sonoscli,得到的命令叫 sonos。记录实际版本;以下读取行为按发行版 v0.3.4 说明。其他系统可从作者安装文档选择二进制或源码方式。

确认 Sonos 已在 Sonos App 中正常配置,电脑连的是同一家庭网络,而非隔离的访客 Wi-Fi。首次状态查询不需要申请 Sonos API key、Spotify 凭据或安装视频转码工具。若 OpenClaw 的命令实际在另一台主机或容器中运行,那一环境也必须能找到 sonos 并到达家庭局域网;本机终端可用不代表 Agent 环境已经可用。

用发现结果里的真实房间名读取

先发现设备:

命令
sonos discover --format json

从结果中取实际房间名和 IP,并与 Sonos App 对照。默认清单显示可见房间,绑定的环绕音箱等设备可能被隐藏,不要仅凭数量少就断言发现失败。返回 [] 表示没有发现房间,即使命令正常退出,也还没有完成接入验证。

下面的 Kitchen 是占位示例,必须换成你刚发现的完整房间名:

命令
sonos status --name "Kitchen" --format json
sonos volume get --name "Kitchen" --format json
sonos group status --format json

检查播放状态是否为有意义的值,例如 PLAYING、PAUSED_PLAYBACK 或 STOPPED,并与 Sonos App 中同一群组的状态比较。曲目标题只在音箱提供元数据时出现,空标题不能单独说明连接失败。volume get 应返回音量数值及 coordinatorIP,读取失败时会报错。

v0.3.4 的 status 在部分字段读取失败时仍可能正常退出。因此,状态为空或音量显示零时,不能只凭退出码判定所有读取成功;结合单独的 volume get 和 App 核对,无法确认的字段保留为未知。

群组里返回的设备可能是协调器,与命令里的房间名不同。status 和本版 volume get 都会解析到协调器;这里的音量不能当成每个群组成员各自的音量。用 group status 确认成员与协调器,也不要把 --ip 理解为强制绕开群组。以后执行播放或暂停前,仍要明确目标是单独房间还是整个群组。

再交给 OpenClaw 做同一只读任务

终端读取有合理结果后,可以在 OpenClaw 对话里这样输入;把 Kitchen 换成真实房间名:

提示词
请使用 sonoscli Skill,只读检查 Sonos 房间 Kitchen。
先 discover 确认名字,再运行 status、volume get 和 group status。
告诉我播放状态、可读到的曲目、返回的音量与协调器,并解释该房间是否在群组中。
这一轮不要播放、暂停、改音量、改队列或重新分组。
若字段缺失或命令失败,请保留未知并报告原始错误,不猜测状态。

完成标志是 Agent 能读取同一套设备并准确解释返回对象。若终端成功而 Agent 失败,重新核对该 Agent 的 Skill 就绪/可见性、运行环境的 PATH 和本地网络权限。

发现失败时,先分清网络与权限

  • 清单为空或发现超时: 检查同一 LAN/VLAN、访客网络或 Wi-Fi 客户端隔离,以及 TCP 1400 是否可达。CLI 有 SSDP、拓扑与子网扫描退路,但网络隔离仍会挡住访问。已从 Sonos App 或路由器得到真实 IP 时,可改为 sonos status --ip 192.168.1.50 --format json;替换该示例地址。这会跳过名称发现,仍可能解析到群组协调器。
  • macOS 报 sendto: no route to host: 当前内置 Skill 提醒检查「系统设置 → 隐私与安全性 → 本地网络」里实际启动 Gateway 的父进程权限,例如 Terminal、VS Code 或由 launchd 启动的 node。检查运行方式对应的进程,不要只看另一个终端窗口是否能连通。
  • 报 bind: operation not permitted: 检查命令是否在禁止网络或 UDP 的沙盒中运行。需要让实际执行环境按其配置拥有局域网访问能力;安装了 Skill 并不能消除网络限制。

首次流程到只读验证为止。需要控制音乐时,再明确房间、群组和允许的动作;音乐服务的搜索或播放依赖另按对应功能准备。

你的首次任务进行得怎么样?

选择项通过网站统计帮助我们了解常见卡点。屏蔽统计可能导致无法送达;具体问题请通过邮件反馈。

参考来源

  1. Sonoscli — ClawHubPeter Steinberger
  2. OpenClaw bundled sonoscli SKILL.mdOpenClaw
  3. OpenClaw Skills CLIOpenClaw
  4. sonoscli — READMEPeter Steinberger
  5. Discovery — sonoscliPeter Steinberger
  6. sonos status — sonoscliPeter Steinberger
  7. sonoscli v0.3.4 — status implementationPeter Steinberger
  8. sonoscli v0.3.4 — volume implementationPeter Steinberger
  9. sonoscli v0.3.4 — target resolutionPeter Steinberger
  10. sonoscli v0.3.4 — discovery outputPeter Steinberger
发现过期或有误的信息?告诉我们