X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16ResponseService.ts;h=a1fa0e43aa535ecbae64596431dbe058ef93966a;hb=86f51b961d470ea555b25bf08664d40705111454;hp=12b10087a5f4fecfbe322e8693bbd160f4efc95b;hpb=d1504492ed96495ddbba08549fccc5201774bce4;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts index 12b10087..a1fa0e43 100644 --- a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts @@ -10,11 +10,11 @@ import { type ChargingStation, addConfigurationKey, getConfigurationKey, + hasReservationExpired, resetConnectorStatus, } from '../../../charging-station'; import { OCPPError } from '../../../exception'; import { - type ChangeAvailabilityResponse, type ChangeConfigurationResponse, type ClearChargingProfileResponse, ErrorType, @@ -27,6 +27,7 @@ import { type OCPP16AuthorizeRequest, type OCPP16AuthorizeResponse, type OCPP16BootNotificationResponse, + type OCPP16ChangeAvailabilityResponse, OCPP16ChargePointStatus, type OCPP16DataTransferResponse, type OCPP16DiagnosticsStatusNotificationResponse, @@ -209,7 +210,7 @@ export class OCPP16ResponseService extends OCPPResponseService { ], [ OCPP16IncomingRequestCommand.CHANGE_AVAILABILITY, - OCPP16ServiceUtils.parseJsonSchemaFile( + OCPP16ServiceUtils.parseJsonSchemaFile( 'assets/json-schemas/ocpp/1.6/ChangeAvailabilityResponse.json', moduleName, 'constructor', @@ -529,7 +530,7 @@ export class OCPP16ResponseService extends OCPPResponseService { chargingStation.getConnectorStatus(transactionConnectorId)?.transactionRemoteStarted === true && chargingStation.getAuthorizeRemoteTxRequests() === true && - chargingStation.getMustAuthorizeAtRemoteStart() === true && + chargingStation.getRemoteAuthorization() === true && chargingStation.getConnectorStatus(transactionConnectorId)?.idTagLocalAuthorized === false && chargingStation.getConnectorStatus(transactionConnectorId)?.idTagAuthorized === false ) { @@ -639,18 +640,31 @@ export class OCPP16ResponseService extends OCPPResponseService { transactionConnectorId, requestPayload.meterStart, ); - const reservedOnConnectorZero = - chargingStation.getConnectorStatus(0)?.status === OCPP16ChargePointStatus.Reserved; - if ( - chargingStation.getConnectorStatus(transactionConnectorId)?.status === - OCPP16ChargePointStatus.Reserved || - reservedOnConnectorZero - ) { + if (requestPayload.reservationId) { + const reservation = chargingStation.getReservationBy( + 'reservationId', + requestPayload.reservationId, + )!; + if (reservation.idTag !== requestPayload.idTag) { + logger.warn( + `${chargingStation.logPrefix()} Reserved transaction ${ + payload.transactionId + } started with a different idTag ${requestPayload.idTag} than the reservation one ${ + reservation.idTag + }`, + ); + } + if (hasReservationExpired(reservation)) { + logger.warn( + `${chargingStation.logPrefix()} Reserved transaction ${ + payload.transactionId + } started with expired reservation ${ + requestPayload.reservationId + } (expiry date: ${reservation.expiryDate.toISOString()}))`, + ); + } await chargingStation.removeReservation( - chargingStation.getReservationBy( - 'connectorId', - reservedOnConnectorZero ? 0 : transactionConnectorId, - )!, + reservation, ReservationTerminationReason.TRANSACTION_STARTED, ); } @@ -690,8 +704,19 @@ export class OCPP16ResponseService extends OCPPResponseService { ); } else { logger.warn( - `${chargingStation.logPrefix()} Starting transaction with id ${payload.transactionId.toString()} REJECTED with status '${payload - .idTagInfo?.status}', idTag '${requestPayload.idTag}'`, + `${chargingStation.logPrefix()} Starting transaction with id ${payload.transactionId.toString()} REJECTED on ${ + chargingStation.stationInfo.chargingStationId + }#${transactionConnectorId.toString()} with status '${payload.idTagInfo?.status}', idTag '${ + requestPayload.idTag + }'${ + OCPP16ServiceUtils.hasReservation( + chargingStation, + transactionConnectorId, + requestPayload.idTag, + ) + ? `, reservationId '${requestPayload.reservationId}'` + : '' + }`, ); await this.resetConnectorOnStartTransactionError(chargingStation, transactionConnectorId); } @@ -703,7 +728,6 @@ export class OCPP16ResponseService extends OCPPResponseService { ): Promise { resetConnectorStatus(chargingStation.getConnectorStatus(connectorId)!); chargingStation.stopMeterValues(connectorId); - parentPort?.postMessage(buildUpdatedMessage(chargingStation)); if ( chargingStation.getConnectorStatus(connectorId)?.status !== OCPP16ChargePointStatus.Available ) { @@ -713,6 +737,7 @@ export class OCPP16ResponseService extends OCPPResponseService { OCPP16ChargePointStatus.Available, ); } + parentPort?.postMessage(buildUpdatedMessage(chargingStation)); } private async handleResponseStopTransaction(