// === Início de: components/mqtt/include/mqtt.h === #pragma once #ifdef __cplusplus extern "C" { #endif #include #include #include "esp_err.h" // Tamanhos máximos esperados pelos getters (buffers do chamador) #define MQTT_SERVER_MAX_LEN 64 ///< host ou URI do broker #define MQTT_BASE_TOPIC_MAX_LEN 64 ///< tópico base (ex: "evse") #define MQTT_USERNAME_MAX_LEN 32 #define MQTT_PASSWORD_MAX_LEN 64 /** * @brief Inicializa o módulo MQTT. * * - Carrega configuração da NVS * - Regista handlers de eventos (AUTH, SCHED, LOADBALANCER, METER, EVSE, NETWORK) * - Cria a task de telemetria periódica * * Não inicia a ligação ao broker imediatamente; isso acontece quando existir IP * (NETWORK_EVENT_STA_GOT_IP) e `enabled == true`. */ esp_err_t mqtt_init(void); /** * @brief Força tentativa de ligação ao broker (normalmente não é necessário chamar). * * Útil apenas se quiseres forçar manualmente depois de mudares config. */ esp_err_t mqtt_start(void); /** * @brief Pára o cliente MQTT e destrói o handle. */ void mqtt_stop(void); // ============================= // Getters de configuração // ============================= /** * @brief Indica se o MQTT está ativo (flag em config). */ bool mqtt_get_enabled(void); /** * @brief Obtém o servidor MQTT (host ou URI). * * @param server buffer de saída, com pelo menos MQTT_SERVER_MAX_LEN bytes. */ void mqtt_get_server(char *server); /** * @brief Obtém o tópico base (ex.: "evse"). * * @param base_topic buffer de saída, com pelo menos MQTT_BASE_TOPIC_MAX_LEN bytes. */ void mqtt_get_base_topic(char *base_topic); /** * @brief Obtém o username MQTT (se configurado). * * @param username buffer de saída, com pelo menos MQTT_USERNAME_MAX_LEN bytes. */ void mqtt_get_user(char *username); /** * @brief Obtém a password MQTT (se configurada). * * @param password buffer de saída, com pelo menos MQTT_PASSWORD_MAX_LEN bytes. */ void mqtt_get_password(char *password); /** * @brief Obtém a periodicidade da telemetria periódica (em segundos). */ uint16_t mqtt_get_periodicity(void); // ============================= // Setter de configuração // ============================= /** * @brief Atualiza a configuração MQTT (tipicamente chamado pelo endpoint REST). * * - Grava em NVS * - Se já existir cliente ligado, pára e recria com a nova config * - Se `enabled == true` e houver IP, tenta ligar ao broker * * @param enabled true para ativar MQTT * @param host hostname ou URI (ex: "broker.hivemq.com" ou "mqtt://x.y.z") * @param topic tópico base (ex: "evse") * @param username username MQTT (ou NULL para manter/limpar) * @param password password MQTT (ou NULL para manter/limpar) * @param periodicity período da task de telemetria em segundos (ex: 30) * * @return ESP_OK em caso de sucesso, ou erro de NVS / MQTT. */ esp_err_t mqtt_set_config(bool enabled, const char *host, const char *topic, const char *username, const char *password, int periodicity); #ifdef __cplusplus } #endif // === Fim de: components/mqtt/include/mqtt.h ===