139 lines
4.3 KiB
C
Executable File
139 lines
4.3 KiB
C
Executable File
#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
|