58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
#ifndef METER_EVENTS_H
|
|
#define METER_EVENTS_H
|
|
|
|
#include "esp_event.h"
|
|
#include "meter_manager.h" // meter_type_t
|
|
#include <stdint.h> // int32_t, int64_t
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
// Base de eventos dos medidores
|
|
ESP_EVENT_DECLARE_BASE(METER_EVENT);
|
|
|
|
// IDs de eventos emitidos por medidores
|
|
typedef enum
|
|
{
|
|
METER_EVENT_DATA_READY = 0,
|
|
METER_EVENT_ERROR,
|
|
METER_EVENT_STARTED,
|
|
METER_EVENT_STOPPED,
|
|
METER_EVENT_CONFIG_UPDATED
|
|
} meter_event_id_t;
|
|
|
|
// Estrutura de dados enviados com METER_EVENT_DATA_READY
|
|
// NOTA: campos não suportados pelo meter devem ficar a 0.
|
|
typedef struct
|
|
{
|
|
const char *source; // "GRID" ou "EVSE"
|
|
|
|
float vrms[3]; // V por fase (0 se não existir)
|
|
float irms[3]; // A por fase (0 se não existir)
|
|
|
|
int32_t watt[3]; // W por fase (0 se não existir)
|
|
int32_t watt_total; // W total ASSINADO: +import / -export (0 se não existir)
|
|
|
|
float frequency; // Hz (0 se não existir)
|
|
float power_factor; // (0 se não existir)
|
|
float total_energy; // kWh (0 se não existir)
|
|
|
|
int64_t timestamp_us; // esp_timer_get_time() (0 => consumidor pode usar "now")
|
|
} meter_event_data_t;
|
|
|
|
// Estrutura de dados enviados com METER_EVENT_CONFIG_UPDATED
|
|
typedef struct
|
|
{
|
|
meter_type_t grid_type;
|
|
meter_type_t evse_type;
|
|
int64_t timestamp_us; // esp_timer_get_time()
|
|
} meter_config_event_t;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // METER_EVENTS_H
|