convertToDate,
convertToInt,
formatDurationMilliSeconds,
+ handleIncomingRequestError,
isAsyncFunction,
isNotEmptyArray,
isNotEmptyString,
// Throw exception
throw new OCPPError(
ErrorType.NOT_IMPLEMENTED,
- `'${commandName}' is not implemented to handle request PDU ${JSON.stringify(
+ `${commandName} is not implemented to handle request PDU ${JSON.stringify(
commandPayload,
undefined,
2
commandPayload: RemoteStartTransactionRequest
): Promise<GenericResponse> {
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)) {
})
ftpClient?.close()
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<GetDiagnosticsResponse>(
+ return handleIncomingRequestError<GetDiagnosticsResponse>(
chargingStation,
OCPP16IncomingRequestCommand.GET_DIAGNOSTICS,
error as Error,
return OCPP16Constants.OCPP_DATA_TRANSFER_RESPONSE_UNKNOWN_VENDOR_ID
} catch (error) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<OCPP16DataTransferResponse>(
+ return handleIncomingRequestError<OCPP16DataTransferResponse>(
chargingStation,
OCPP16IncomingRequestCommand.DATA_TRANSFER,
error as Error,
)
return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
}
+ if (connectorId > 0 && !chargingStation.isConnectorAvailable(connectorId)) {
+ return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
+ }
+ if (connectorId === 0 && !chargingStation.getReserveConnectorZeroSupported()) {
+ return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
+ }
+ if (!(await OCPP16ServiceUtils.isIdTagAuthorized(chargingStation, connectorId, idTag))) {
+ return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
+ }
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ const connectorStatus = chargingStation.getConnectorStatus(connectorId)!
+ resetAuthorizeConnectorStatus(connectorStatus)
let response: OCPP16ReserveNowResponse
try {
- if (connectorId > 0 && !chargingStation.isConnectorAvailable(connectorId)) {
- return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
- }
- if (connectorId === 0 && !chargingStation.getReserveConnectorZeroSupported()) {
- return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
- }
- if (!(await OCPP16ServiceUtils.isIdTagAuthorized(chargingStation, connectorId, idTag))) {
- return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
- }
await removeExpiredReservations(chargingStation)
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const connectorStatus = chargingStation.getConnectorStatus(connectorId)!
- resetAuthorizeConnectorStatus(connectorStatus)
switch (connectorStatus.status) {
case OCPP16ChargePointStatus.Faulted:
response = OCPP16Constants.OCPP_RESERVATION_RESPONSE_FAULTED
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
chargingStation.getConnectorStatus(connectorId)!.status = OCPP16ChargePointStatus.Available
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<OCPP16ReserveNowResponse>(
+ return handleIncomingRequestError<OCPP16ReserveNowResponse>(
chargingStation,
OCPP16IncomingRequestCommand.RESERVE_NOW,
error as Error,
return OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_ACCEPTED
} catch (error) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<GenericResponse>(
+ return handleIncomingRequestError<GenericResponse>(
chargingStation,
OCPP16IncomingRequestCommand.CANCEL_RESERVATION,
error as Error,