FMO 副屏伴侣 — 单 HTML 零依赖、四象限面板、三主题 Web 控制面板。
基于 fmo-show(作者 @EthanYan6)和 FmoDeck(作者 @wh0am1i)的二次开发作品。
- 目标场景:FMO 设备的副屏/第二显示器,用于实时监控 QSO 状态
- 技术特点:单 HTML 文件、零外部依赖、直接双击可用
- 协议参考:FW 接口文档参见 bg5esn.com/docs
┌──────────────┬──────────────┐
│ 左上: │ 右上: │
│ 设备信息 │ 服务器列表 │
│ (info-hero) │ (station) │
├──────────────┼──────────────┤
│ 左下: │ 右下: │
│ Speaking │ QSO 统计 │
│ Bar │ + 迷你频谱 │
└──────────────┴──────────────┘
| 连接 | 端点 | 协议 | 用途 |
|---|---|---|---|
/ws |
JSON-RPC | FmoDeck 串行队列 | 设备信息 / 服务器列表 / QSO 查询 |
/events |
Event Stream | 推送 | 讲话事件 / QSO 实时更新 |
/audio |
PCM 8kHz | 二进制流 | 对讲音频播放 + VU 电平 |
- Dark(默认):战术 HUD 风格,深色背景 + 亮色数字
- Light:浅色背景,适用日常浏览
- E-ink:高对比度黑白,适应墨水屏副屏
- 设备信息面板:呼号大号居中、天线 / 固件版本 / 坐标 / 高度 / 网格
- 服务器列表:翻页全量加载、点击切换、当前服务器高亮
- Speaking Bar:实时讲话者呼号 + 网格 / 距离 / 方位 / 高度 + HOST/新朋友徽章 + 通联统计
- QSO 统计:Top N 统计卡片、删除按钮
- 音频收听:VU 电平 + 迷你频谱(24 柱语音频段加权)+ 静音按钮
- 移动端适配:响应式布局、呼号 / 频谱 / 信息栏自动缩放
- 确保电脑与 FMO 设备在同一局域网
- 双击
index.html打开页面 - 输入 FMO 设备 IP 和端口(默认 80),点击连接
- 连接成功后自动加载设备信息、服务器列表和 QSO 数据
fmo-secondary/
├── index.html # 主页面(四象限布局 + 状态条)
├── app.js # 核心逻辑(WebSocket / 串行队列 / UI 渲染)
├── style.css # 样式(三主题 + 响应式)
└── README.md
FmoDeck 是基于 fmo-show(作者 @EthanYan6)、FmoDeck(作者 @wh0am1i)的二次开发作品。原项目完整搭建了与 FMO 设备交互的协议实现、日志同步、APRS 相关能力等核心业务逻辑。本仓库在其基础上做界面与交互层的重写,但所有"能用起来"的根基都来自 fmo-show。特此鸣谢 ✨
修复
- 服务器列表:修复 RESPONSE_ALIASES 匹配固件 subType、fallback 匹配按 type 兜底、
resp.code增加undefined检查 - Speaking Bar:
_deriveStationInfo按时间戳取最新 QSO、距离/方位字段名兼容dist/az/bearing
优化
- 加载速度:
fetchAllData三组数据并发入队、分页每页 20 条与 FmoDeck 一致
历史日志
新增
- 四象限面板布局(设备信息 / 服务器列表 / Speaking Bar / QSO 统计)
- 三路 WebSocket(
/ws/events/audio) - 三主题(dark / light / e-ink)
- 串行队列请求-响应匹配(FmoDeck 同款协议)
- 设备信息面板 info-hero + info-card
- 服务器列表翻页全量加载
- Speaking Bar 实时讲话者 + 徽章系统 + 通联统计
- 迷你频谱 24 柱语音频段加权
- VU 电平 + 静音按钮
- 移动端响应式布局
参照项目
- FmoDeck:协议参考(串行队列 / RESPONSE_ALIASES /
qso/callsign事件) - fmo-show:界面灵感
- bg5esn.com:固件接口文档