# device-dashboard **Repository Path**: genvex/device-dashboard ## Basic Information - **Project Name**: device-dashboard - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-09 - **Last Updated**: 2026-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Device Dashboard 基于 MagicMirror² 架构思想开发的轻量级设备监控看板,专为 ARM64 开发板(Jetson / Radxa)设计。 ## 特性 - **模块化架构** — 继承 MagicMirror 的通知分发与生命周期管理模式 - **实时数据推送** — Socket.IO 双向通信,秒级刷新 - **多设备支持** — 本地采集 + 远程 JSON 数据源 - **ARM64 友好** — 无 Electron,纯 Node.js + Express,低内存占用 - **9 区布局** — 经典 MagicMirror 位置系统(top/bottom, left/center/right) ## 技术栈 | 组件 | 版本 | 用途 | |------|------|------| | Node.js | ≥ 18 | 运行环境 | | Express | 5.x | HTTP 服务 | | Socket.IO | 4.x | 实时通信 | | systeminformation | latest | 硬件信息采集 | | croner | latest | 定时任务调度 | | Nunjucks | 3.x | 模板引擎(预留) | ## 快速开始 ### 1. 安装依赖 ```bash cd device-dashboard npm install ``` ### 2. 启动服务 ```bash PORT=3150 npm start ``` 默认监听 `http://localhost:3150`。 ### 3. 验证 浏览器访问 `http://localhost:3150`,应显示: - 顶部时钟模块 - 中央设备卡片网格 - 右侧系统详情面板 ## 项目结构 ``` device-dashboard/ ├── index.html # 前端入口(9 区布局容器) ├── package.json # 项目配置 ├── .gitignore ├── README.md # 本文件 ├── server/ │ └── app.js # Express + Socket.IO + cron 采集 ├── css/ │ └── main.css # 暗色主题 + 进度条样式 ├── js/ │ ├── socket-client.js # Socket.IO 客户端封装 │ ├── module-base.js # 模块基类(所有插件继承) │ ├── renderer.js # 渲染引擎(DOM 挂载/通知分发) │ ├── main.js # 前端初始化 + 模块注册 │ └── modules/ │ ├── clock.js # 时钟模块 │ ├── device-monitor.js # 设备卡片网格 │ └── system-info.js # 本机详情面板 ├── templates/ │ └── index.njk # Nunjucks 模板占位 └── demo-collect.js # 独立采集演示脚本 ``` ## 架构图 ### 数据流 ``` [systeminformation] → [server/app.js] → [Socket.IO] → [Browser] ↑ ↓ ↑ 定时轮询 (cron) 本地采集/远程 JSON 实时渲染更新 ``` ### 布局系统 ``` ┌─────────────────────────────────────────────────────┐ │ top-center │ ├──────────┬────────────────────┬─────────────────────┤ │ │ │ │ │ left │ center │ right │ │ │ │ │ ├──────────┴────────────────────┴─────────────────────┤ │ bottom-center │ └─────────────────────────────────────────────────────┘ ``` ### 模块生命周期 ``` init() → start() → getDom() → notificationReceived() ↑ socketNotificationReceived() ``` ## 配置说明 ### 环境变量 | 变量 | 默认值 | 说明 | |------|--------|------| | `PORT` | `3150` | 服务端口 | | `REMOTE_COLLECT_PATH` | `/srv/samba/share/github-scan/.agent-audit/` | 远程设备数据目录 | | `COLLECT_INTERVAL` | `*/10 * * * *` | cron 采集频率 | ### 远程设备数据 远程设备通过 JSON 文件提供数据,路径由 `REMOTE_COLLECT_PATH` 指定。每个设备一个 `.json` 文件,文件名即设备 ID。 **数据格式:** ```json { "hostname": "radxa-cubie-a7s", "cpuPercent": "4.0", "cpuTemp": "0.0", "memUsedMB": 7659, "memTotalMB": 7931, "diskUsedGB": 48, "diskTotalGB": 57, "uptime": 130598 } ``` ## 开发指南 ### 创建新模块 1. 在 `js/modules/` 下新建文件(如 `my-module.js`) 2. 继承 `Module` 基类,实现标准钩子: ```javascript class MyModule extends Module { constructor() { super('my-module'); this.config = { /* 模块配置 */ }; } start() { // 模块启动逻辑 } getDom() { const wrapper = document.createElement('div'); wrapper.innerHTML = '