#include "meter_manager.h" #include "esp_log.h" #include "meter_ade7758.h" #include "meter_orno513.h" #include "meter_orno516.h" #include "meter_zigbee.h" static const char *TAG = "meter_manager"; // Variáveis para armazenar o tipo de medidor atual static meter_type_t current_meter_type = METER_TYPE_NONE; esp_err_t meter_init(meter_type_t meter_type) { current_meter_type = meter_type; ESP_LOGI(TAG, "Initializing meter of type: %d", meter_type); switch (current_meter_type) { case METER_TYPE_EVSE_ADE7758: return meter_ade7758_init(); // Inicializa o medidor ADE7758 (EVSE) case METER_TYPE_GRID_ORNO513: return meter_orno513_init(); // Inicializa o medidor ORNO 513 ou 516 (Grid) case METER_TYPE_GRID_ORNO516: return meter_init_orno516(); // Inicializa o medidor ORNO 513 ou 516 (Grid) case METER_TYPE_GRID_ZIGBEE: return meter_init_zigbee(); // Inicializa o medidor Zigbee (Grid) default: ESP_LOGE(TAG, "Unsupported meter type"); return ESP_ERR_INVALID_ARG; } } esp_err_t meter_start(void) { if (current_meter_type == METER_TYPE_NONE) { ESP_LOGE(TAG, "Meter type is not initialized"); return ESP_ERR_INVALID_STATE; } ESP_LOGI(TAG, "Starting meter"); switch (current_meter_type) { case METER_TYPE_EVSE_ADE7758: return meter_ade7758_start(); case METER_TYPE_GRID_ORNO513: return meter_orno513_start(); case METER_TYPE_GRID_ORNO516: return meter_start_orno516(); case METER_TYPE_GRID_ZIGBEE: return meter_start_zigbee(); default: ESP_LOGE(TAG, "Unsupported meter type"); return ESP_ERR_INVALID_ARG; } } void meter_stop(void) { if (current_meter_type == METER_TYPE_NONE) { ESP_LOGE(TAG, "Meter is not initialized"); return; } ESP_LOGI(TAG, "Stopping meter"); switch (current_meter_type) { case METER_TYPE_EVSE_ADE7758: meter_ade7758_stop(); break; case METER_TYPE_GRID_ORNO513: meter_orno513_stop(); break; case METER_TYPE_GRID_ORNO516: meter_stop_orno516(); break; case METER_TYPE_GRID_ZIGBEE: meter_stop_zigbee(); break; default: ESP_LOGE(TAG, "Unsupported meter type"); break; } } bool meter_is_running(void) { if (current_meter_type == METER_TYPE_NONE) { ESP_LOGE(TAG, "Meter is not initialized"); return false; } switch (current_meter_type) { case METER_TYPE_EVSE_ADE7758: return meter_ade7758_is_running(); case METER_TYPE_GRID_ORNO513: return meter_orno513_is_running(); case METER_TYPE_GRID_ORNO516: return meter_is_running_orno516(); case METER_TYPE_GRID_ZIGBEE: return meter_is_running_zigbee(); default: ESP_LOGE(TAG, "Unsupported meter type"); return false; } } float meter_get_vrms_l1(void) { if (current_meter_type == METER_TYPE_NONE) return 0; switch (current_meter_type) { case METER_TYPE_EVSE_ADE7758: return meter_ade7758_get_vrms_l1(); case METER_TYPE_GRID_ORNO513: return meter_orno513_get_vrms_l1(); case METER_TYPE_GRID_ORNO516: return meter_get_vrms_l1_orno516(); case METER_TYPE_GRID_ZIGBEE: return meter_get_vrms_l1_zigbee(); default: ESP_LOGE(TAG, "Unsupported meter type for reading vrms_l1"); return 0; } } // Continue as funções `meter_get_*` para cada tipo de dado (corrente, potência, etc.) float meter_get_irms_l1(void) { if (current_meter_type == METER_TYPE_NONE) return 0; switch (current_meter_type) { case METER_TYPE_EVSE_ADE7758: return meter_ade7758_get_irms_l1(); case METER_TYPE_GRID_ORNO513: return meter_orno513_get_irms_l1(); case METER_TYPE_GRID_ORNO516: return meter_get_irms_l1_orno516(); case METER_TYPE_GRID_ZIGBEE: return meter_get_irms_l1_zigbee(); default: ESP_LOGE(TAG, "Unsupported meter type for reading irms_l1"); return 0; } } // You should add the rest of the functions similarly as you progress