数据看板
窗口:
--
设备总数
--
未激活 --
在线设备
--
在线率 --%
本月新激活
--
累计 --
用户总数
--
7天新增 +--
今日告警
--
未处理 --
今日产线 QC
--/--
本月通过率 --%
激活 / 用户注册 / 活跃设备 趋势
设备型号分布
工厂本月 QC
设备激活状态
用户增长(窗口内)
在线设备 (0)
离线设备 (0)
| 昵称 | 手机 | 设备数 | 最近登录 | 注册时间 | openId |
|---|
← 返回
--
--缸体状态
调试控制台
MQTT 消息日志
发送指令
快捷预设
指令日志
设备事件
通知记录
告警记录
| 时间 | 设备 | 指令 | 缸 | 状态 | 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 存到
下方列表也会出现 手动触发的备份(点"立刻备份一次"或部署前临时跑), 所以时间戳不止凌晨 3 点 — 这是正常的,非 03:00 的条目就是历史上手动跑过留下的。
/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 可见此页。
仅 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 小时
告警阈值
持续
分钟
持续
分钟
持续
分钟
当前指标状态(每分钟更新)
加载中...
--
| 编号 | 标题 | 用户 | 设备 | 分类 | 优先级 | 状态 | 当前归属 | 处理人 | 创建时间 |
|---|---|---|---|---|---|---|---|---|---|
| 加载中... | |||||||||