Skip to content

Commit 8f21d9f

Browse files
committed
Fixed a few edge cases
1 parent 10c4c9c commit 8f21d9f

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

src/divert.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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()
266267
bool 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+
}

src/divert.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ class DivertTask : public MicroTasks::Task
9494
return _charge_rate;
9595
}
9696

97+
time_t getMinChargeTimeRemaining();
98+
9799
bool isActive();
98100
};
99101

0 commit comments

Comments
 (0)