From: Jérôme Benoit Date: Thu, 6 Jun 2024 21:42:27 +0000 (+0200) Subject: fix: avoid endless loop at remote start transaction X-Git-Tag: v1.3.4~2 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=d0b71736d6fced71a50c67e1f1e7ca842068e43e;p=e-mobility-charging-stations-simulator.git fix: avoid endless loop at remote start transaction Signed-off-by: Jérôme Benoit --- diff --git a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts index fe252210..017de863 100644 --- a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts @@ -1162,17 +1162,27 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { commandPayload: RemoteStartTransactionRequest ): Promise { if (commandPayload.connectorId == null) { - do { - commandPayload.connectorId = randomInt(1, chargingStation.getNumberOfConnectors()) - } while ( - chargingStation.getConnectorStatus(commandPayload.connectorId)?.transactionStarted === - true && - OCPP16ServiceUtils.hasReservation( - chargingStation, - commandPayload.connectorId, - commandPayload.idTag + for ( + let connectorId = 1; + connectorId <= chargingStation.getNumberOfConnectors(); + connectorId++ + ) { + if ( + chargingStation.getConnectorStatus(connectorId)?.transactionStarted === false && + !OCPP16ServiceUtils.hasReservation(chargingStation, connectorId, commandPayload.idTag) + ) { + commandPayload.connectorId = connectorId + break + } + } + if (commandPayload.connectorId == null) { + logger.debug( + `${chargingStation.logPrefix()} Remote start transaction REJECTED on ${ + chargingStation.stationInfo?.chargingStationId + }, idTag '${commandPayload.idTag}': no available connector found` ) - ) + return OCPP16Constants.OCPP_RESPONSE_REJECTED + } } const { connectorId: transactionConnectorId, idTag, chargingProfile } = commandPayload if (!chargingStation.hasConnector(transactionConnectorId)) {