X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStation.ts;h=7eef4100355d0113f23848f72bac8c26c9b38acc;hb=0557254bd178be09468f48b28c570efa4ada83b2;hp=3be6dfd931712306226100fcea9d500b6e93c5f4;hpb=6913d568424300ebfa5765ca55006a4ce0525ac2;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index 3be6dfd9..7eef4100 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -25,7 +25,7 @@ import { deleteConfigurationKey, getConfigurationKey, setConfigurationKeyValue, -} from './ChargingStationConfigurationUtils'; +} from './ConfigurationKeyUtils'; import { buildConnectorsMap, checkConnectorsConfiguration, @@ -43,11 +43,12 @@ import { getIdTagsFile, getMaxNumberOfEvses, getPhaseRotationValue, + hasFeatureProfile, initializeConnectorsMapStatus, propagateSerialNumber, stationTemplateToStationInfo, warnTemplateKeysDeprecation, -} from './ChargingStationUtils'; +} from './Helpers'; import { IdTagsCache } from './IdTagsCache'; import { OCPP16IncomingRequestService, @@ -103,7 +104,7 @@ import { RegistrationStatusEnumType, RequestCommand, type Reservation, - ReservationFilterKey, + type ReservationFilterKey, ReservationTerminationReason, type Response, StandardParametersKey, @@ -668,7 +669,7 @@ export class ChargingStation { if (this.getEnableStatistics() === true) { this.performanceStatistics?.start(); } - if (this.hasFeatureProfile(SupportedFeatureProfiles.Reservation)) { + if (hasFeatureProfile(this, SupportedFeatureProfiles.Reservation)) { this.startReservationExpirationSetInterval(); } this.openWSConnection(); @@ -731,7 +732,7 @@ export class ChargingStation { if (this.getEnableStatistics() === true) { this.performanceStatistics?.stop(); } - if (this.hasFeatureProfile(SupportedFeatureProfiles.Reservation)) { + if (hasFeatureProfile(this, SupportedFeatureProfiles.Reservation)) { this.stopReservationExpirationSetInterval(); } this.sharedLRUCache.deleteChargingStationConfiguration(this.configurationFileHash); @@ -763,13 +764,6 @@ export class ChargingStation { } } - public hasFeatureProfile(featureProfile: SupportedFeatureProfiles): boolean | undefined { - return getConfigurationKey( - this, - StandardParametersKey.SupportedFeatureProfiles, - )?.value?.includes(featureProfile); - } - public bufferMessage(message: string): void { this.messageBuffer.add(message); } @@ -942,15 +936,15 @@ export class ChargingStation { ); } - public getReservationOnConnectorId0Enabled(): boolean { + public getReserveConnectorZeroSupported(): boolean { return convertToBoolean( getConfigurationKey(this, StandardParametersKey.ReserveConnectorZeroSupported)!.value, ); } public async addReservation(reservation: Reservation): Promise { - const [exists, reservationFound] = this.doesReservationExists(reservation); - if (exists) { + const reservationFound = this.getReservationBy('reservationId', reservation.reservationId); + if (!isUndefined(reservationFound)) { await this.removeReservation( reservationFound!, ReservationTerminationReason.REPLACE_EXISTING, @@ -973,8 +967,6 @@ export class ChargingStation { const connector = this.getConnectorStatus(reservation.connectorId)!; switch (reason) { case ReservationTerminationReason.CONNECTOR_STATE_CHANGED: - delete connector.reservation; - break; case ReservationTerminationReason.TRANSACTION_STARTED: delete connector.reservation; break; @@ -1002,30 +994,20 @@ export class ChargingStation { if (this.hasEvses) { for (const evseStatus of this.evses.values()) { for (const connectorStatus of evseStatus.connectors.values()) { - if (connectorStatus?.reservation?.[filterKey as keyof Reservation] === value) { + if (connectorStatus?.reservation?.[filterKey] === value) { return connectorStatus.reservation; } } } } else { for (const connectorStatus of this.connectors.values()) { - if (connectorStatus?.reservation?.[filterKey as keyof Reservation] === value) { + if (connectorStatus?.reservation?.[filterKey] === value) { return connectorStatus.reservation; } } } } - public doesReservationExists( - reservation: Partial, - ): [boolean, Reservation | undefined] { - const foundReservation = this.getReservationBy( - ReservationFilterKey.RESERVATION_ID, - reservation.id!, - ); - return isUndefined(foundReservation) ? [false, undefined] : [true, foundReservation]; - } - public startReservationExpirationSetInterval(customInterval?: number): void { const interval = customInterval ?? Constants.DEFAULT_RESERVATION_EXPIRATION_OBSERVATION_INTERVAL; @@ -1073,27 +1055,24 @@ export class ChargingStation { this.startReservationExpirationSetInterval(); } - public validateIncomingRequestWithReservation(connectorId: number, idTag: string): boolean { - return this.getReservationBy(ReservationFilterKey.CONNECTOR_ID, connectorId)?.idTag === idTag; - } - public isConnectorReservable( reservationId: number, idTag?: string, connectorId?: number, ): boolean { - const [alreadyExists] = this.doesReservationExists({ id: reservationId }); - if (alreadyExists) { - return alreadyExists; + const reservationExists = !isUndefined(this.getReservationBy('reservationId', reservationId)); + if (arguments.length === 1) { + return !reservationExists; + } else if (arguments.length > 1) { + const userReservationExists = + !isUndefined(idTag) && isUndefined(this.getReservationBy('idTag', idTag!)) ? false : true; + const notConnectorZero = isUndefined(connectorId) ? true : connectorId! > 0; + const freeConnectorsAvailable = this.getNumberOfReservableConnectors() > 0; + return ( + !reservationExists && !userReservationExists && notConnectorZero && freeConnectorsAvailable + ); } - const userReservedAlready = isUndefined( - this.getReservationBy(ReservationFilterKey.ID_TAG, idTag!), - ) - ? false - : true; - const notConnectorZero = isUndefined(connectorId) ? true : connectorId! > 0; - const freeConnectorsAvailable = this.getNumberOfReservableConnectors() > 0; - return !alreadyExists && !userReservedAlready && notConnectorZero && freeConnectorsAvailable; + return false; } private getNumberOfReservableConnectors(): number {