Files
chargeflow/components/protocols/include/mqtt.h
2026-05-15 12:20:47 +01:00

89 lines
2.7 KiB
C
Executable File

// === Início de: components/mqtt/include/mqtt.h ===
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdbool.h>
#include <stdint.h>
#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
// =============================
// Limit modes (cmd/evse/limit)
// =============================
typedef enum
{
LIMIT_MODE_OFF = 0, ///< sem limite, usa max do hardware
LIMIT_MODE_MANUAL, ///< corrente fixa definida pelo utilizador
LIMIT_MODE_LOADBALANCER, ///< limita pelo contador da instalação
LIMIT_MODE_SOLAR ///< só com excedente FV
} limit_mode_t;
/**
* @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
* - Aplica o modo de limite persistido
*
* Não inicia a ligação ao broker imediatamente; isso acontece quando existir IP
* (NETWORK_EVENT_STA_GOT_IP) e `enabled == true`.
*
* IMPORTANTE: chamar DEPOIS de loadbalancer_init() para o restauro do modo
* de limite funcionar correctamente.
*/
esp_err_t mqtt_init(void);
/**
* @brief Força tentativa de ligação ao broker (normalmente não é necessário chamar).
*/
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
// =============================
bool mqtt_get_enabled(void);
void mqtt_get_server(char *server);
void mqtt_get_base_topic(char *base_topic);
void mqtt_get_user(char *username);
void mqtt_get_password(char *password);
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
*/
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 ===