https://github.com/ljzd-pro/pydglab-ws
一个用于创建郊狼 3.0 DG-Lab App Socket 控制终端和服务端的 Python 库
https://github.com/ljzd-pro/pydglab-ws
dg-lab dg-lab-v3 lib library python python3 websocket
Last synced: 2 months ago
JSON representation
一个用于创建郊狼 3.0 DG-Lab App Socket 控制终端和服务端的 Python 库
- Host: GitHub
- URL: https://github.com/ljzd-pro/pydglab-ws
- Owner: Ljzd-PRO
- License: bsd-3-clause
- Created: 2024-05-13T10:34:56.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2024-10-30T14:50:45.000Z (7 months ago)
- Last Synced: 2025-03-24T18:52:26.913Z (3 months ago)
- Topics: dg-lab, dg-lab-v3, lib, library, python, python3, websocket
- Language: Python
- Homepage: https://pydglab-ws.readthedocs.io/
- Size: 1.3 MB
- Stars: 33
- Watchers: 1
- Forks: 2
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
PyDGLab-WS
一个用于创建郊狼 3.0 DG-Lab App Socket 控制终端和服务端的 Python 库## 💡 特性
- 通过该库可开发 Python 程序,接入 DG-Lab App
- 完全使用 asyncio 异步,并发执行各项操作
- 可部署第三方终端与 Socket 服务一体的服务端,降低部署复杂度和延迟
- 使用异步生成器、上下文管理器等,结合语言特性
- 通过 Pydantic, 枚举 管理消息结构和常量,便于开发### 🔧 DG-Lab App 的 Socket 被控功能支持的操作
- 获取 A, B 通道强度 以及 通道强度上限 的数据更新
- 对 A, B 通道强度进行操作,支持增加、减少、设定到指定值
- 向 App 发送持续一段时间的波形操作数据
- 清空 App 波形操作队列
- 获取 App 按下反馈按钮的通知## 🚀 快速开始
📖 更多用法和完整 API 请查看文档:https://pydglab-ws.readthedocs.io
> [!Note]
> 注意,您可能需要先大致了解一下第三方终端通过 WebSocket 连接控制 DG-Lab App 的基本流程和原理 \
> 官方文档:https://github.com/DG-LAB-OPENSOURCE/DG-LAB-OPENSOURCE/blob/main/socket/README.md### 🔨 安装
```bash
pip3 install pydglab-ws
```### 📡 搭建服务端
```python3
import asyncio
from pydglab_ws.server import DGLabWSServerasync def main():
async with DGLabWSServer("0.0.0.0", 5678, 60) as server:
while True:
print(f"已连接的 WebSocket 客户端(终端/App):{list(server.uuid_to_ws.keys())}")
print(f"已连接的本地终端:{list(server.local_client_ids)}")
print(f"关系绑定:{server.client_id_to_target_id}")
await asyncio.sleep(5)if __name__ == "__main__":
asyncio.run(main())
```更多演示请查看 [`examples/server.py`](examples/server.py)
### 🕹️ 搭建客户端 / 第三方终端
当进入 `DGLabWSServer` 的异步生成器时,从 WebSocket 服务端获取 `clientId` 的操作会 **自动完成**
```python3
import asyncio
from websockets import ConnectionClosedOK
from pydglab_ws import DGLabWSConnectdef print_qrcode(_: str):
"""输出二维码到终端界面"""
...async def main():
try:
async with DGLabWSConnect("ws://192.168.1.161:5678") as client:
# 获取二维码
url = client.get_qrcode()
print("请用 DG-Lab App 扫描二维码以连接")
print_qrcode(url)# 等待绑定
await client.bind()
print(f"已与 App {client.target_id} 成功绑定")# 从 App 接收数据更新,并进行远控操作
async for data in client.data_generator():
print(f"收取到数据:{data}")
except ConnectionClosedOK:
print("Socket 服务端断开连接")if __name__ == "__main__":
asyncio.run(main())
```更多演示请查看 [`examples/ws_client.py`](examples/ws_client.py)
### 🕹️ 搭建与第三方终端一体的 WebSocket 服务端
这段代码不仅提供 DG-Lab WebSocket 服务端服务,还生成了一个本地终端可供 App 连接。
> [!Tip]
> 不管是本地终端 `DGLabLocalClient` 还是 WebSocket 终端 `DGLabWSClient`,**包含的主要方法都相同** \
> 因此在该段代码中,终端相关的逻辑与上面的独立的 WebSocket 终端的实现基本相同。 \
> 这种方式,省去了终端连接 WebSocket 服务端的环节,终端与 WebSocket 服务端一体,**网络延迟更低,部署更方便**。```python3
import asyncio
from pydglab_ws import DGLabWSServerdef print_qrcode(_: str):
"""输出二维码到终端界面"""
...async def main():
async with DGLabWSServer("0.0.0.0", 5678, 60) as server:
client = server.new_local_client()url = client.get_qrcode("ws://192.168.1.161:5678")
print("请用 DG-Lab App 扫描二维码以连接")
print_qrcode(url)# 等待绑定
await client.bind()
print(f"已与 App {client.target_id} 成功绑定")# 从 App 接收数据更新,并进行远控操作
async for data in client.data_generator():
print(f"收取到数据:{data}")if __name__ == "__main__":
asyncio.run(main())```
更多演示请查看 [`examples/local_client_with_server.py`](examples/server_with_local_client.py)
## 📌 更多
如果您在开发过程中,发现要实现一些常用的功能时并不方便,或者您有什么建议能够使开发更简单快捷,欢迎在 Issues 中提出~
### 🔗 链接
- PyPI: 🔗[pydglab-ws](https://pypi.org/project/pydglab-ws/)
### 📐 代码覆盖率

### 许可证
PyDGLab-WS 使用 BSD 3-Clause 许可证.
Copyright © 2024 by Ljzd-PRO.