diff --git a/src/current_shaper.cpp b/src/current_shaper.cpp index df4c67a3..c1c5a3b0 100644 --- a/src/current_shaper.cpp +++ b/src/current_shaper.cpp @@ -30,6 +30,7 @@ unsigned long CurrentShaperTask::loop(MicroTasks::WakeReason reason) { props.setState(EvseState::None); } _changed = false; + _updated = true; _timer = millis(); evse.claim(EvseClient_OpenEVSE_Shaper,EvseManager_Priority_Safety, props); StaticJsonDocument<128> event; @@ -37,12 +38,13 @@ unsigned long CurrentShaperTask::loop(MicroTasks::WakeReason reason) { event["shaper_live_pwr"] = _live_pwr; event["shaper_max_pwr"] = _max_pwr; event["shaper_cur"] = _max_cur; - event["shaper_updated"] = true; + event["shaper_updated"] = _updated; event_send(event); } if (millis() - _timer > EVSE_SHAPER_FAILSAFE_TIME) { //available power has not been updated since EVSE_SHAPER_FAILSAFE_TIME, pause charge DBUGF("shaper_live_pwr has not been updated in time, pausing charge"); + _updated = false; props.setState(EvseState::Disabled); evse.claim(EvseClient_OpenEVSE_Shaper,EvseManager_Priority_Limit, props); StaticJsonDocument<128> event; @@ -50,7 +52,7 @@ unsigned long CurrentShaperTask::loop(MicroTasks::WakeReason reason) { event["shaper_live_pwr"] = _live_pwr; event["shaper_max_pwr"] = _max_pwr; event["shaper_cur"] = _max_cur; - event["shaper_updated"] = false; + event["shaper_updated"] = _updated; event_send(event); } } @@ -71,7 +73,8 @@ void CurrentShaperTask::begin(EvseManager &evse) { this -> _evse = &evse; this -> _max_pwr = current_shaper_max_pwr; this -> _live_pwr = 0; - this -> _max_cur = 0; + this -> _max_cur = 0; + this -> _updated = false; MicroTask.startTask(this); StaticJsonDocument<128> event; event["shaper"] = 1; @@ -112,6 +115,7 @@ void CurrentShaperTask::setState(bool state) { } void CurrentShaperTask::shapeCurrent() { + _updated = true; _max_cur = round(((_max_pwr - _live_pwr) / evse.getVoltage()) + (evse.getAmps())); _changed = true; } @@ -132,4 +136,8 @@ bool CurrentShaperTask::getState() { bool CurrentShaperTask::isActive() { return _evse->clientHasClaim(EvseClient_OpenEVSE_Shaper); +} + +bool CurrentShaperTask::isUpdated() { + return _updated; } \ No newline at end of file diff --git a/src/current_shaper.h b/src/current_shaper.h index 4f006cb5..3e3bd115 100644 --- a/src/current_shaper.h +++ b/src/current_shaper.h @@ -29,6 +29,7 @@ class CurrentShaperTask: public MicroTasks::Task uint8_t _chg_cur; // calculated charge current to claim uint8_t _max_cur; // shaper calculated max current uint32_t _timer; + bool _updated; protected: void setup(); @@ -49,6 +50,7 @@ class CurrentShaperTask: public MicroTasks::Task int getLivePwr(); uint8_t getMaxCur(); bool isActive(); + bool isUpdated(); void notifyConfigChanged(bool enabled, uint32_t max_pwr); }; diff --git a/src/web_server.cpp b/src/web_server.cpp index ef86cc7d..c359477f 100644 --- a/src/web_server.cpp +++ b/src/web_server.cpp @@ -246,7 +246,7 @@ void buildStatus(DynamicJsonDocument &doc) { doc["shaper_live_pwr"] = shaper.getLivePwr(); // doc["shaper_cur"] = shaper.getChgCur(); doc["shaper_cur"] = shaper.getMaxCur(); - + doc["shaper_updated"] = shaper.isUpdated(); doc["service_level"] = static_cast(evse.getActualServiceLevel()); doc["ota_update"] = (int)Update.isRunning();