# DG-Lab 郊狼 WebSocket 控制插件 > 基于 [DG-LAB-OPENSOURCE](https://github.com/DG-LAB-OPENSOURCE/DG-LAB-OPENSOURCE) 官方 Socket V2 协议 > 支持郊狼 3.0 脉冲主机的远程强度控制与波形发送 ## 前置准备 ### 1. 安装依赖 ```bash pip install websocket-client # 必须 pip install qrcode # 可选,终端显示ASCII二维码 ``` ### 2. 安装插件 将 `dglab_ws.py` 复制到 xiaoli-cli 项目的 `plugins/` 目录下: ```bash cp dglab_ws.py /path/to/xiaoli-cli/plugins/ ``` 在 `plugins_config.py` 中添加: ```python ENABLE_DGLAB_WS = True ``` ### 3. 启动 WebSocket 服务端 你需要一个 DG-LAB Socket V2 后端服务。官方参考实现位于 [socket/v2/backend](https://github.com/DG-LAB-OPENSOURCE/DG-LAB-OPENSOURCE/tree/main/socket/v2/backend): ```bash cd socket/v2/backend npm install npm start ``` 默认监听 `ws://0.0.0.0:9999`。 ## 使用教程 ### 连接与配对 ``` # 第一步:连接到 WebSocket 服务端 /dglab connect ws://192.168.1.100:9999 # 第二步:生成二维码,用 DG-LAB APP 扫码 /dglab qr # 查看连接状态 /dglab status ``` **配对流程:** 1. 本插件连接 WebSocket 服务端,获得 `clientId` 2. 生成二维码(含 `clientId`) 3. DG-LAB APP 扫码连接服务端,获得 `targetId` 4. 服务端自动完成绑定,双方即可通信 > 💡 APP 端操作:打开 DG-LAB APP → SOCKET 功能 → 扫描二维码 ### 强度控制 控制 A/B 两个通道的脉冲强度(范围 0-200): ``` # 通道A 增加 10 /dglab strength a + 10 # 通道B 减少 5 /dglab strength b - 5 # 通道A 设为 50 /dglab strength a = 50 ``` | 操作符 | 说明 | 示例 | |--------|------|------| | `+` | 增加 | `strength a + 10` | | `-` | 减少 | `strength b - 5` | | `=` | 设为指定值 | `strength a = 50` | ### 波形发送 发送参数化波形脉冲: ``` # 通道A: 频率30, 强度50, 持续5秒 /dglab pulse a 30 50 5 # 通道B: 频率100, 强度80, 持续10秒 /dglab pulse b 100 80 10 ``` **参数说明:** | 参数 | 范围 | 说明 | |------|------|------| | 频率 | 10-1000 | 脉冲频率,内部自动映射到 10-240 | | 强度 | 0-100 | 波形强度 | | 持续时间 | 1-60 | 秒数,默认5秒 | ### 原始波形数据 如果你有现成的波形 HEX 数据,可以直接发送: ``` # 每条波形 = 8字节 = 16个HEX字符 # 格式: 频率x4 + 强度x4 /dglab wave a 0A0A0A0A64646464 ``` ### 清空波形队列 ``` /dglab clear a # 清空通道A /dglab clear b # 清空通道B /dglab clear both # 清空双通道 ``` ### 断开连接 ``` /dglab disconnect ``` ## 命令速查 | 命令 | 说明 | |------|------| | `/dglab connect ` | 连接 WebSocket 服务器 | | `/dglab qr` | 生成配对二维码 | | `/dglab status` | 查看状态 | | `/dglab strength <+/−/=> <值>` | 控制强度 | | `/dglab pulse <频率> <强度> [秒数]` | 发送波形 | | `/dglab wave ` | 发送原始波形 | | `/dglab clear ` | 清空波形队列 | | `/dglab disconnect` | 断开连接 | | `/dglab help` | 显示帮助 | ## 常见问题 **Q: 连接超时怎么办?** A: 检查 WebSocket 服务端是否启动,防火墙是否放行端口,地址格式是否为 `ws://ip:port`。 **Q: 配对失败 (400)?** A: 该 clientId 已被其他 APP 绑定。断开重连会生成新的 clientId。 **Q: 强度设为软上限以上会怎样?** A: 实际强度不会超过软上限。比如软上限 100,设为 150 实际只会到 100。 **Q: 波形数据格式是什么?** A: 每条 8 字节 HEX,前 4 字节是频率,后 4 字节是强度。详见 [官方波形说明](https://github.com/DG-LAB-OPENSOURCE/DG-LAB-OPENSOURCE/blob/main/coyote/extra/README.md)。 ## 测试(无需真机) 本插件附带一个 **APP 模拟器**,可以模拟 DG-LAB APP 端行为,无需真实设备即可测试。 ### 测试步骤 ``` 终端1: 启动 WebSocket 服务端 cd socket/v2/backend && npm start 终端2: 启动 APP 模拟器 python dglab_app_simulator.py ws://127.0.0.1:9999 终端3: 在 xiaoli-cli 中测试 /dglab connect ws://127.0.0.1:9999 /dglab qr /dglab strength a + 10 /dglab pulse a 30 50 5 /dglab status ``` 模拟器会: - 模拟 APP 连接 WebSocket 服务端 - 自动接受配对请求 - 实时显示收到的强度/波形指令 - 回传强度状态(和真机行为一致) ## 参考资料 - [DG-LAB 官方开源仓库](https://github.com/DG-LAB-OPENSOURCE/DG-LAB-OPENSOURCE) - [Socket V2 协议文档](https://github.com/DG-LAB-OPENSOURCE/DG-LAB-OPENSOURCE/blob/main/socket/v2/README.md) - [V3 蓝牙协议](https://github.com/DG-LAB-OPENSOURCE/DG-LAB-OPENSOURCE/blob/main/coyote/v3/README_V3.md) - [PyDG-Lab-WS (Python库)](https://pypi.org/project/pydglab-ws/) - [XToys.app 集成](https://xtoys.app)