feat: init
This commit is contained in:
131
include/mqtt_manager.h
Normal file
131
include/mqtt_manager.h
Normal file
@@ -0,0 +1,131 @@
|
||||
/**
|
||||
* @file mqtt_manager.h
|
||||
* @brief MQTT 通信管理器 (协议规范 V0.08)
|
||||
*
|
||||
* 上行: report/allpoints, status/{gateid}/online, status/{gateid}/offline,
|
||||
* status/{gateid}/provision, response/{gateid}/cmd, response/{gateid}/provision
|
||||
* 下行: cmd/{gateid}/alarm, cmd/{gateid}/alarm/restore,
|
||||
* cmd/{gateid}/control, cmd/{gateid}/provision/wifi
|
||||
*/
|
||||
|
||||
#ifndef MQTT_MANAGER_H
|
||||
#define MQTT_MANAGER_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <WiFi.h>
|
||||
#include <PubSubClient.h>
|
||||
#include <ArduinoJson.h>
|
||||
#include "config.h"
|
||||
|
||||
// ============================================================
|
||||
// 回调函数类型
|
||||
// ============================================================
|
||||
|
||||
// 告警指令回调 (alarm / alarm_restore)
|
||||
typedef void (*MQTTAlarmCallback)(const AlarmCommand& cmd);
|
||||
|
||||
// 控制指令回调
|
||||
typedef void (*MQTTControlCallback)(const ControlCommand& cmd);
|
||||
|
||||
// 配网指令回调 (WiFi 凭证下发)
|
||||
typedef void (*MQTTProvisionCallback)(const ProvisionCommand& cmd);
|
||||
|
||||
// ============================================================
|
||||
// MQTTManager 类
|
||||
// ============================================================
|
||||
|
||||
class MQTTManager {
|
||||
public:
|
||||
MQTTManager();
|
||||
~MQTTManager();
|
||||
|
||||
/** 初始化 */
|
||||
bool begin(const char* gateid);
|
||||
|
||||
/** 主循环 */
|
||||
void loop();
|
||||
|
||||
/** 连接/断开 */
|
||||
bool connect();
|
||||
void disconnect();
|
||||
bool isConnected();
|
||||
|
||||
/** 设置服务器 */
|
||||
void setServer(const char* host, uint16_t port,
|
||||
const char* user, const char* pass);
|
||||
|
||||
// ============================================================
|
||||
// 上行: 发布方法 (协议规范 §4)
|
||||
// ============================================================
|
||||
|
||||
/** 全量遥测上报 report/allpoints (§4.1) */
|
||||
void publishAllPoints(const TelemetryData& data, uint32_t sequence);
|
||||
|
||||
/** 设备上线通知 status/{gateid}/online (§4.2) */
|
||||
void publishOnline();
|
||||
|
||||
/** 设备离线通知 status/{gateid}/offline (§4.3) — 主动调用 */
|
||||
void publishOffline();
|
||||
|
||||
/** 配网状态通知 status/{gateid}/provision (§4.4) */
|
||||
void publishProvisionStatus(const char* state, const char* bleName);
|
||||
|
||||
/** 指令执行响应 response/{gateid}/cmd (§4.5) */
|
||||
void publishCmdResponse(const char* cmdId, const char* cmdType,
|
||||
const char* alarmType, bool success,
|
||||
const char* errorCode, const char* errorMsg);
|
||||
|
||||
/** 配网指令响应 response/{gateid}/provision (§4.6) */
|
||||
void publishProvisionResponse(const char* cmdId, bool success,
|
||||
const char* errorCode, const char* errorMsg,
|
||||
const char* wifiSignal = "");
|
||||
|
||||
// ============================================================
|
||||
// 回调注册 (协议规范 §5)
|
||||
// ============================================================
|
||||
|
||||
void onAlarmCommand(MQTTAlarmCallback cb);
|
||||
void onControlCommand(MQTTControlCallback cb);
|
||||
void onProvisionCommand(MQTTProvisionCallback cb);
|
||||
|
||||
/** 获取 gateid */
|
||||
const char* getGateId() const { return _gateid; }
|
||||
|
||||
private:
|
||||
static void _mqttCallback(char* topic, byte* payload, unsigned int length);
|
||||
static MQTTManager* _instance;
|
||||
|
||||
// 主题构建
|
||||
String _buildTopic(const char* tmpl) const;
|
||||
|
||||
// 下行报文解析
|
||||
void _handleMessage(const char* topic, const char* payload);
|
||||
void _parseAlarm(const char* payload, bool isRestore);
|
||||
void _parseControl(const char* payload);
|
||||
void _parseProvision(const char* payload);
|
||||
|
||||
// 发布辅助
|
||||
bool _publish(const char* topicTmpl, const char* payload, uint8_t qos, bool retain = false);
|
||||
|
||||
WiFiClient _wifiClient;
|
||||
PubSubClient _mqtt;
|
||||
char _gateid[16];
|
||||
|
||||
// 服务器配置
|
||||
char _server[64];
|
||||
uint16_t _port;
|
||||
char _user[32];
|
||||
char _pass[32];
|
||||
|
||||
// 重连
|
||||
uint32_t _reconnectInterval;
|
||||
uint32_t _lastReconnectAttempt;
|
||||
bool _connected;
|
||||
|
||||
// 回调
|
||||
MQTTAlarmCallback _alarmCb;
|
||||
MQTTControlCallback _controlCb;
|
||||
MQTTProvisionCallback _provisionCb;
|
||||
};
|
||||
|
||||
#endif // MQTT_MANAGER_H
|
||||
Reference in New Issue
Block a user