#ifndef METER_EVENTS_H #define METER_EVENTS_H #include "esp_event.h" #include "meter_manager.h" // meter_type_t #include // 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