上周整理了一下小智 AI 的 WebSocket 通信协议,《复刻小智AI第2步,2张核心流程图学习一下它的WebSocket协议》,后面在调试时发现了一个缺失的点,就是漏掉注册设备这一步。
一开始还对配置文件中的 "OTA_VERSION_URL": "https://api.tenclass.net/xiaozhi/ota/",
字段比较费解,好像整个通信过程中也没有用到的地方,而且在 py-xiaozhi
中也不存在固件的概念。
另外因为跑示例的时候,用的 Client-Id
、Device-Id
都是从仓库中直接拿的,应该是已经在服务器已经注册过了,只需要额外添加设备即可,所以一直没发现这个问题。
后来在手动修改 Device-Id
的时候终于发现了,仔细研究了一下 xiaozhi-esp32
和 py-xiaozhi
,再自己操作了一下,总算搞明白了。
问题
如果在设备启动时,不经过设备注册过程,那么在开始对话之后,服务端会返回没找到设备版本信息的语音,而不是在后台添加设备。
2025-04-21 14:51:23,295 - WebSocketClient - INFO - 收到JSON消息: {"type":"tts","state":"sentence_start","text":"没有找到该设备的版本信息,请正确配置 OTA 地址,然后重新编译固件。","session_id":"14328015"}
这个时候,不管怎么对话,服务端都只会返回这一句。
在 py-xiaozhi
和 xiaozhi-esp32
项目中,都是会在启动阶段进行 OTA 固件版本检查,因此我们也需要在加载配置时,先进行 OTA 版本检查这一步,同时完成设备注册。
注册设备
注册设备也很简单,构建一个固件信息的 …
阅读全文 »
近期评论