X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16IncomingRequestService.ts;h=61c74a600e30604542e53a12b1cf08498570b308;hb=8e3437b114ccc1cc68d8fbbc4912e4272cc6618c;hp=0215414862ae253d0a4bfe7455d04f218063ef27;hpb=ef9e3b334b977bd79231adb7e59c3875313d32dc;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts index 02154148..61c74a60 100644 --- a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts @@ -464,14 +464,12 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { if (chargingStation.hasConnector(connectorId) === false) { logger.error( `${chargingStation.logPrefix()} Trying to unlock a non existing - connector id ${connectorId.toString()}`, + connector id ${connectorId}`, ); return OCPP16Constants.OCPP_RESPONSE_UNLOCK_NOT_SUPPORTED; } if (connectorId === 0) { - logger.error( - `${chargingStation.logPrefix()} Trying to unlock connector id ${connectorId.toString()}`, - ); + logger.error(`${chargingStation.logPrefix()} Trying to unlock connector id ${connectorId}`); return OCPP16Constants.OCPP_RESPONSE_UNLOCK_NOT_SUPPORTED; } if (chargingStation.getConnectorStatus(connectorId)?.transactionStarted === true) { @@ -626,8 +624,19 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { } if ( csChargingProfiles.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE && - (connectorId === 0 || - chargingStation.getConnectorStatus(connectorId)?.transactionStarted === false) + connectorId === 0 + ) { + logger.error( + `${chargingStation.logPrefix()} Trying to set transaction charging profile(s) + on connector ${connectorId}`, + ); + return OCPP16Constants.OCPP_SET_CHARGING_PROFILE_RESPONSE_REJECTED; + } + const connectorStatus = chargingStation.getConnectorStatus(connectorId); + if ( + csChargingProfiles.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE && + connectorId > 0 && + connectorStatus?.transactionStarted === false ) { logger.error( `${chargingStation.logPrefix()} Trying to set transaction charging profile(s) @@ -635,6 +644,20 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { ); return OCPP16Constants.OCPP_SET_CHARGING_PROFILE_RESPONSE_REJECTED; } + if ( + csChargingProfiles.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE && + connectorId > 0 && + connectorStatus?.transactionStarted === true && + csChargingProfiles.transactionId !== connectorStatus?.transactionId + ) { + logger.error( + `${chargingStation.logPrefix()} Trying to set transaction charging profile(s) + on connector ${connectorId} with a different transaction id ${ + csChargingProfiles.transactionId + } than the started transaction id ${connectorStatus?.transactionId}`, + ); + return OCPP16Constants.OCPP_SET_CHARGING_PROFILE_RESPONSE_REJECTED; + } OCPP16ServiceUtils.setChargingProfile(chargingStation, connectorId, csChargingProfiles); logger.debug( `${chargingStation.logPrefix()} Charging profile(s) set on connector id ${connectorId}: %j`, @@ -795,11 +818,9 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { ); return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_UNKNOWN; } - if ( - !isNullOrUndefined(connectorId) && - isNotEmptyArray(chargingStation.getConnectorStatus(connectorId!)?.chargingProfiles) - ) { - chargingStation.getConnectorStatus(connectorId!)!.chargingProfiles = []; + const connectorStatus = chargingStation.getConnectorStatus(connectorId!); + if (!isNullOrUndefined(connectorId) && isNotEmptyArray(connectorStatus?.chargingProfiles)) { + connectorStatus!.chargingProfiles = []; logger.debug( `${chargingStation.logPrefix()} Charging profile(s) cleared on connector id ${connectorId}`, ); @@ -809,11 +830,11 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { let clearedCP = false; if (chargingStation.hasEvses) { for (const evseStatus of chargingStation.evses.values()) { - for (const connectorStatus of evseStatus.connectors.values()) { + for (const status of evseStatus.connectors.values()) { clearedCP = OCPP16ServiceUtils.clearChargingProfiles( chargingStation, commandPayload, - connectorStatus.chargingProfiles, + status.chargingProfiles, ); } } @@ -841,7 +862,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { if (chargingStation.hasConnector(connectorId) === false) { logger.error( `${chargingStation.logPrefix()} Trying to change the availability of a - non existing connector id ${connectorId.toString()}`, + non existing connector id ${connectorId}`, ); return OCPP16Constants.OCPP_AVAILABILITY_RESPONSE_REJECTED; } @@ -915,7 +936,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { const remoteStartTransactionLogMsg = ` ${chargingStation.logPrefix()} Transaction remotely STARTED on ${ chargingStation.stationInfo.chargingStationId - }#${transactionConnectorId.toString()} for idTag '${idTag}'`; + }#${transactionConnectorId} for idTag '${idTag}'`; await OCPP16ServiceUtils.sendAndSetConnectorStatus( chargingStation, transactionConnectorId, @@ -929,11 +950,13 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { ) { // Authorization successful, start transaction if ( - this.setRemoteStartTransactionChargingProfile( - chargingStation, - transactionConnectorId, - chargingProfile!, - ) === true + (chargingProfile && + this.setRemoteStartTransactionChargingProfile( + chargingStation, + transactionConnectorId, + chargingProfile, + ) === true) ?? + !chargingProfile ) { connectorStatus.transactionRemoteStarted = true; if ( @@ -964,11 +987,14 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { } // No authorization check required, start transaction if ( - this.setRemoteStartTransactionChargingProfile( - chargingStation, - transactionConnectorId, - chargingProfile!, - ) === true + (chargingProfile && + this.setRemoteStartTransactionChargingProfile( + chargingStation, + transactionConnectorId, + chargingProfile, + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + ) === true) || + !chargingProfile ) { connectorStatus.transactionRemoteStarted = true; if ( @@ -1003,9 +1029,8 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { connectorId: number, idTag: string, ): Promise { - if ( - chargingStation.getConnectorStatus(connectorId)?.status !== OCPP16ChargePointStatus.Available - ) { + const connectorStatus = chargingStation.getConnectorStatus(connectorId); + if (connectorStatus?.status !== OCPP16ChargePointStatus.Available) { await OCPP16ServiceUtils.sendAndSetConnectorStatus( chargingStation, connectorId, @@ -1014,9 +1039,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { } logger.warn( `${chargingStation.logPrefix()} Remote starting transaction REJECTED on connector id - ${connectorId.toString()}, idTag '${idTag}', availability '${chargingStation.getConnectorStatus( - connectorId, - )?.availability}', status '${chargingStation.getConnectorStatus(connectorId)?.status}'`, + ${connectorId}, idTag '${idTag}', availability '${connectorStatus?.availability}', status '${connectorStatus?.status}'`, ); return OCPP16Constants.OCPP_RESPONSE_REJECTED; } @@ -1026,10 +1049,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { connectorId: number, chargingProfile: OCPP16ChargingProfile, ): boolean { - if ( - chargingProfile && - chargingProfile.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE - ) { + if (chargingProfile?.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE) { OCPP16ServiceUtils.setChargingProfile(chargingStation, connectorId, chargingProfile); logger.debug( `${chargingStation.logPrefix()} Charging profile(s) set at remote start transaction @@ -1037,18 +1057,13 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { chargingProfile, ); return true; - } else if ( - chargingProfile && - chargingProfile.chargingProfilePurpose !== OCPP16ChargingProfilePurposeType.TX_PROFILE - ) { - logger.warn( - `${chargingStation.logPrefix()} Not allowed to set ${ - chargingProfile.chargingProfilePurpose - } charging profile(s) at remote start transaction`, - ); - return false; } - return true; + logger.warn( + `${chargingStation.logPrefix()} Not allowed to set ${ + chargingProfile.chargingProfilePurpose + } charging profile(s) at remote start transaction`, + ); + return false; } private async handleRequestRemoteStopTransaction( @@ -1078,7 +1093,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { } logger.warn( `${chargingStation.logPrefix()} Trying to remote stop a non existing transaction with id - ${transactionId.toString()}`, + ${transactionId}`, ); return OCPP16Constants.OCPP_RESPONSE_REJECTED; } @@ -1362,16 +1377,16 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { } throw new OCPPError( ErrorType.GENERIC_ERROR, - `Diagnostics transfer failed with error code ${accessResponse.code.toString()}${ - uploadResponse?.code && `|${uploadResponse?.code.toString()}` + `Diagnostics transfer failed with error code ${accessResponse.code}${ + uploadResponse?.code && `|${uploadResponse?.code}` }`, OCPP16IncomingRequestCommand.GET_DIAGNOSTICS, ); } throw new OCPPError( ErrorType.GENERIC_ERROR, - `Diagnostics transfer failed with error code ${accessResponse.code.toString()}${ - uploadResponse?.code && `|${uploadResponse?.code.toString()}` + `Diagnostics transfer failed with error code ${accessResponse.code}${ + uploadResponse?.code && `|${uploadResponse?.code}` }`, OCPP16IncomingRequestCommand.GET_DIAGNOSTICS, );