数据看板

在线 0
离线 0
总数 0
消息/5min 0
运维告警 0
--

数据看板

窗口: --
设备总数
--
未激活 --
在线设备
--
在线率 --%
本月新激活
--
累计 --
用户总数
--
7天新增 +--
今日告警
--
未处理 --
今日产线 QC
--/--
本月通过率 --%

激活 / 用户注册 / 活跃设备 趋势

设备型号分布

工厂本月 QC

设备激活状态

用户增长(窗口内)

在线设备 (0)
离线设备 (0)
昵称 手机 设备数 最近登录 注册时间 openId
← 返回

--

--

缸体状态

调试控制台

MQTT 消息日志
发送指令
快捷预设
实时记录 BMS 与设备之间的 MQTT 消息往来。
上行 = 设备发给 BMS(心跳/上报);下行 = BMS 发给设备(指令/同步)。仅最近若干条。
指令日志
设备事件
通知记录
告警记录
📖 ACK 码说明
200 · 设备执行成功,配置已落 NVS
400 · 设备拒绝:参数错误(BMS 一般已预校验拦截,到这步说明漏校)
404 · 设备拒绝:未知指令或目标缸越界
500 · 设备执行失败:硬件故障 / NVS 写入失败
空 / 1 / 3 · 老固件(V5.0 前)遗留或 ACK 解析异常
超时 · 设备未在 6 秒内回 ACK(设备离线 / 网络抖动)
时间设备指令状态ACK码耗时来源
时间设备MAC事件详情
时间设备类型渠道是否成功详情
时间设备类型旧值新值详情
数据保留策略
CommandLog (指令日志)90 天 TTL 自动清理
DeviceEventLog (设备事件)365 天 TTL 自动清理
NotificationLog (通知记录)30 天 TTL 自动清理
AlertLog (告警记录)90 天 TTL 自动清理
Telemetry (遥测数据)30 天 TTL + 5min 降采样
AuditLog 业务类1 年 TTL(PIPL 合规)
AuditLog 高敏感类3 年 TTL(PIPL 合规)
速率限制
全局限流100 req/min/IP
设备指令限流20 cmd/min/device
离线检测冷却心跳超时后 30s 确认
安全配置
HTTP 安全头Helmet.js 全量启用
CORS白名单模式
小程序鉴权微信 JWT (HS256)
Dashboard 鉴权HttpOnly cookie session (8h)
工厂工具鉴权X-API-Key + 状态机门禁
/factory/* 路径通道 + 状态机双重保护(P0 2026-05-16)
错误信息生产环境脱敏处理
MQTT 通信
BrokerEMQX Cloud Serverless
传输协议MQTTS (TLS 8883)
心跳间隔30 秒
ACK 超时6 秒
小程序认证一次性 token(ADR-35)
设备认证EMQX Built-in DB 凭据
工厂凭据factory_ 短时凭据,10 分钟过期
数据库
引擎MongoDB
部署腾讯云
TTL 索引自动过期清理
唯一索引mac, device_name
服务器运维
进程管理PM2 守护进程
优雅关闭SIGTERM 信号处理
压缩Gzip (compression 中间件)
静态文件Express.static
设备型号D11 D12 D13 S11 S12(5 种正式投产单板)
输入框支持模糊搜索,下拉浮窗自动出建议
请选择设备查看原始数据
备份策略
每日 03:00 服务器 cron 自动 mongodump 全库,gzip 压缩 archive 存到 /home/ubuntu/bms-backups/。保留最近 14 天 本地副本。
下方列表也会出现 手动触发的备份(点"立刻备份一次"或部署前临时跑), 所以时间戳不止凌晨 3 点 — 这是正常的,非 03:00 的条目就是历史上手动跑过留下的。
--
备份时间 大小 文件名 操作
加载中...
📖 如何恢复某个备份(ssh 命令行)
原则:恢复是高危操作(drop 整个 DB 重建),不在 dashboard 一键执行, 只能通过 ssh 手工跑下面命令。BMS 进程在恢复前应该手动 pm2 stop,恢复完再 start。

步骤
# 1. ssh 上去
ssh ubuntu@118.195.205.82

# 2. 停 BMS(防恢复期间继续写入造成不一致)
pm2 stop vni-bms

# 3. 从 .env 拿密码
MONGO_URI=$(grep ^MONGODB_URI= /home/ubuntu/vni-bms-git/server/.env | cut -d= -f2-)
MONGO_PWD=$(echo "$MONGO_URI" | sed -E 's|^mongodb://[^:]+:([^@]+)@.*|\1|')

# 4. 恢复(替换 ARCHIVE 为实际文件名,含 --drop 会清空再恢复)
ARCHIVE=vnihouse_YYYYMMDD_HHMM.archive.gz  # ← 改成下面表格里点"复制"得到的具体文件名
cat /home/ubuntu/bms-backups/$ARCHIVE | sudo docker exec -i vni-mongo mongorestore \
  --username admin --password "$MONGO_PWD" --authenticationDatabase admin \
  --drop --gzip --archive

# 5. 启 BMS
pm2 start vni-bms

# 6. 验证
curl -sS http://127.0.0.1:3000/api/devices -H "X-API-Key: ..." | jq '.data.total'
恢复前提醒
  • 恢复期间 BMS API 不可用(5-10 分钟)
  • 恢复后所有租户数据会被覆盖到备份时点(包括 vbox 的数据)
  • 设备端会因 BMS 断线/重连产生短暂离线 → 在线状态会自然恢复
  • 建议先用上方"验证"按钮跑一次 dry-run 确保 archive 有效
运维告警配置
BMS 每分钟采样服务器指标(CPU / 内存 / 磁盘 / MQTT broker / 公网流量), 持续超阈达到设定时长后通过邮件推送给配置的收件人。
仅 Mona super_admin 可见此页

SMTP 发件配置(需 ssh 改 .env)

加载中...
如何配置 SMTP(ssh 命令)
ssh ubuntu@118.195.205.82
vim /home/ubuntu/vni-bms-git/server/.env
# 末尾加:
ALERT_SMTP_HOST=smtp.163.com
ALERT_SMTP_PORT=465
ALERT_SMTP_USER=bms-alert@163.com
ALERT_SMTP_PASS=<163 授权码 16 位>
ALERT_FROM=bms-alert@163.com

pm2 restart vni-bms --update-env
# 然后刷新此页,应显示 ✓ 已配置
详细 SOP 在 memory-bank/handover/2026-05-17-bms-alert-email-setup.md

基础设置

支持多个,每行一个邮箱。空着 = 不发任何告警邮件(即便 enabled=true)。
默认 4 小时

告警阈值

持续 分钟
持续 分钟
持续 分钟

当前指标状态(每分钟更新)

加载中...
--
📖 工单使用说明(点击展开)
编号 标题 用户 设备 分类 优先级 状态 当前归属 处理人 创建时间
加载中...