diff --git a/README.md b/README.md index fd160c5..87e700e 100755 --- a/README.md +++ b/README.md @@ -8,9 +8,10 @@ J1772 EVSE firmware for ESP32 based devices. ## Key features - Hardware abstraction for device design - Responsive web-interface - - OTA update - - Integrated energy meter - - [REST](https://github.com/dzurikmiroslav/esp32-evse/wiki/Rest) API +- OTA update +- Integrated energy meter +- Energy detection for relay control +- [REST](https://github.com/dzurikmiroslav/esp32-evse/wiki/Rest) API - MQTT API - [Modbus](https://github.com/dzurikmiroslav/esp32-evse/wiki/Modbus) (RS485, TCP) - [Scripting](https://github.com/dzurikmiroslav/esp32-evse/wiki/Script) diff --git a/components/evse/evse_hardware.c b/components/evse/evse_hardware.c index 71c4f64..73da2d5 100755 --- a/components/evse/evse_hardware.c +++ b/components/evse/evse_hardware.c @@ -3,6 +3,7 @@ #include "ac_relay.h" #include "socket_lock.h" #include "proximity.h" +#include "meter.h" static const char *TAG = "evse_hardware"; @@ -26,8 +27,14 @@ bool evse_hardware_is_vehicle_connected(void) { } bool evse_hardware_is_energy_detected(void) { - // TODO: Substituir com medição real de corrente ou consumo - return true; + if (!meter_is_running()) { + return false; + } + + MeterData data = meter_getData(); + const float THRESHOLD = 0.1f; // Corrente mínima para considerar consumo + return (data.irmsA > THRESHOLD) || (data.irmsB > THRESHOLD) || + (data.irmsC > THRESHOLD); } void evse_hardware_relay_on(void) { @@ -51,5 +58,5 @@ void evse_hardware_unlock(void) { } bool evse_hardware_is_locked(void) { - return socket_lock_get_status() == SOCKED_LOCK_STATUS_IDLE; + return socket_lock_is_locked_state(); } diff --git a/components/peripherals/include/socket_lock.h b/components/peripherals/include/socket_lock.h index f4a9d9c..b6a7e61 100755 --- a/components/peripherals/include/socket_lock.h +++ b/components/peripherals/include/socket_lock.h @@ -90,5 +90,10 @@ void socket_lock_set_locked(bool locked); */ socket_lock_status_t socket_lock_get_status(void); +/** + * @brief Read the current physical lock state using the detection pin. + */ +bool socket_lock_is_locked_state(void); + #endif /* SOCKED_LOCK_H_ */ diff --git a/components/peripherals/src/socket_lock.c b/components/peripherals/src/socket_lock.c index fd84f4f..3d644d5 100755 --- a/components/peripherals/src/socket_lock.c +++ b/components/peripherals/src/socket_lock.c @@ -51,6 +51,11 @@ static bool is_locked(void) return gpio_get_level(board_config.socket_lock_detection_gpio) == detection_high; } +bool socket_lock_is_locked_state(void) +{ + return is_locked(); +} + static void socket_lock_task_func(void* param) { uint32_t notification;