Files
mqtt_power/LogBook.md

43 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 变更日志
## 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_CHARGE` MQTT 指令来启动充电的流程。
- 新流程:机器人(单片机)在执行 `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` 指令不再由后端主动发送而可能不再被主要流程调用,其定位和用途需要进一步明确或在未来重构中调整。
- 前端界面和用户交互流程可能需要相应调整,以匹配后端"到达即充电"的逻辑(例如,可能不再需要用户在机器人到达后点击"开始充电"按钮)。