Files
mqtt_power/esp32_robot_firmware/mqtt_handler.h

46 lines
1.8 KiB
C
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.

#ifndef MQTT_HANDLER_H
#define MQTT_HANDLER_H
#include <PubSubClient.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
#include "config.h" // 引入配置文件以获取 MQTT 设置和设备ID
// 定义机器人可能的状态枚举,与后端和需求文档对齐
enum RobotStatus {
IDLE,
MOVING,
CHARGING,
COMPLETED,
FAULTED // 或 ERROR根据后端实际使用的枚举值
};
// 回调函数指针类型,用于通知主程序收到了特定指令
// 参数: commandType, taskId, targetSpotId (如果指令是移动)
typedef void (*CommandCallback)(const char* commandType, const char* taskId, const char* targetSpotId);
void mqtt_setup(CommandCallback cmd_callback); // MQTT 初始化,传入指令回调函数
void mqtt_loop(); // 在主 loop 中调用保持MQTT连接和处理消息
void mqtt_publish_status_update(
RobotStatus current_status,
const char* location,
int battery_level,
const char* current_task_id, // ID ()
const char* target_spot, // 仅在MOVING状态下
const char* current_spot, // 仅在CHARGING, COMPLETED状态下
unsigned long charge_duration_seconds, // 仅在CHARGING状态下
int error_code, // 仅在FAULTED状态下
const char* error_message // 仅在FAULTED状态下
); // 发布状态更新
void mqtt_publish_ack(
const char* task_id,
bool success,
const char* message,
RobotStatus current_robot_status_at_ack,
const char* ack_context_spot_id // 例如MOVE_TO_SPOT完成后的spotId
); // 发布ACK消息
// 内部状态,供其他模块查询 (可选,或者通过回调传递)
RobotStatus mqtt_get_current_robot_status_commanded(); // 获取后端指令可能影响的最新状态
#endif // MQTT_HANDLER_H