X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16IncomingRequestService.ts;h=d3ee61fd84623faaff709083ec321c8d03c41197;hb=7b08e7f332d1146fa5990cf29e08e328343819f1;hp=0c8db60cf360547bf17dd83e69c7efe95f9b25f0;hpb=48847bc0d5e594c3e4c0b81c580ac6df48052668;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 0c8db60c..d3ee61fd 100644 --- a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts @@ -420,7 +420,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { if (response.status === GenericStatus.Accepted) { const { connectorId, idTag } = request // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - chargingStation.getConnectorStatus(connectorId)!.transactionRemoteStarted = true + chargingStation.getConnectorStatus(connectorId!)!.transactionRemoteStarted = true chargingStation.ocppRequestService .requestHandler, OCPP16StartTransactionResponse>( chargingStation, @@ -431,7 +431,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { } ) .then(response => { - if (response.status === OCPP16AuthorizationStatus.ACCEPTED) { + if (response.idTagInfo.status === OCPP16AuthorizationStatus.ACCEPTED) { logger.debug( `${chargingStation.logPrefix()} Remote start transaction ACCEPTED on ${ chargingStation.stationInfo?.chargingStationId @@ -1053,41 +1053,46 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_UNKNOWN } const { connectorId } = commandPayload - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - if (!chargingStation.hasConnector(connectorId!)) { - logger.error( - `${chargingStation.logPrefix()} Trying to clear a charging profile(s) to a non existing connector id ${connectorId}` - ) - return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_UNKNOWN - } - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const connectorStatus = chargingStation.getConnectorStatus(connectorId!) - if (connectorId != null && isNotEmptyArray(connectorStatus?.chargingProfiles)) { - connectorStatus.chargingProfiles = [] - logger.debug( - `${chargingStation.logPrefix()} Charging profile(s) cleared on connector id ${connectorId}` - ) - return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_ACCEPTED - } - if (connectorId == null) { + if (connectorId != null) { + if (!chargingStation.hasConnector(connectorId)) { + logger.error( + `${chargingStation.logPrefix()} Trying to clear a charging profile(s) to a non existing connector id ${connectorId}` + ) + return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_UNKNOWN + } + const connectorStatus = chargingStation.getConnectorStatus(connectorId) + if (isNotEmptyArray(connectorStatus?.chargingProfiles)) { + connectorStatus.chargingProfiles = [] + logger.debug( + `${chargingStation.logPrefix()} Charging profile(s) cleared on connector id ${connectorId}` + ) + return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_ACCEPTED + } + } else { let clearedCP = false if (chargingStation.hasEvses) { for (const evseStatus of chargingStation.evses.values()) { for (const status of evseStatus.connectors.values()) { - clearedCP = OCPP16ServiceUtils.clearChargingProfiles( + const clearedConnectorCP = OCPP16ServiceUtils.clearChargingProfiles( chargingStation, commandPayload, status.chargingProfiles ) + if (clearedConnectorCP && !clearedCP) { + clearedCP = true + } } } } else { for (const id of chargingStation.connectors.keys()) { - clearedCP = OCPP16ServiceUtils.clearChargingProfiles( + const clearedConnectorCP = OCPP16ServiceUtils.clearChargingProfiles( chargingStation, commandPayload, chargingStation.getConnectorStatus(id)?.chargingProfiles ) + if (clearedConnectorCP && !clearedCP) { + clearedCP = true + } } } if (clearedCP) { @@ -1160,6 +1165,19 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { chargingStation: ChargingStation, 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 + ) + ) + } const { connectorId: transactionConnectorId, idTag, chargingProfile } = commandPayload if (!chargingStation.hasConnector(transactionConnectorId)) { return this.notifyRemoteStartTransactionRejected( @@ -1286,7 +1304,10 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion commandPayload.retrieveDate = convertToDate(commandPayload.retrieveDate)! const { retrieveDate } = commandPayload - if (chargingStation.stationInfo?.firmwareStatus !== OCPP16FirmwareStatus.Installed) { + if ( + chargingStation.stationInfo?.firmwareStatus != null && + chargingStation.stationInfo.firmwareStatus !== OCPP16FirmwareStatus.Installed + ) { logger.warn( `${chargingStation.logPrefix()} ${moduleName}.handleRequestUpdateFirmware: Cannot simulate firmware update: firmware update is already in progress` ) @@ -1475,7 +1496,10 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { const logConfiguration = Configuration.getConfigurationSection( ConfigurationSection.log ) - const logFiles = readdirSync(resolve(dirname(fileURLToPath(import.meta.url)), '../')) + const logFiles = readdirSync( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + resolve((fileURLToPath(import.meta.url), '../', dirname(logConfiguration.file!))) + ) // eslint-disable-next-line @typescript-eslint/no-non-null-assertion .filter(file => file.endsWith(extname(logConfiguration.file!))) // eslint-disable-next-line @typescript-eslint/no-non-null-assertion