Files
mqtt_power/springboot-init-main/doc/requirements.md
2025-05-13 21:30:06 +08:00

7.1 KiB
Raw Permalink Blame History

MQTT 智能充电桩系统 - 需求文档

1. 项目概述

本项目旨在开发一个基于 Spring Boot 的 移动式 智能充电管理系统。系统作为后端平台,通过 MQTT 协议与 基于 ESP32-CAM 的充电机器人 硬件设备进行通信,实现远程控制、状态监控以及 调度机器人到指定车位进行充电。同时,系统提供用户管理、充值计费等功能。平台软件不负责机器人底层的导航、避障、循迹等具体算法实现,仅发送高级指令并接收处理后的状态。

2. 功能需求

2.1 用户管理与认证

  • 用户角色: 系统需支持两种用户角色:
    • 管理员:拥有系统所有管理权限。
    • 普通用户:可进行充电、充值等操作。
  • 用户登录: 提供安全的用户名密码登录机制。
    • 区分管理员和普通用户登录接口或逻辑。
  • 用户信息管理 (管理员权限):
    • 查看用户列表。
    • (可选)添加、编辑、删除用户信息。

2.2 MQTT 集成与设备控制

  • MQTT 连接:
    • 连接至 指定的公共 MQTT 服务器 (如 EMQX需提供具体地址和端口)
    • 支持为特定的 MQTT 主题Topic设置用户名和密码进行认证 (需提供)
    • 配置用于指令下发和状态上报的 Topic。
  • 消息格式:
    • 与充电机器人通过 JSON 字符串格式进行消息交互。
  • 设备控制 (平台侧重点):
    • 向充电机器人发送 高级控制指令(见 MQTT Topic 规划)。
    • 平台 不处理 原始传感器数据(如红外、超声波读数)。
  • 状态接收 (平台侧重点):
    • 接收充电机器人上报的 综合状态信息(见 MQTT Topic 规划)。

2.3 智能充电核心业务

  • 充电机器人管理 (管理员权限):
    • 可选添加、查看、管理充电机器人设备信息设备ID、当前状态、位置
  • 车位管理 (管理员权限):
    • 可选管理可用的充电车位信息车位ID、位置描述
  • 激活码充值:
    • 普通用户可以使用激活码为自己的账户充值。
    • 系统需验证激活码的有效性,并将对应金额或时长添加到用户账户。
    • 需要设计激活码生成和管理机制(管理员)。
  • 充电计费:
    • 根据实际充电时长进行计费。
    • 需要明确计费单价(例如:元/小时)。
    • 充电结束后,从用户账户扣除相应费用。
    • 用户账户余额不足时,应有相应处理(如:无法启动充电、自动停止充电)。
  • 充电流程 (平台侧重点):
    1. 用户登录系统。
    2. 用户 选择目标充电车位 {parkingSpotId}
    3. 用户发起充电请求。
    4. 系统检查用户余额。
    5. 系统选择一个可用的充电机器人 {robotId} (如果系统管理多个机器人)。
    6. 系统通过 MQTT 发送 移动指令 (move_to_spot) 给机器人 {robotId},目标为车位 {parkingSpotId}
    7. 机器人移动到位后,通过 MQTT 上报 arrived_at_spot 状态。
    8. 系统通过 MQTT 发送 启动充电指令 (start_charge) 给机器人。
    9. 机器人开始充电并通过 MQTT 上报 charging 状态(及充电时长)。
    10. 用户发起停止充电请求 或 机器人上报 charge_complete / error 状态。
    11. 系统通过 MQTT 发送 停止充电指令 (stop_charge) 给机器人。
    12. 系统根据 MQTT 上报的 总充电时长 计算费用并扣费。
    13. 记录充电日志。

2.4 充电记录

  • 记录用户的充电历史,包括:用户、使用的机器人充电车位、开始时间、结束时间、充电时长、消费金额。
  • 普通用户可查看自己的充电记录。
  • 管理员可查看所有充电记录。

3. 非功能需求

  • 可用性: 系统应稳定可靠,提供持续服务。
  • 安全性: 用户密码需加密存储MQTT 通道需进行安全认证;防止未授权访问。
  • 可维护性: 代码结构清晰,遵循高内聚低耦合原则,易于维护和扩展。
  • 性能: 系统应能及时响应用户请求和处理 MQTT 消息。

4. 技术选型(初步)

  • 后端框架: Spring Boot
  • 持久层: MyBatis-Plus
  • 数据库: MySQL
  • 缓存: Redis
  • MQTT Broker: 外部公共服务 (如 EMQX, 需用户提供实例信息)
  • MQTT 客户端库: Eclipse Paho MQTT Client
  • API 文档: Knife4j
  • 数据交换格式: JSON
  • 机器人控制器 (参考): ESP32-CAM

5. MQTT 通道Topic规划 (需要用户确认并提供细节)

  • 基础 Topic 结构: (建议)

    • 指令下发: robot/command/{clientId}
    • 状态上报: robot/status/{clientId}
    • 注:{clientId} 通常是认证时使用的客户端ID可以等同于机器人ID {robotId},需要与硬件端约定。
  • 指令下发 Topic: robot/command/{clientId} (平台 -> 机器人)

    • 认证: 需要 (用户名/密码由用户提供)
    • Payload (JSON 示例):
      • 移动到车位: {"action": "move_to_spot", "spotId": "P001"}
      • 开始充电: {"action": "start_charge"}
      • 停止充电: {"action": "stop_charge"}
      • 查询状态: {"action": "query_status"} (可选)
  • 状态上报 Topic: robot/status/{clientId} (机器人 -> 平台)

    • 认证: 需要 (用户名/密码由用户提供)
    • Payload (JSON 示例):
      • 空闲状态: {"robotId": "R001", "status": "idle", "location": "base", "battery": 95}
      • 移动中: {"robotId": "R001", "status": "moving", "targetSpot": "P001", "battery": 90}
      • 到达车位: {"robotId": "R001", "status": "arrived_at_spot", "spotId": "P001", "battery": 88}
      • 充电中: {"robotId": "R001", "status": "charging", "spotId": "P001", "durationSeconds": 120, "battery": 92}
      • 充电完成: {"robotId": "R001", "status": "charge_complete", "spotId": "P001", "totalDurationSeconds": 3600, "battery": 100}
      • 错误状态: {"robotId": "R001", "status": "error", "errorCode": "NAV_BLOCKED", "message": "Navigation path blocked", "location": "near_P002"}
      • 通用状态响应 (对 query_status): {"robotId": "R001", "status": "idle", "location": "base", "battery": 95}
  • 重要提示: 上述 Topic 结构和 Payload 内容为 建议最终需要与硬件ESP32开发侧 详细约定统一。平台将根据约定的格式进行开发。

6. 数据库设计 (已精简)

  • 用户表 (user): 包含用户基本信息、密码角色 (如: admin, user)账户余额
  • 充电机器人表 (charging_robot)
  • 车位表 (parking_spot)
  • 充电记录表 (charging_session)
  • 激活码表 (activation_code)
  • 机器人任务表 (robot_task): 用于跟踪发送给机器人的指令及其状态 (pending, sent, acknowledged_success, acknowledged_failure, timed_out),防止重复发送指令给未响应的机器人。