本科毕业设计 · 2027 届 · 计算机工程学院
这五步里,②③④ 三个关键环节都有明确的失败行为,这是设计的一部分而不是意外:
| 环节 | 失败情形 | 系统行为 | 后果 |
|---|---|---|---|
| ② 上报 | Wi-Fi / Broker 不可达 | 设备本地缓存待发队列 | 事件延后但不丢 |
| ③ 后端 | 收到重复 event_id | 幂等去重,不重复入库 | 家属端不会重复收到 |
| ③ 后端 | 字段校验失败 | 拒绝入库并记录告警 | 坏数据不污染历史 |
| ④ 推送 | WebSocket 断开 | 客户端自动重连,重连后拉取差值 | 短暂延迟后补齐 |
GET /api/events 历史事件列表(分页、时间范围筛选)GET /api/events/:id 单条事件详情POST /api/events/:id/ack 标记已处理GET /api/devices 设备与传感器在线状态{type:"event", data:{...}}{type:"state", data:{...}}家属端共三块主界面,都在 Vue 3 + Vite 上实现,适配手机宽度。
当前是否有未处理事件;最近一条事件的类型、时间、级别;一键拨打与标记已处理。
界面截图
按时间倒序列出全部事件,区分跌倒 / 久滞 / 呼救 / 环境预警;支持按时间范围筛选。
界面截图
设备在线状态、最后心跳时间、雷达 / PIR / MQ 系列读数,以及断网补传的可视化提示。
界面截图
| 状态 | 含义 | 是否推送家属 |
|---|---|---|
| suspected | 雷达上报候选,尚未通过 5 秒确认 | 否 |
| local_alarm | 确认通过,本地声光已响,30 秒取消窗进行中 | 否(窗口内) |
| confirmed | 30 秒内未取消,事件成立 | 是 |
| cancelled | 窗口内被按键或语音取消 | 否(记误报) |