3.5 KiB
3.5 KiB
变更日志
YYYY-MM-DD
- 初始化项目变更日志。
- 确认采用 Gitea Webhook + Shell 脚本的 CI/CD 方案。
- 部署脚本 (
deploy.sh) 和相关配置已准备。
YYYY-MM-DD (请替换为实际日期)
- 详细分析了项目整体结构,特别是单片机 (
mqtt_esp32_client.ino) 与后端 (springboot-init-main) 之间基于README.md的 MQTT 通信流程和协议。 - 核心理解:
- 主题:
- 上行 (设备 -> 后端):
yupi_mqtt_power_project/robot/status/{spotUid}(状态/心跳/ACK) - 下行 (后端 -> 设备):
yupi_mqtt_power_project/robot/command/{spotUid}(指令)
- 上行 (设备 -> 后端):
- 消息格式: JSON。上行消息结构对应后端
com.yupi.project.model.dto.mqtt.RobotStatusMessage。 - 关键上行消息字段:
robotUid,actualRobotStatus,taskId(for ACK),status(for ACK),activeTaskId(通常为sessionId)。 - 关键下行消息字段:
commandType("START_CHARGE", "STOP_CHARGE", 等),taskId,sessionId(for "START_CHARGE")。 - 通信流程: 设备连接后订阅指令主题并上报初始状态。周期性上报状态和心跳。后端下发指令,设备执行后通过ACK响应,并更新状态。
activeTaskId的作用: 该字段在单片机的状态上报和ACK中被用来传递当前有效的sessionId,对于后端跟踪会话状态至关重要。- 单片机代码中包含对
MOVE_TO_SPOT指令的处理,README.md未明确列出,后端可能需同步支持。
- 主题:
- 后续 Debug 将基于此理解进行。
YYYY-MM-DD (请替换为今天的实际日期)
- 核心逻辑变更:"到达即充电"
- 移除了原先设想的由后端发送
START_CHARGEMQTT 指令来启动充电的流程。 - 新流程:机器人(单片机)在执行
MOVE_TO_SPOT指令并成功到达车位后,立即将自身状态更新为CHARGING并上报。后端在收到MOVE_TO_SPOT任务的 ACK (其中应包含机器人已是CHARGING状态) 后,将机器人DB状态更新为CHARGING,并将充电会话状态更新为CHARGING_STARTED。
- 移除了原先设想的由后端发送
- 代码修改:
mqtt_esp32_client.ino:MOVE_TO_SPOT指令处理逻辑修改:- 收到指令后,状态变为
MOVING并上报。 - 模拟移动到达后,状态变为
CHARGING。 - 发送的 ACK 消息中
actualRobotStatus反映为CHARGING。 - 再次上报
CHARGING状态。
- 收到指令后,状态变为
ChargingSessionServiceImpl.java:handleRobotArrival方法修改:- 当
MOVE_TO_SPOT任务完成后,将充电会话状态 (ChargingSession.status) 直接更新为CHARGING_STARTED。 - 记录
robotArrivalTime和chargeStartTime。 - 将数据库中机器人状态 (
ChargingRobot.status) 更新为CHARGING。 - 确保关联的
RobotTask(移动任务) 被正确处理和完成。
- 当
README.md:- 更新了MQTT通信约定、消息示例、单片机开发关键逻辑以及示例充电流程,以反映"到达即充电"的新业务规则。
- 待考虑/后续:
ChargingSessionServiceImpl.handleChargingStart方法目前因START_CHARGE指令不再由后端主动发送而可能不再被主要流程调用,其定位和用途需要进一步明确或在未来重构中调整。- 前端界面和用户交互流程可能需要相应调整,以匹配后端"到达即充电"的逻辑(例如,可能不再需要用户在机器人到达后点击"开始充电"按钮)。