X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStation.ts;h=b6aa7b98137a085eb9f4539b14edd8d50984ea59;hb=90aceaf6e0cd749bc5feb4e50c89f2a213c53108;hp=c379ec7bd0ea08e1e68c8e62ac3179add092d406;hpb=08b58f0020986c0ad1b55e562aaf325a47b9d58c;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index c379ec7b..b6aa7b98 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -31,7 +31,6 @@ import { checkConnectorsConfiguration, checkStationInfoConnectorStatus, checkTemplate, - countReservableConnectors, createBootNotificationRequest, createSerialNumber, getAmperageLimitationUnitDivider, @@ -42,10 +41,13 @@ import { getHashId, getIdTagsFile, getMaxNumberOfEvses, + getNumberOfReservableConnectors, getPhaseRotationValue, hasFeatureProfile, + hasReservationExpired, initializeConnectorsMapStatus, propagateSerialNumber, + removeExpiredReservations, stationTemplateToStationInfo, warnTemplateKeysDeprecation, } from './Helpers'; @@ -104,7 +106,7 @@ import { RegistrationStatusEnumType, RequestCommand, type Reservation, - type ReservationFilterKey, + type ReservationKey, ReservationTerminationReason, type Response, StandardParametersKey, @@ -246,8 +248,8 @@ export class ChargingStation { return this.stationInfo.enableStatistics ?? false; } - public getMustAuthorizeAtRemoteStart(): boolean { - return this.stationInfo.mustAuthorizeAtRemoteStart ?? true; + public getRemoteAuthorization(): boolean { + return this.stationInfo.remoteAuthorization ?? true; } public getNumberOfPhases(stationInfo?: ChargingStationInfo): number { @@ -936,7 +938,7 @@ export class ChargingStation { ); } - public getReservationOnConnectorId0Enabled(): boolean { + public getReserveConnectorZeroSupported(): boolean { return convertToBoolean( getConfigurationKey(this, StandardParametersKey.ReserveConnectorZeroSupported)!.value, ); @@ -962,7 +964,7 @@ export class ChargingStation { public async removeReservation( reservation: Reservation, - reason?: ReservationTerminationReason, + reason: ReservationTerminationReason, ): Promise { const connector = this.getConnectorStatus(reservation.connectorId)!; switch (reason) { @@ -983,12 +985,13 @@ export class ChargingStation { delete connector.reservation; break; default: - break; + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + throw new Error(`Unknown reservation termination reason '${reason}'`); } } public getReservationBy( - filterKey: ReservationFilterKey, + filterKey: ReservationKey, value: number | string, ): Reservation | undefined { if (this.hasEvses) { @@ -1008,68 +1011,21 @@ export class ChargingStation { } } - public startReservationExpirationSetInterval(customInterval?: number): void { - const interval = - customInterval ?? Constants.DEFAULT_RESERVATION_EXPIRATION_OBSERVATION_INTERVAL; - if (interval > 0) { - logger.info( - `${this.logPrefix()} Reservation expiration date checks started every ${formatDurationMilliSeconds( - interval, - )}`, - ); - this.reservationExpirationSetInterval = setInterval((): void => { - const currentDate = new Date(); - if (this.hasEvses) { - for (const evseStatus of this.evses.values()) { - for (const connectorStatus of evseStatus.connectors.values()) { - if ( - connectorStatus.reservation && - connectorStatus.reservation.expiryDate < currentDate - ) { - this.removeReservation( - connectorStatus.reservation, - ReservationTerminationReason.EXPIRED, - ).catch(Constants.EMPTY_FUNCTION); - } - } - } - } else { - for (const connectorStatus of this.connectors.values()) { - if ( - connectorStatus.reservation && - connectorStatus.reservation.expiryDate < currentDate - ) { - this.removeReservation( - connectorStatus.reservation, - ReservationTerminationReason.EXPIRED, - ).catch(Constants.EMPTY_FUNCTION); - } - } - } - }, interval); - } - } - - public restartReservationExpiryDateSetInterval(): void { - this.stopReservationExpirationSetInterval(); - this.startReservationExpirationSetInterval(); - } - - public validateIncomingRequestWithReservation(connectorId: number, idTag: string): boolean { - return this.getReservationBy('connectorId', connectorId)?.idTag === idTag; - } - public isConnectorReservable( reservationId: number, idTag?: string, connectorId?: number, ): boolean { - const reservationExists = !isUndefined(this.getReservationBy('reservationId', reservationId)); + const reservation = this.getReservationBy('reservationId', reservationId); + const reservationExists = !isUndefined(reservation) && !hasReservationExpired(reservation!); if (arguments.length === 1) { return !reservationExists; } else if (arguments.length > 1) { + const userReservation = !isUndefined(idTag) + ? this.getReservationBy('idTag', idTag!) + : undefined; const userReservationExists = - !isUndefined(idTag) && isUndefined(this.getReservationBy('idTag', idTag!)) ? false : true; + !isUndefined(userReservation) && !hasReservationExpired(userReservation!); const notConnectorZero = isUndefined(connectorId) ? true : connectorId! > 0; const freeConnectorsAvailable = this.getNumberOfReservableConnectors() > 0; return ( @@ -1079,16 +1035,42 @@ export class ChargingStation { return false; } + private startReservationExpirationSetInterval(customInterval?: number): void { + const interval = + customInterval ?? Constants.DEFAULT_RESERVATION_EXPIRATION_OBSERVATION_INTERVAL; + if (interval > 0) { + logger.info( + `${this.logPrefix()} Reservation expiration date checks started every ${formatDurationMilliSeconds( + interval, + )}`, + ); + this.reservationExpirationSetInterval = setInterval((): void => { + removeExpiredReservations(this).catch(Constants.EMPTY_FUNCTION); + }, interval); + } + } + + private stopReservationExpirationSetInterval(): void { + if (this.reservationExpirationSetInterval) { + clearInterval(this.reservationExpirationSetInterval); + } + } + + // private restartReservationExpiryDateSetInterval(): void { + // this.stopReservationExpirationSetInterval(); + // this.startReservationExpirationSetInterval(); + // } + private getNumberOfReservableConnectors(): number { - let reservableConnectors = 0; + let numberOfReservableConnectors = 0; if (this.hasEvses) { for (const evseStatus of this.evses.values()) { - reservableConnectors += countReservableConnectors(evseStatus.connectors); + numberOfReservableConnectors += getNumberOfReservableConnectors(evseStatus.connectors); } } else { - reservableConnectors = countReservableConnectors(this.connectors); + numberOfReservableConnectors = getNumberOfReservableConnectors(this.connectors); } - return reservableConnectors - this.getNumberOfReservationsOnConnectorZero(); + return numberOfReservableConnectors - this.getNumberOfReservationsOnConnectorZero(); } private getNumberOfReservationsOnConnectorZero(): number { @@ -1130,12 +1112,6 @@ export class ChargingStation { return this.stationInfo.supervisionUrlOcppConfiguration ?? false; } - private stopReservationExpirationSetInterval(): void { - if (this.reservationExpirationSetInterval) { - clearInterval(this.reservationExpirationSetInterval); - } - } - private getSupervisionUrlOcppKey(): string { return this.stationInfo.supervisionUrlOcppKey ?? VendorParametersKey.ConnectionUrl; }