Files

94 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

2026-05-14 16:21:53 +08:00
# 大屏媒体轮播系统 (DPM)
2026-05-12 22:38:52 +08:00
> 📍 工作区位置:`code/dpm/`(独立仓库)。系统/运维文档见 `design/dpm/`;权威后端说明见 `backend/README.md`;整体目录规范见根 `CLAUDE.md`。
2026-05-12 22:38:52 +08:00
**Digital Playback Media** — 园区大屏展播控制系统,服务昆明市大学生创业园:数据大屏、数字孪生 3D、AI 助手、语音助手、媒体轮播、企业展示墙,浏览器后台可远程控制。
2026-05-12 22:38:52 +08:00
## 架构总览
2026-05-14 16:21:53 +08:00
```
┌──────────────┐ REST(全部数据/媒体/设置) ┌────────────────┐
│ Tauri 大屏 │ ◄────────────────────────── │ FastAPI :10085 │
│ (React 前端) │ └───────┬────────┘
│ │ MQTT 订阅 opc/display/command │ MQTT 发布
│ 账号: dpm │ ◄────────────────────────────────────│ 账号: dpmserver
└──────┬───────┘ MQTT Broker (EMQX) │
│ 192.168.1.3:1883 │
└───────────────────────────────────────────────┘
```
2026-05-14 16:21:53 +08:00
- **数据 / 媒体 / 设置** → REST APIFastAPIJSON 文件持久化)
- **页面与媒体控制** → MQTTEMQX broker),按 `clientId` 定向下发;SSE `/api/events` 作回退
- **桌面壳** → Tauri 2(Rust),仅负责窗口生命周期与 3 个命令(读运行配置、双屏、安装更新)
- **管理后台** → FastAPI + Jinja 渲染的 `/admin` 页面(非 React 路由)
2026-05-14 16:21:53 +08:00
> **权威说明以 `backend/README.md` 为准**,含全部接口、MQTT 主题、环境变量与 Docker 部署。
2026-05-14 16:21:53 +08:00
## 目录
| 路径 | 说明 |
2026-05-14 16:21:53 +08:00
|------|------|
| `backend/` | **后端**FastAPIuv 管理),`:10085``app/` 内含全部 REST、MQTT、模拟引擎、AI/语音/RAG、手势识别。 |
| `src/` | **前端**React 19 + Vite + Tailwind + three.js + MQTT + Tauri API。路由 `/`(数据)、`/twin`(孪生)、`/ai``/screen`(媒体)、`/voice``/wall`。 |
| `src-tauri/` | Tauri 2 桌面壳(Rust)。 |
| `docs/` | 部署 / 更新 / 语音 / MQTT 手册 / ESP32。 |
| `public/` | 静态资源。 |
| `数据资料/` | 园区本地数据资料(不入库)。 |
2026-05-14 16:21:53 +08:00
## 快速开始
### 前端(vite
2026-05-14 16:21:53 +08:00
```bash
yarn dev # Vite 开发服务器 :1420
yarn build # 构建 dist/
2026-05-14 16:21:53 +08:00
```
### 后端(uv
2026-05-14 16:21:53 +08:00
```bash
cd backend
uv sync
cp .env.example .env # 按需填 DashScope Key、MQTT 账号
uv run python main.py # 监听 0.0.0.0:10085
2026-05-14 16:21:53 +08:00
```
### Docker 部署(后端 + EMQX,推荐)
2026-05-14 16:21:53 +08:00
```bash
export MQTT_PUBLIC_HOST=192.168.1.50 # 展播端可访问的服务器局域网 IP
export DASHSCOPE_API_KEY=sk-xxx # 未配置时 AI 走本地规则引擎
docker compose up -d --build
curl http://<服务器IP>:10085/api/health
2026-05-14 16:21:53 +08:00
```
端口:`10085`API/后台/媒体)、`8765`s2s 语音)、`1883/8083/18083`EMQX)。数据卷 `dpm_media` / `dpm_knowledge` / `dpm_data`
2026-05-14 16:21:53 +08:00
## 关键约定
2026-05-14 16:21:53 +08:00
- **进程管理**:见 `AGENTS.md` —— AI 禁止启动/重启/停止任何服务(后端 :10085 / s2s :8765 / vite :1420 / Tauri)。
- **凭据**`backend/.env` 与根 `.env.local``VITE_*` 前缀)含阿里云密钥与 MQTT 凭据,不入库。
- **前端连接配置**`.env.local``VITE_API_BASE` / `VITE_MQTT_URL` / `VITE_MQTT_USERNAME` / `VITE_MQTT_PASSWORD`;运行时优先级:exe 旁 `config.json` > 后端 `/api/config` > 内置默认 IP。
2026-05-14 16:21:53 +08:00
## 项目结构(源码)
2026-05-14 16:21:53 +08:00
```
dpm/
├── package.json / vite.config.js
├── src/ # 前端(React 19
│ ├── main.jsx # 入口:读 Tauri 运行配置 + /api/config
│ ├── App.jsx # 路由(/ /twin /ai /screen /voice /wall
│ ├── pages/ # 六大屏页面
│ ├── components/ # Building3D、AiChatPanel、GlobalVision 等
│ ├── voice/ # 实时语音栈(s2s-ws-client、worklets
│ └── utils/ # mqtt、useMqttControl、updateCheck、statusBus
├── backend/
│ ├── main.py # 启动入口(prepare_env → uvicorn
│ └── app/ # config/routers/mqtt/sim_engine/storage/llm/...
└── src-tauri/ # Tauri 2Rust
```
2026-05-14 16:21:53 +08:00
## 许可
昆明市大学生创业园公益定制开发,*云南派音人工智能科技提供技术支持*。