Files

94 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 大屏媒体轮播系统 (DPM)
> 📍 工作区位置:`code/dpm/`(独立仓库)。系统/运维文档见 `design/dpm/`;权威后端说明见 `backend/README.md`;整体目录规范见根 `CLAUDE.md`。
**Digital Playback Media** — 园区大屏展播控制系统,服务昆明市大学生创业园:数据大屏、数字孪生 3D、AI 助手、语音助手、媒体轮播、企业展示墙,浏览器后台可远程控制。
## 架构总览
```
┌──────────────┐ REST(全部数据/媒体/设置) ┌────────────────┐
│ Tauri 大屏 │ ◄────────────────────────── │ FastAPI :10085 │
│ (React 前端) │ └───────┬────────┘
│ │ MQTT 订阅 opc/display/command │ MQTT 发布
│ 账号: dpm │ ◄────────────────────────────────────│ 账号: dpmserver
└──────┬───────┘ MQTT Broker (EMQX) │
│ 192.168.1.3:1883 │
└───────────────────────────────────────────────┘
```
- **数据 / 媒体 / 设置** → REST APIFastAPIJSON 文件持久化)
- **页面与媒体控制** → MQTTEMQX broker),按 `clientId` 定向下发;SSE `/api/events` 作回退
- **桌面壳** → Tauri 2(Rust),仅负责窗口生命周期与 3 个命令(读运行配置、双屏、安装更新)
- **管理后台** → FastAPI + Jinja 渲染的 `/admin` 页面(非 React 路由)
> **权威说明以 `backend/README.md` 为准**,含全部接口、MQTT 主题、环境变量与 Docker 部署。
## 目录
| 路径 | 说明 |
|------|------|
| `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/` | 静态资源。 |
| `数据资料/` | 园区本地数据资料(不入库)。 |
## 快速开始
### 前端(vite
```bash
yarn dev # Vite 开发服务器 :1420
yarn build # 构建 dist/
```
### 后端(uv
```bash
cd backend
uv sync
cp .env.example .env # 按需填 DashScope Key、MQTT 账号
uv run python main.py # 监听 0.0.0.0:10085
```
### Docker 部署(后端 + EMQX,推荐)
```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
```
端口:`10085`API/后台/媒体)、`8765`s2s 语音)、`1883/8083/18083`EMQX)。数据卷 `dpm_media` / `dpm_knowledge` / `dpm_data`
## 关键约定
- **进程管理**:见 `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。
## 项目结构(源码)
```
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
```
## 许可
昆明市大学生创业园公益定制开发,*云南派音人工智能科技提供技术支持*。