Skip to content

Commit 0258345

Browse files
committed
Clear auto release claims when the charging session finishes, this fixes issues with the manual override not clearing when the ar is unplugged
1 parent 7298a3b commit 0258345

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

src/evse_man.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ EvseManager::EvseManager(Stream &port) :
127127
_monitor(OpenEVSE),
128128
_clients(),
129129
_evseStateListener(this),
130+
_sessionCompleteListener(this),
130131
_targetProperties(),
131132
_hasClaims(false),
132133
_sleepForDisable(true),
@@ -233,6 +234,7 @@ bool EvseManager::evaluateClaims(EvseProperties &properties)
233234
void EvseManager::setup()
234235
{
235236
_monitor.onStateChange(&_evseStateListener);
237+
_monitor.onSessionComplete(&_sessionCompleteListener);
236238
}
237239

238240
bool EvseManager::setTargetState(EvseProperties &target)
@@ -331,9 +333,18 @@ unsigned long EvseManager::loop(MicroTasks::WakeReason reason)
331333
}
332334
}
333335

336+
DBUGVAR(_sessionCompleteListener.IsTriggered());
337+
if(_sessionCompleteListener.IsTriggered())
338+
{
339+
// Session complete, clear any auto release claims
340+
releaseAutoReleaseClaims();
341+
}
342+
334343
DBUGVAR(_evaluateClaims);
335344
if(_evaluateClaims)
336345
{
346+
_evaluateClaims = false;
347+
337348
// Work out the state we should try and get in too
338349
_hasClaims = evaluateClaims(_targetProperties);
339350

@@ -349,13 +360,13 @@ unsigned long EvseManager::loop(MicroTasks::WakeReason reason)
349360
DBUGLN("No claims");
350361
}
351362

352-
_evaluateClaims = false;
353363
_evaluateTargetState = true;
354364
}
355365

356366
DBUGVAR(_evaluateTargetState);
357367
if(_evaluateTargetState)
358368
{
369+
_evaluateTargetState = false;
359370

360371
if(!_hasClaims)
361372
{
@@ -364,7 +375,6 @@ unsigned long EvseManager::loop(MicroTasks::WakeReason reason)
364375
_targetProperties.setState(EvseState::Active);
365376
}
366377
setTargetState(_targetProperties);
367-
_evaluateTargetState = false;
368378
}
369379

370380
return MicroTask.Infinate;
@@ -421,6 +431,19 @@ bool EvseManager::release(EvseClient client)
421431
return false;
422432
}
423433

434+
void EvseManager::releaseAutoReleaseClaims()
435+
{
436+
for (size_t i = 0; i < EVSE_MANAGER_MAX_CLIENT_CLAIMS; i++)
437+
{
438+
if(_clients[i].isValid() && _clients[i].isAutoRelease())
439+
{
440+
DBUGF("Release claim from 0x%08x, priority %d, %s", _clients[i].getClient(), _clients[i].getPriority(), _clients[i].getState().toString());
441+
_clients[i].release();
442+
_evaluateClaims = true;
443+
}
444+
}
445+
}
446+
424447
bool EvseManager::clientHasClaim(EvseClient client) {
425448
return findClaim(client);
426449
}

src/evse_man.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,11 @@ class EvseManager : public MicroTasks::Task
189189

190190
bool operator==(EvseClient rhs) const {
191191
return _client == rhs;
192-
};
192+
}
193+
194+
EvseClient getClient() {
195+
return _client;
196+
}
193197

194198
int getPriority() {
195199
return _priority;
@@ -230,6 +234,7 @@ class EvseManager : public MicroTasks::Task
230234
Claim _clients[EVSE_MANAGER_MAX_CLIENT_CLAIMS];
231235

232236
MicroTasks::EventListener _evseStateListener;
237+
MicroTasks::EventListener _sessionCompleteListener;
233238

234239
EvseProperties _targetProperties;
235240
bool _hasClaims;
@@ -243,6 +248,7 @@ class EvseManager : public MicroTasks::Task
243248
void initialiseEvse();
244249
bool findClaim(EvseClient client, Claim **claim = NULL);
245250
bool evaluateClaims(EvseProperties &properties);
251+
void releaseAutoReleaseClaims();
246252

247253
bool setTargetState(EvseProperties &properties);
248254

@@ -384,6 +390,9 @@ class EvseManager : public MicroTasks::Task
384390
void onBootReady(MicroTasks::EventListener *listner) {
385391
_monitor.onBootReady(listner);
386392
}
393+
void onSessionComplete(MicroTasks::EventListener *listner) {
394+
_monitor.onSessionComplete(listner);
395+
}
387396
};
388397

389398
#endif // !_OPENEVSE_EVSE_MAN_H

0 commit comments

Comments
 (0)