|
| 1 | +--- |
| 2 | +title: 小米音箱对接 |
| 3 | +docId: zh-3.7 |
| 4 | +version: v0.1 |
| 5 | +status: draft |
| 6 | +order: 370 |
| 7 | +outline: deep |
| 8 | +--- |
| 9 | + |
| 10 | +# 小米音箱对接 |
| 11 | + |
| 12 | +如果你想把刷好 `open-xiaoai` Client 的小米音箱接进 FamilyClaw,别绕弯路,按这个顺序做就行: |
| 13 | + |
| 14 | +1. 先刷机 |
| 15 | +2. 再让音箱客户端连到 FamilyClaw 机器的 `4399` 端口 |
| 16 | +3. 最后在项目里创建设备集成、同步设备,并设置响应词 |
| 17 | + |
| 18 | +## 使用前先确认 |
| 19 | + |
| 20 | +- FamilyClaw 已经正常运行,而且小米音箱能通过局域网访问部署这套项目的机器。 |
| 21 | +- 你部署 FamilyClaw 的机器已经对局域网开放 `4399` 端口。 |
| 22 | +- 你能登录 FamilyClaw,并且当前账号有家庭管理权限。 |
| 23 | +- 你的小米音箱已经刷入可运行 `open-xiaoai` Client 的系统。 |
| 24 | + |
| 25 | +## 第一部分:小米音箱刷机 |
| 26 | + |
| 27 | +刷机步骤不要在这里重写一遍,直接按 `open-xiaoai` 官方刷机文档操作: |
| 28 | + |
| 29 | +- 刷机文档: |
| 30 | + [open-xiaoai 官方刷机文档](https://github.com/idootop/open-xiaoai/blob/main/docs/flash.md) |
| 31 | + |
| 32 | +先看清两个前提: |
| 33 | + |
| 34 | +- 这份刷机文档当前只适用于 `小爱音箱 Pro(LX06)` 和 `Xiaomi 智能音箱 Pro(OH2P)`。 |
| 35 | +- 数据线必须能传数据,不能只是充电线。 |
| 36 | + |
| 37 | +刷机完成后,官方文档里还给了 SSH 登录方式。你能正常 SSH 进音箱,再继续下一步;连 SSH 都进不去,后面的客户端启动都是空谈。 |
| 38 | + |
| 39 | +## 第二部分:启动小米音箱客户端 |
| 40 | + |
| 41 | +客户端部分参考 `open-xiaoai` 的 Rust Client 文档,但这里要把 `SERVER` 地址改成你这套项目所在机器的局域网 IP,并固定使用 `4399` 端口。 |
| 42 | + |
| 43 | +- 客户端文档: |
| 44 | + [open-xiaoai Client 文档](https://github.com/idootop/open-xiaoai/blob/main/packages/client-rust/README.md) |
| 45 | + |
| 46 | +### 1. SSH 登录到音箱 |
| 47 | + |
| 48 | +```bash |
| 49 | +ssh -o HostKeyAlgorithms=+ssh-rsa root@你的小米音箱IP |
| 50 | +``` |
| 51 | + |
| 52 | +### 2. 创建客户端目录 |
| 53 | + |
| 54 | +```bash |
| 55 | +mkdir -p /data/open-xiaoai |
| 56 | +``` |
| 57 | + |
| 58 | +### 3. 写入 FamilyClaw 的服务端地址 |
| 59 | + |
| 60 | +把下面的 IP 替换成你部署 FamilyClaw 那台机器的实际局域网 IP: |
| 61 | + |
| 62 | +```bash |
| 63 | +echo 'ws://192.168.31.100:4399' > /data/open-xiaoai/server.txt |
| 64 | +``` |
| 65 | + |
| 66 | +这里别写错。这个地址不是音箱自己的 IP,也不是浏览器访问网页时随手复制出来的地址,而是 FamilyClaw 所在机器对音箱可达的地址。 |
| 67 | + |
| 68 | +如果你是 Docker、NAS 或其他容器化部署,还要额外确认: |
| 69 | + |
| 70 | +- 宿主机已经把 `4399` 端口映射出来。 |
| 71 | +- 防火墙 / 路由器没有把局域网访问拦掉。 |
| 72 | + |
| 73 | +### 4. 启动客户端 |
| 74 | + |
| 75 | +最省事的方式是直接按官方文档拉起启动脚本: |
| 76 | + |
| 77 | +```bash |
| 78 | +curl -sSfL https://gitee.com/idootop/artifacts/releases/download/open-xiaoai-client/init.sh | sh |
| 79 | +``` |
| 80 | + |
| 81 | +如果你需要手动运行二进制,也要让它连到同一个地址: |
| 82 | + |
| 83 | +```bash |
| 84 | +/data/open-xiaoai/client ws://192.168.31.100:4399 |
| 85 | +``` |
| 86 | + |
| 87 | +### 5. 需要开机自启动时 |
| 88 | + |
| 89 | +官方文档里也给了开机启动脚本,按它的方式配置就行。做完后重启音箱,再回到 FamilyClaw 里看是否已经发现到网关。 |
| 90 | + |
| 91 | +## 第三部分:在 FamilyClaw 中添加音箱并设置响应词 |
| 92 | + |
| 93 | +### 第一步:先创建“小爱音箱网关”实例 |
| 94 | + |
| 95 | +打开: |
| 96 | + |
| 97 | +`设置 -> 设备与集成` |
| 98 | + |
| 99 | +然后按这个顺序操作: |
| 100 | + |
| 101 | +1. 点击 `通过实例添加设备` |
| 102 | +2. 在插件列表里选择 `小爱音箱网关` |
| 103 | +3. 填写实例名称,比如 `客厅小爱网关` |
| 104 | +4. 选择系统已经发现到的网关 |
| 105 | +5. 点击 `创建实例` |
| 106 | + |
| 107 | +这里有两个关键点: |
| 108 | + |
| 109 | +- 如果系统只发现了 `1` 个可用网关,界面通常会自动绑定它。 |
| 110 | +- 如果“已发现网关”还是空的,说明音箱客户端还没真正连上 FamilyClaw,先回去检查 IP、`4399` 端口和局域网连通性。 |
| 111 | + |
| 112 | +### 第二步:把发现到的音箱同步进家庭 |
| 113 | + |
| 114 | +实例创建好以后,仍然在 `设置 -> 设备与集成` 页面操作: |
| 115 | + |
| 116 | +1. 选中刚创建的 `小爱音箱网关` 实例 |
| 117 | +2. 点击 `同步全部设备` |
| 118 | +3. 或者点击 `仅同步选中的设备`,只导入你想要的那几台 |
| 119 | + |
| 120 | +同步完成后,这台音箱才算正式进入当前家庭,不再是“发现到了但还没纳管”的半成品状态。 |
| 121 | + |
| 122 | +### 第三步:到设备详情里设置响应词 |
| 123 | + |
| 124 | +现在不要继续停留在“设备与集成”页。这个页面主要负责接入和同步,不负责设备级管理。 |
| 125 | + |
| 126 | +请改去这里: |
| 127 | + |
| 128 | +`家庭 -> 设备` |
| 129 | + |
| 130 | +找到刚刚导入的小米音箱,打开设备详情,然后进入 `语音接管` 页签。 |
| 131 | + |
| 132 | +这里有两个配置: |
| 133 | + |
| 134 | +- `接管全部语音指令` |
| 135 | + 开启后,这台音箱上的所有语音请求都会直接交给 FamilyClaw,前缀就不再参与判断。 |
| 136 | +- `响应前缀` |
| 137 | + 关闭全量接管时,只有以这些前缀开头的话才会进入 FamilyClaw。 |
| 138 | + |
| 139 | +`响应前缀` 就是这篇文档里说的“响应词”。现在系统里的正式字段名叫“响应前缀”,别被两个叫法绕晕。 |
| 140 | + |
| 141 | +### 响应词怎么填 |
| 142 | + |
| 143 | +你可以按自己的习惯填写,比如: |
| 144 | + |
| 145 | +```text |
| 146 | +请,帮我,小管家 |
| 147 | +``` |
| 148 | + |
| 149 | +填写规则很简单: |
| 150 | + |
| 151 | +- 用逗号分隔。 |
| 152 | +- 至少保留一个前缀,别把自己配成谁说什么都进来。 |
| 153 | +- 如果已经打开 `接管全部语音指令`,这些前缀就不会再生效。 |
| 154 | + |
| 155 | +## 常见排查 |
| 156 | + |
| 157 | +### 设备与集成里看不到已发现网关 |
| 158 | + |
| 159 | +先查这几件事: |
| 160 | + |
| 161 | +- `server.txt` 里写的是不是 FamilyClaw 机器的局域网 IP: `4399` |
| 162 | +- 音箱和 FamilyClaw 是不是在同一个局域网 |
| 163 | +- `4399` 端口是不是已经对局域网开放 |
| 164 | +- 客户端是不是已经真正跑起来了 |
| 165 | + |
| 166 | +### 已经创建实例,但同步不到设备 |
| 167 | + |
| 168 | +通常是这两类问题: |
| 169 | + |
| 170 | +- 你绑定错了网关,实例接的不是当前这台音箱所在的网关 |
| 171 | +- 音箱客户端虽然启动了,但没有持续连到 FamilyClaw |
| 172 | + |
| 173 | +### 响应词不生效 |
| 174 | + |
| 175 | +先别怀疑玄学,先检查配置本身: |
| 176 | + |
| 177 | +- `接管全部语音指令` 是不是已经打开了。打开时,前缀规则天然失效。 |
| 178 | +- `响应前缀` 有没有写成空行、重复值或只带空格。 |
| 179 | +- 你实际说的话是不是确实以这些前缀开头。 |
| 180 | + |
| 181 | +## 相关文档 |
| 182 | + |
| 183 | +- [设置](../使用指南/设置.md) |
| 184 | +- [家庭](../使用指南/家庭.md) |
| 185 | +- [open-xiaoai 官方刷机文档](https://github.com/idootop/open-xiaoai/blob/main/docs/flash.md) |
| 186 | +- [open-xiaoai Client 文档](https://github.com/idootop/open-xiaoai/blob/main/packages/client-rust/README.md) |
0 commit comments