Skip to content

Commit 844377f

Browse files
committed
integrate config ConnectionTimeOut
1 parent b0068b7 commit 844377f

2 files changed

Lines changed: 28 additions & 5 deletions

File tree

src/ArduinoOcpp/Tasks/ChargePointStatus/ConnectorStatus.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ ConnectorStatus::ConnectorStatus(OcppModel& context, int connectorId)
3131
sIdTag = declareConfiguration<const char *>(keySession.c_str(), "", CONFIGURATION_FN, false, false, true, false);
3232
transactionId = declareConfiguration<int>(keyTx.c_str(), -1, CONFIGURATION_FN, false, false, true, false);
3333
availability = declareConfiguration<int>(keyAvailability.c_str(), AVAILABILITY_OPERATIVE, CONFIGURATION_FN, false, false, true, false);
34+
connectionTimeOut = declareConfiguration<int>("ConnectionTimeOut", 30, CONFIGURATION_FN, true, true, true, false);
3435
if (!sIdTag || !transactionId || !availability) {
3536
AO_DBG_ERR("Cannot declare sessionIdTag, transactionId or availability");
3637
}
@@ -138,6 +139,19 @@ OcppMessage *ConnectorStatus::loop() {
138139
}
139140
}
140141

142+
if (connectionTimeOutListen) {
143+
if (getTransactionId() >= 0 || !session) {
144+
AO_DBG_DEBUG("Session mngt: release connectionTimeOut");
145+
connectionTimeOutListen = false;
146+
} else {
147+
if (connectionTimeOutTimestamp - ao_tick_ms() >= ((ulong) *connectionTimeOut) * 1000UL) {
148+
AO_DBG_INFO("Session mngt: timeout");
149+
endSession();
150+
connectionTimeOutListen = false;
151+
}
152+
}
153+
}
154+
141155
auto inferencedStatus = inferenceStatus();
142156

143157
if (inferencedStatus != currentStatus) {
@@ -174,6 +188,9 @@ void ConnectorStatus::beginSession(const char *sessionIdTag) {
174188
sIdTag->setValue(idTag, IDTAG_LEN_MAX + 1);
175189
saveState();
176190
session = true;
191+
192+
connectionTimeOutListen = true;
193+
connectionTimeOutTimestamp = ao_tick_ms();
177194
}
178195

179196
void ConnectorStatus::endSession() {
@@ -184,6 +201,8 @@ void ConnectorStatus::endSession() {
184201
saveState();
185202
}
186203
session = false;
204+
205+
connectionTimeOutListen = false;
187206
}
188207

189208
const char *ConnectorStatus::getSessionIdTag() {

src/ArduinoOcpp/Tasks/ChargePointStatus/ConnectorStatus.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,25 @@ class ConnectorStatus {
2424

2525
const int connectorId;
2626

27-
std::shared_ptr<Configuration<int>> availability = nullptr;
27+
std::shared_ptr<Configuration<int>> availability {nullptr};
2828

2929
bool session = false;
3030
char idTag [IDTAG_LEN_MAX + 1] = {'\0'};
31-
std::shared_ptr<Configuration<const char *>> sIdTag = nullptr;
32-
std::shared_ptr<Configuration<int>> transactionId = nullptr;
31+
std::shared_ptr<Configuration<const char *>> sIdTag {nullptr};
32+
std::shared_ptr<Configuration<int>> transactionId {nullptr};
3333
int transactionIdSync = -1;
3434

35-
std::function<bool()> connectorPluggedSampler = nullptr;
35+
std::shared_ptr<Configuration<int>> connectionTimeOut {nullptr}; //in seconds
36+
bool connectionTimeOutListen {false};
37+
ulong connectionTimeOutTimestamp {0}; //in milliseconds
38+
39+
std::function<bool()> connectorPluggedSampler {nullptr};
3640
std::function<bool()> evRequestsEnergySampler {nullptr};
3741
std::function<bool()> connectorEnergizedSampler {nullptr};
3842
std::vector<std::function<const char *()>> connectorErrorCodeSamplers;
3943
const char *getErrorCode();
4044
OcppEvseState currentStatus = OcppEvseState::NOT_SET;
41-
std::function<bool()> onUnlockConnector = nullptr;
45+
std::function<bool()> onUnlockConnector {nullptr};
4246
public:
4347
ConnectorStatus(OcppModel& context, int connectorId);
4448

0 commit comments

Comments
 (0)