refactor: 每个插件独立文件夹,添加使用教程
- dglab_ws/ 插件代码 + README.md 使用教程 - 根目录 README.md 更新为仓库总览与开发指南
This commit is contained in:
1 parent
4065b98851
commit
742b9e4b41
3 files changed
+199
-16
No files matched your search
@@ -4,45 +4,65 @@
|
|||||||
|
|
||||||
## 插件列表
|
## 插件列表
|
||||||
|
|
||||||
| 插件 | 说明 |
|
| 插件 | 说明 | 依赖 |
|
||||||
|------|------|
|
|------|------|------|
|
||||||
| [dglab_ws](./dglab_ws.py) | DG-Lab 郊狼 3.0 WebSocket 控制插件 |
|
| [dglab_ws](./dglab_ws/) | DG-Lab 郊狼 3.0 WebSocket 控制 | websocket-client, qrcode(可选) |
|
||||||
|
|
||||||
## 安装方式
|
## 安装方式
|
||||||
|
|
||||||
将插件 `.py` 文件复制到 xiaoli-cli 项目的 `plugins/` 目录下,然后在 `plugins_config.py` 中启用:
|
1. 将插件文件夹中的 `.py` 文件复制到 xiaoli-cli 的 `plugins/` 目录
|
||||||
|
2. 在 `plugins_config.py` 中启用对应插件
|
||||||
|
|
||||||
```python
|
```bash
|
||||||
ENABLE_DGLAB_WS = True # 启用 DG-Lab 插件
|
# 示例:安装 dglab_ws 插件
|
||||||
|
cp dglab_ws/dglab_ws.py /path/to/xiaoli-cli/plugins/
|
||||||
```
|
```
|
||||||
|
|
||||||
## 插件开发
|
```python
|
||||||
|
# plugins_config.py
|
||||||
|
ENABLE_DGLAB_WS = True
|
||||||
|
```
|
||||||
|
|
||||||
每个插件是一个独立的 `.py` 文件,需包含 `Liugin` 类(兼容 `Plugin` 类名):
|
## 插件目录结构
|
||||||
|
|
||||||
|
每个插件一个文件夹,包含:
|
||||||
|
|
||||||
|
```
|
||||||
|
插件名/
|
||||||
|
├── 插件名.py # 插件代码
|
||||||
|
└── README.md # 使用教程
|
||||||
|
```
|
||||||
|
|
||||||
|
## 开发插件
|
||||||
|
|
||||||
|
插件是一个独立 `.py` 文件,需包含 `Liugin` 类(兼容 `Plugin`):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class Liugin:
|
class Liugin:
|
||||||
def get_tool_info(self):
|
def get_tool_info(self):
|
||||||
|
"""返回插件元信息"""
|
||||||
return {
|
return {
|
||||||
"name": "插件名",
|
"name": "插件名",
|
||||||
"description": "插件描述",
|
"description": "一句话描述",
|
||||||
"keywords": ["关键词1", "关键词2"],
|
"keywords": ["关键词"],
|
||||||
"usage": "使用说明"
|
"usage": "使用说明"
|
||||||
}
|
}
|
||||||
|
|
||||||
def handle(self, args):
|
def handle(self, args):
|
||||||
return "处理结果"
|
"""处理命令,返回结果字符串"""
|
||||||
|
return "结果"
|
||||||
|
|
||||||
# 可选:注册CLI命令
|
|
||||||
def set_cli(self, cli):
|
def set_cli(self, cli):
|
||||||
self.cli = cli
|
"""可选:注册CLI斜杠命令"""
|
||||||
|
pass
|
||||||
|
|
||||||
# 可选:MCP支持
|
|
||||||
def get_mcp_definition(self):
|
def get_mcp_definition(self):
|
||||||
return {...}
|
"""可选:MCP工具定义"""
|
||||||
|
return {}
|
||||||
|
|
||||||
def convert_mcp_args(self, arguments):
|
def convert_mcp_args(self, arguments):
|
||||||
return "转换后的参数"
|
"""可选:MCP参数转CLI参数"""
|
||||||
|
return ""
|
||||||
```
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|||||||
@@ -0,0 +1,163 @@
|
|||||||
|
# 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 <ws_url>` | 连接 WebSocket 服务器 |
|
||||||
|
| `/dglab qr` | 生成配对二维码 |
|
||||||
|
| `/dglab status` | 查看状态 |
|
||||||
|
| `/dglab strength <a/b> <+/−/=> <值>` | 控制强度 |
|
||||||
|
| `/dglab pulse <a/b> <频率> <强度> [秒数]` | 发送波形 |
|
||||||
|
| `/dglab wave <a/b> <HEX数据>` | 发送原始波形 |
|
||||||
|
| `/dglab clear <a/b/both>` | 清空波形队列 |
|
||||||
|
| `/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)。
|
||||||
|
|
||||||
|
## 参考资料
|
||||||
|
|
||||||
|
- [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)
|
||||||
File renamed without changes.
Reference in new issue
Block a user