- transactionConnectorId,
- requestPayload.meterStart,
- );
- const reservedOnConnectorZero =
- chargingStation.getConnectorStatus(0)?.status === OCPP16ChargePointStatus.Reserved;
- if (
- chargingStation.getConnectorStatus(transactionConnectorId)?.status ===
- OCPP16ChargePointStatus.Reserved ||
- reservedOnConnectorZero
- ) {
- await chargingStation.removeReservation(
- chargingStation.getReservationBy(
- 'connectorId',
- reservedOnConnectorZero ? 0 : transactionConnectorId,
- )!,
- ReservationTerminationReason.TRANSACTION_STARTED,
- );
+ connectorId,
+ requestPayload.meterStart
+ )
+ if (requestPayload.reservationId != null) {
+ const reservation = chargingStation.getReservationBy(
+ 'reservationId',
+ requestPayload.reservationId
+ )
+ if (reservation != null) {
+ 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(
+ reservation,
+ ReservationTerminationReason.TRANSACTION_STARTED
+ )
+ } else {
+ logger.warn(
+ `${chargingStation.logPrefix()} Reserved transaction ${
+ payload.transactionId
+ } started with unknown reservation ${requestPayload.reservationId}`
+ )
+ }