204 lines
5.9 KiB
C
Executable File
204 lines
5.9 KiB
C
Executable File
#include "evse_config.h"
|
|
#include "board_config.h"
|
|
#include "evse_limits.h"
|
|
#include "esp_log.h"
|
|
#include "nvs.h"
|
|
|
|
static const char *TAG = "evse_config";
|
|
|
|
static nvs_handle_t nvs;
|
|
|
|
// Parâmetros configuráveis
|
|
static uint8_t max_charging_current = MAX_CHARGING_CURRENT_LIMIT;
|
|
static uint8_t grid_max_current = MAX_GRID_CURRENT_LIMIT;
|
|
static uint16_t charging_current;
|
|
static bool socket_outlet;
|
|
static bool rcm;
|
|
static uint8_t temp_threshold = 60;
|
|
static bool require_auth;
|
|
|
|
esp_err_t evse_config_init(void) {
|
|
ESP_LOGI(TAG, "Abrindo namespace NVS");
|
|
return nvs_open("evse", NVS_READWRITE, &nvs);
|
|
}
|
|
|
|
void evse_check_defaults(void) {
|
|
esp_err_t err;
|
|
uint8_t u8;
|
|
uint16_t u16;
|
|
uint32_t u32;
|
|
bool needs_commit = false;
|
|
|
|
// Max charging current
|
|
err = nvs_get_u8(nvs, "max_chrg_curr", &u8);
|
|
if (err != ESP_OK || u8 < MIN_CHARGING_CURRENT_LIMIT || u8 > MAX_CHARGING_CURRENT_LIMIT) {
|
|
max_charging_current = MAX_CHARGING_CURRENT_LIMIT;
|
|
nvs_set_u8(nvs, "max_chrg_curr", max_charging_current);
|
|
needs_commit = true;
|
|
} else {
|
|
max_charging_current = u8;
|
|
}
|
|
|
|
// Grid max current
|
|
err = nvs_get_u8(nvs, "grid_max_curr", &u8);
|
|
if (err != ESP_OK || u8 < MIN_GRID_CURRENT_LIMIT || u8 > MAX_GRID_CURRENT_LIMIT) {
|
|
grid_max_current = MAX_GRID_CURRENT_LIMIT;
|
|
nvs_set_u8(nvs, "grid_max_curr", grid_max_current);
|
|
needs_commit = true;
|
|
} else {
|
|
grid_max_current = u8;
|
|
}
|
|
|
|
// Charging current (decA)
|
|
err = nvs_get_u16(nvs, "def_chrg_curr", &u16);
|
|
if (err != ESP_OK || u16 < (MIN_CHARGING_CURRENT_LIMIT * 10) || u16 > (max_charging_current * 10)) {
|
|
charging_current = max_charging_current * 10;
|
|
nvs_set_u16(nvs, "def_chrg_curr", charging_current);
|
|
needs_commit = true;
|
|
} else {
|
|
charging_current = u16;
|
|
}
|
|
|
|
err = nvs_get_u8(nvs, "require_auth", &u8);
|
|
require_auth = (err == ESP_OK && u8 <= 1) ? u8 : false;
|
|
if (err != ESP_OK) {
|
|
nvs_set_u8(nvs, "require_auth", require_auth);
|
|
needs_commit = true;
|
|
}
|
|
|
|
err = nvs_get_u8(nvs, "socket_outlet", &u8);
|
|
socket_outlet = (err == ESP_OK && u8) && board_config.proximity;
|
|
if (err != ESP_OK) {
|
|
nvs_set_u8(nvs, "socket_outlet", socket_outlet);
|
|
needs_commit = true;
|
|
}
|
|
|
|
err = nvs_get_u8(nvs, "rcm", &u8);
|
|
rcm = (err == ESP_OK && u8) && board_config.rcm;
|
|
if (err != ESP_OK) {
|
|
nvs_set_u8(nvs, "rcm", rcm);
|
|
needs_commit = true;
|
|
}
|
|
|
|
err = nvs_get_u8(nvs, "temp_threshold", &u8);
|
|
temp_threshold = (err == ESP_OK && u8 >= 40 && u8 <= 80) ? u8 : 60;
|
|
if (err != ESP_OK) {
|
|
nvs_set_u8(nvs, "temp_threshold", temp_threshold);
|
|
needs_commit = true;
|
|
}
|
|
|
|
// Limites adicionais
|
|
if (nvs_get_u32(nvs, "def_cons_lim", &u32) == ESP_OK) {
|
|
evse_set_consumption_limit(u32);
|
|
}
|
|
|
|
if (nvs_get_u32(nvs, "def_ch_time_lim", &u32) == ESP_OK) {
|
|
evse_set_charging_time_limit(u32);
|
|
}
|
|
|
|
if (nvs_get_u16(nvs, "def_un_pwr_lim", &u16) == ESP_OK) {
|
|
evse_set_under_power_limit(u16);
|
|
}
|
|
|
|
if (needs_commit) {
|
|
nvs_commit(nvs);
|
|
}
|
|
}
|
|
|
|
// Corrente
|
|
uint8_t evse_get_max_charging_current(void) { return max_charging_current; }
|
|
esp_err_t evse_set_max_charging_current(uint8_t value) {
|
|
if (value < MIN_CHARGING_CURRENT_LIMIT || value > MAX_CHARGING_CURRENT_LIMIT)
|
|
return ESP_ERR_INVALID_ARG;
|
|
max_charging_current = value;
|
|
nvs_set_u8(nvs, "max_chrg_curr", value);
|
|
return nvs_commit(nvs);
|
|
}
|
|
|
|
uint8_t grid_get_max_current(void) { return grid_max_current; }
|
|
esp_err_t grid_set_max_current(uint8_t value) {
|
|
if (value < MIN_GRID_CURRENT_LIMIT || value > MAX_GRID_CURRENT_LIMIT)
|
|
return ESP_ERR_INVALID_ARG;
|
|
grid_max_current = value;
|
|
nvs_set_u8(nvs, "grid_max_curr", value);
|
|
return nvs_commit(nvs);
|
|
}
|
|
|
|
uint16_t evse_get_charging_current(void) { return charging_current; }
|
|
esp_err_t evse_set_charging_current(uint16_t value) {
|
|
if (value < (MIN_CHARGING_CURRENT_LIMIT * 10) || value > (max_charging_current * 10))
|
|
return ESP_ERR_INVALID_ARG;
|
|
charging_current = value;
|
|
nvs_set_u16(nvs, "def_chrg_curr", value);
|
|
return nvs_commit(nvs);
|
|
}
|
|
|
|
uint16_t evse_get_default_charging_current(void) {
|
|
uint16_t value;
|
|
nvs_get_u16(nvs, "def_chrg_curr", &value);
|
|
return value;
|
|
}
|
|
esp_err_t evse_set_default_charging_current(uint16_t value) {
|
|
if (value < (MIN_CHARGING_CURRENT_LIMIT * 10) || value > (max_charging_current * 10))
|
|
return ESP_ERR_INVALID_ARG;
|
|
nvs_set_u16(nvs, "def_chrg_curr", value);
|
|
return nvs_commit(nvs);
|
|
}
|
|
|
|
// Socket outlet
|
|
bool evse_get_socket_outlet(void) { return socket_outlet; }
|
|
esp_err_t evse_set_socket_outlet(bool value) {
|
|
if (value && !board_config.proximity) return ESP_ERR_INVALID_ARG;
|
|
socket_outlet = value;
|
|
nvs_set_u8(nvs, "socket_outlet", value);
|
|
return nvs_commit(nvs);
|
|
}
|
|
|
|
// RCM
|
|
bool evse_is_rcm(void) { return rcm; }
|
|
esp_err_t evse_set_rcm(bool value) {
|
|
if (value && !board_config.rcm) return ESP_ERR_INVALID_ARG;
|
|
rcm = value;
|
|
nvs_set_u8(nvs, "rcm", value);
|
|
return nvs_commit(nvs);
|
|
}
|
|
|
|
// Temperatura
|
|
uint8_t evse_get_temp_threshold(void) { return temp_threshold; }
|
|
esp_err_t evse_set_temp_threshold(uint8_t value) {
|
|
if (value < 40 || value > 80) return ESP_ERR_INVALID_ARG;
|
|
temp_threshold = value;
|
|
nvs_set_u8(nvs, "temp_threshold", value);
|
|
return nvs_commit(nvs);
|
|
}
|
|
|
|
// Autenticação
|
|
bool evse_is_require_auth(void) { return require_auth; }
|
|
void evse_set_require_auth(bool value) {
|
|
require_auth = value;
|
|
nvs_set_u8(nvs, "require_auth", value);
|
|
nvs_commit(nvs);
|
|
}
|
|
|
|
// Disponibilidade
|
|
static bool is_available = true;
|
|
|
|
bool evse_config_is_available(void) {
|
|
return is_available;
|
|
}
|
|
|
|
void evse_config_set_available(bool available) {
|
|
is_available = available;
|
|
}
|
|
|
|
// Ativação/desativação
|
|
static bool is_enabled = true;
|
|
|
|
bool evse_config_is_enabled(void) {
|
|
return is_enabled;
|
|
}
|
|
|
|
void evse_config_set_enabled(bool enabled) {
|
|
is_enabled = enabled;
|
|
}
|