@@ -204,7 +204,9 @@ void DivertTask::update_state()
204204 }
205205 DBUGVAR (_available_current);
206206
207- double scale = (_available_current > _smoothed_available_current ? divert_attack_smoothing_factor : divert_decay_smoothing_factor);
207+ double scale = (_available_current > _smoothed_available_current ?
208+ divert_attack_smoothing_factor :
209+ divert_decay_smoothing_factor);
208210 _smoothed_available_current = (_available_current * scale) + (_smoothed_available_current * (1 - scale));
209211 DBUGVAR (_smoothed_available_current);
210212
@@ -216,7 +218,8 @@ void DivertTask::update_state()
216218
217219 DBUGVAR (_charge_rate);
218220
219- EvseState previousState = _evse->getState ();
221+ time_t min_charge_time_remaining = getMinChargeTimeRemaining ();
222+ DBUGVAR (min_charge_time_remaining);
220223
221224 // the smoothed current suffices to ensure a sufficient ratio of PV power
222225 if (_smoothed_available_current >= (_evse->getMinCurrent () * min (1.0 , divert_PV_ratio)))
@@ -227,7 +230,7 @@ void DivertTask::update_state()
227230 }
228231 else
229232 {
230- if (EvseState::Active == _evse->getState (EvseClient_OpenEVSE_Divert) && divertmode_get_time () >= _min_charge_end )
233+ if ( EvseState::Active == _evse->getState (EvseClient_OpenEVSE_Divert) && 0 == min_charge_time_remaining )
231234 {
232235 EvseProperties props (EvseState::Disabled);
233236 _evse->claim (EvseClient_OpenEVSE_Divert, EvseManager_Priority_Default, props);
@@ -250,9 +253,7 @@ void DivertTask::update_state()
250253 event[" available_current" ] = _available_current;
251254 event[" smoothed_available_current" ] = _smoothed_available_current;
252255 event[" pilot" ] = _evse->getChargeCurrent ();
253- event[" min_charge_end" ] = (isActive () && _evse->isCharging () && divertmode_get_time () < _min_charge_end) ?
254- _min_charge_end - divertmode_get_time () :
255- 0 ;
256+ event[" min_charge_end" ] = min_charge_time_remaining;
256257 } // end ecomode
257258
258259 event_send (event);
@@ -266,4 +267,13 @@ void DivertTask::update_state()
266267bool DivertTask::isActive ()
267268{
268269 return EvseState::Active == _state;
269- }
270+ }
271+
272+ time_t DivertTask::getMinChargeTimeRemaining ()
273+ {
274+ return (isActive () &&
275+ _evse->isCharging () &&
276+ divertmode_get_time () < _min_charge_end) ?
277+ _min_charge_end - divertmode_get_time () :
278+ 0 ;
279+ }
0 commit comments