功能需求
🟢 已完成 🟡 基础完成 🔵 计划中 ⚪ 待排期
1. 用户认证与权限
1.1 账号认证
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| AUTH-001 | 支持账号+密码登录,密码 bcrypt 加盐存储 | P0 | 🟡 基础完成 |
| AUTH-002 | 登录后颁发 JWT Token,默认有效期 7 天 | P0 | 🟡 基础完成 |
| AUTH-003 | 支持 Token 刷新机制,避免频繁登录 | P1 | 🔵 计划中 |
| AUTH-004 | 支持微信小程序 code 登录(wx.login) | P0 | 🟡 基础完成 |
| AUTH-005 | 支持微信手机号授权登录 | P1 | 🟡 基础完成 |
1.2 权限控制
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| AUTH-006 | 基于 RBAC 模型:用户 → 角色 → 权限 | P0 | 🟡 基础完成 |
| AUTH-007 | 支持菜单级权限控制(前端路由过滤) | P0 | 🟡 基础完成 |
| AUTH-008 | 支持接口级权限控制(后端守卫装饰器) | P0 | 🟡 基础完成 |
| AUTH-009 | 设备级权限:用户只能查看/控制自己的设备 | P1 | 🔵 计划中 |
验收条件
- 无 Token 请求 API 返回 401
- 无权限用户访问受保护接口返回 403
- 角色权限变更后,用户下次请求立即生效
2. 产品管理
2.1 产品定义
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| PROD-001 | 创建产品:名称、描述、分类、厂商信息 | P0 | 🔵 计划中 |
| PROD-002 | 编辑产品信息和物模型 JSON | P0 | 🔵 计划中 |
| PROD-003 | 产品列表:支持搜索、分类筛选、分页 | P0 | 🔵 计划中 |
| PROD-004 | 物模型版本管理,支持版本回滚 | P2 | 🔵 计划中 |
2.2 物模型
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| PROD-005 | 支持定义属性(Property):数据类型、取值范围、读写权限 | P0 | 🔵 计划中 |
| PROD-006 | 支持定义事件(Event):事件类型、参数列表 | P1 | 🔵 计划中 |
| PROD-007 | 支持定义服务(Service):输入参数、输出参数 | P1 | 🔵 计划中 |
| PROD-008 | 物模型 JSON 格式校验,拒绝非法定义 | P0 | 🔵 计划中 |
验收条件
- 物模型 JSON 通过 Schema 校验后保存
- 修改物模型不影响已注册设备,新设备使用新版本
3. 设备管理
3.1 设备注册
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| DEV-001 | 设备首次上电通过 MQTT 上报物理 ID(MAC),平台分配逻辑 ID(UUID) | P0 | 🔵 计划中 |
| DEV-002 | 设备注册时校验产品密钥,防止未授权设备接入 | P0 | 🔵 计划中 |
| DEV-003 | 设备激活后生成 MQTT 连接凭证(Username + Password) | P0 | 🔵 计划中 |
3.2 设备管理
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| DEV-004 | 设备列表:显示名称、产品、在线状态、最近上报时间 | P0 | 🔵 计划中 |
| DEV-005 | 设备搜索:按名称、ID、MAC 模糊搜索 | P1 | 🔵 计划中 |
| DEV-006 | 设备筛选:按产品类型、在线状态筛选 | P1 | 🔵 计划中 |
| DEV-007 | 设备详情:基本信息、实时状态、设备影子 | P0 | 🔵 计划中 |
| DEV-008 | 设备删除:解绑设备并清除影子数据 | P1 | 🔵 计划中 |
3.3 设备影子
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| DEV-009 | 每个设备维护一份影子 JSON(期望状态 + 实际状态) | P0 | 🔵 计划中 |
| DEV-010 | 云端修改期望状态后,通过 MQTT 下发至设备 | P0 | 🔵 计划中 |
| DEV-011 | 设备上报实际状态后,更新影子并比对差异 | P0 | 🔵 计划中 |
| DEV-012 | 影子变更记录保留 30 天,支持审计追溯 | P2 | 🔵 计划中 |
验收条件
- 设备注册成功后,数据库和设备端均可获取逻辑 ID
- 设备在线/离线状态更新延迟 < 5 秒
- 设备影子与实际设备状态最终一致
4. 数据采集与存储
4.1 数据上报
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| DATA-001 | 设备按标准 Topic 上报遥测数据:sys/{pid}/{did}/thing/event/property/post | P0 | 🔵 计划中 |
| DATA-002 | 支持 QoS 1(至少一次送达),确保数据不丢失 | P0 | 🔵 计划中 |
| DATA-003 | 上报频率限制:单设备默认 60 秒最小间隔,防刷 | P1 | 🔵 计划中 |
4.2 数据存储
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| DATA-004 | 遥测数据写入 InfluxDB,按设备 ID + 时间索引 | P0 | 🔵 计划中 |
| DATA-005 | 原始数据保留 90 天,1 分钟聚合保留 1 年,1 小时聚合永久保留 | P1 | 🔵 计划中 |
| DATA-006 | 设备日志(上下线、指令)写入 PostgreSQL,保留 180 天 | P1 | 🔵 计划中 |
4.3 数据查询
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| DATA-007 | 支持按时间范围查询设备历史数据 | P0 | 🔵 计划中 |
| DATA-008 | 支持多属性叠加曲线展示(如温度+湿度) | P1 | 🔵 计划中 |
| DATA-009 | 支持数据导出(CSV),单次最多 10 万条 | P2 | 🔵 计划中 |
验收条件
- 设备属性上报到数据可查询延迟 < 2 秒
- InfluxDB 降采样任务按配置自动执行
5. 远程控制
5.1 指令下发
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| CTRL-001 | 通过 MQTT 下发属性设置指令 | P0 | 🔵 计划中 |
| CTRL-002 | 每条指令包含唯一 msgId,用于追踪和去重 | P0 | 🔵 计划中 |
| CTRL-003 | 指令超时时间 30 秒,超时未回复标记为失败 | P0 | 🔵 计划中 |
| CTRL-004 | 支持批量指令:一次下发控制多个设备 | P1 | 🔵 计划中 |
5.2 指令反馈
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| CTRL-005 | 设备执行后回复 set_reply,包含执行结果和最新状态 | P0 | 🔵 计划中 |
| CTRL-006 | 指令状态(已发送/已执行/超时/失败)在前端实时更新 | P0 | 🔵 计划中 |
验收条件
- 指令从 Web/小程序发起到设备执行延迟 < 1 秒(局域网)
- 指令成功率 > 99%
6. 告警通知
6.1 告警规则
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| ALERT-001 | 支持属性阈值告警(如温度 > 80°C) | P1 | 🔵 计划中 |
| ALERT-002 | 支持设备离线告警(超时未上报心跳) | P1 | 🔵 计划中 |
| ALERT-003 | 支持告警分级:警告/严重/紧急 | P2 | 🔵 计划中 |
6.2 通知渠道
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| ALERT-004 | 小程序消息推送 | P1 | 🔵 计划中 |
| ALERT-005 | 邮件通知 | P2 | 🔵 计划中 |
| ALERT-006 | Web 后台告警列表与已读/未读管理 | P1 | 🔵 计划中 |
7. Web 管理后台
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| WEB-001 | Dashboard 首页:概览统计卡片 | P0 | 🟡 基础完成 |
| WEB-002 | 用户管理:CRUD + 角色分配 | P0 | 🟡 基础完成 |
| WEB-003 | 角色管理:CRUD + 权限树配置 | P0 | 🟡 基础完成 |
| WEB-004 | 菜单管理:动态路由配置 | P0 | 🟡 基础完成 |
| WEB-005 | 部门/字典/配置/通知/日志管理 | P1 | 🟡 基础完成 |
| WEB-006 | 产品管理页:列表 + 创建/编辑 + 物模型编辑器 | P0 | 🔵 计划中 |
| WEB-007 | 设备列表页:分页、搜索、筛选、状态标签 | P0 | 🔵 计划中 |
| WEB-008 | 设备详情页:状态卡片 + 控制面板 + 影子数据 | P0 | 🔵 计划中 |
| WEB-009 | 数据看板:时间范围选择器 + ECharts 时序曲线 | P1 | 🔵 计划中 |
8. 微信小程序
8.1 登录与注册
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| MP-001 | 账号密码登录:调用后端认证接口,返回 JWT Token 并持久化存储 | P0 | 🟡 基础完成 |
| MP-002 | 微信 code 登录:调用 wx.login() 获取 code,后端换取 Token | P0 | 🟡 基础完成 |
| MP-003 | 微信手机号登录:通过手机号授权按钮获取加密手机号,后端解密并登录 | P1 | 🟡 基础完成 |
| MP-004 | 注册页:填写账号/密码/确认密码,校验格式后调用注册接口 | P0 | 🟡 基础完成 |
| MP-005 | 登录状态持久化:Token 存入本地 Storage,下次启动自动登录 | P0 | 🟡 基础完成 |
| MP-006 | 登录过期处理:Token 过期后自动跳转登录页 | P1 | 🟡 基础完成 |
8.2 首页(设备列表)
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| MP-010 | 设备列表作为 TabBar 首页,展示用户名下所有设备 | P0 | 🔵 计划中 |
| MP-011 | 设备卡片显示:设备图标/名称、在线状态(绿/灰点)、最新一条遥测数据摘要 | P0 | 🔵 计划中 |
| MP-012 | 下拉刷新设备列表和在线状态 | P0 | 🔵 计划中 |
| MP-013 | 设备搜索:按名称模糊搜索 | P1 | 🔵 计划中 |
| MP-014 | 设备筛选:按产品类型、在线状态筛选 | P1 | 🔵 计划中 |
| MP-015 | 空状态提示:无设备时显示引导添加设备的入口 | P0 | 🔵 计划中 |
8.3 设备添加(配网)
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| MP-020 | 配网入口:首页空状态引导 + 右上角添加按钮 | P0 | 🔵 计划中 |
| MP-021 | 配网方式选择:BLE 配网 / WiFi 配网 / 扫码配网 | P1 | 🔵 计划中 |
| MP-022 | BLE 配网流程:扫码 → 蓝牙搜索设备 → 连接 → 发送 WiFi SSID + 密码 → 等待设备上线 | P1 | 🔵 计划中 |
| MP-023 | 配网进度展示:实时显示当前步骤和进度动画 | P0 | 🔵 计划中 |
| MP-024 | 配网成功:展示设备信息,引导用户命名设备 | P0 | 🔵 计划中 |
| MP-025 | 配网失败:明确提示失败原因(WiFi 密码错误/信号弱/设备未响应) | P0 | 🔵 计划中 |
8.4 设备详情
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| MP-030 | 设备详情页:顶部设备名称 + 在线状态 + 最后上报时间 | P0 | 🔵 计划中 |
| MP-031 | 实时状态展示:根据物模型定义的属性渲染对应的 UI 组件(开关/Slider/数值等) | P0 | 🔵 计划中 |
| MP-032 | 控制交互:点击开关/按钮下发控制指令,操作后显示 Loading 直到收到 set_reply | P0 | 🔵 计划中 |
| MP-033 | 实时刷新:设备上报数据后自动更新页面状态(WebSocket 推送) | P0 | 🔵 计划中 |
| MP-034 | 数据历史入口:跳转设备数据历史页 | P1 | 🔵 计划中 |
8.5 设备设置
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| MP-040 | 设备名称编辑:修改设备别名 | P0 | 🔵 计划中 |
| MP-041 | 设备信息展示:产品名称、设备 ID(逻辑/物理)、固件版本、注册时间 | P1 | 🔵 计划中 |
| MP-042 | 设备解绑:二次确认后解绑设备,清除本地和云端关联 | P1 | 🔵 计划中 |
| MP-043 | 固件版本检查与 OTA 升级入口 | P2 | ⚪ 待排期 |
| MP-044 | 设备分享:分享设备给其他用户(扫码/账号) | P2 | ⚪ 待排期 |
8.6 家庭管理
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| MP-050 | 家庭列表:用户可创建多个家庭(如"家"、"公司"、"农场") | P1 | 🔵 计划中 |
| MP-051 | 家庭创建/编辑/删除:名称、图标、房间信息 | P1 | 🔵 计划中 |
| MP-052 | 设备归属:设备添加到指定家庭,按房间分组展示 | P1 | 🔵 计划中 |
| MP-053 | 家庭切换:首页顶部切换当前家庭,设备列表随之变化 | P1 | 🔵 计划中 |
8.7 个人中心
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| MP-060 | 用户信息展示:头像、昵称、账号 | P0 | 🟡 基础完成 |
| MP-061 | 个人资料编辑:修改昵称、头像(微信头像/自定义) | P1 | 🟡 基础完成 |
| MP-062 | 消息中心:系统通知、告警消息、设备上下线提醒 | P2 | 🔵 计划中 |
| MP-063 | 关于页面:版本号、用户协议、隐私政策 | P1 | 🟡 基础完成 |
8.8 设置
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| MP-070 | 主题切换:深色/浅色模式 | P2 | 🟡 基础完成 |
| MP-071 | 账号设置:修改密码、绑定/解绑微信 | P1 | 🔵 计划中 |
| MP-072 | 账号注销:二次确认后永久注销账号 | P1 | 🔵 计划中 |
| MP-073 | 语言切换:中文/英文(预留) | P2 | ⚪ 待排期 |
| MP-074 | 缓存清理:清除本地图片和状态缓存 | P2 | 🟡 基础完成 |
验收条件
- 从打开小程序到首页加载完成 < 2 秒
- 配网成功率 > 95%,失败时有明确错误提示
- 设备控制操作后 Loading 状态 < 3 秒(超时提示失败)
9. 硬件(四路继电器)
| 编号 | 需求 | 优先级 | 状态 |
|---|---|---|---|
| HW-001 | 4 路继电器独立控制(开/关/翻转) | P0 | 🟢 已完成 |
| HW-002 | 断电状态记忆(NVS 持久化) | P0 | 🟢 已完成 |
| HW-003 | 物理按键控制(短按翻转,长按 1s 触发) | P1 | 🟢 已完成 |
| HW-004 | MQTT 标准 Topic 迁移(v2 → v3 协议) | P0 | 🔵 计划中 |
| HW-005 | Bluetooth 配网 | P2 | ⚪ 待排期 |
| HW-006 | OTA 固件升级 | P1 | ⚪ 待排期 |
