@@ -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
179196void ConnectorStatus::endSession () {
@@ -184,6 +201,8 @@ void ConnectorStatus::endSession() {
184201 saveState ();
185202 }
186203 session = false ;
204+
205+ connectionTimeOutListen = false ;
187206}
188207
189208const char *ConnectorStatus::getSessionIdTag () {
0 commit comments