X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStationUtils.ts;h=ab781fae3cb3382022abb8f61ed7b55f021e9ef0;hb=d972af76b6d7d1d2a099d254eacf45245b5316ac;hp=a329eb53c9383cefce2a7aca2c2c788c29ba88ce;hpb=e1893686e24bb1abad28b19da833576b1d0e49db;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStationUtils.ts b/src/charging-station/ChargingStationUtils.ts index a329eb53..ab781fae 100644 --- a/src/charging-station/ChargingStationUtils.ts +++ b/src/charging-station/ChargingStationUtils.ts @@ -1,5 +1,6 @@ -import crypto from 'node:crypto'; -import path from 'node:path'; +import { createHash, randomBytes } from 'node:crypto'; +import type { EventEmitter } from 'node:events'; +import { basename, dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import chalk from 'chalk'; @@ -18,6 +19,7 @@ import { type ChargingSchedulePeriod, type ChargingStationInfo, type ChargingStationTemplate, + ChargingStationWorkerMessageEvents, ConnectorPhaseRotation, type ConnectorStatus, ConnectorStatusEnum, @@ -53,6 +55,19 @@ export class ChargingStationUtils { )}${idSuffix}`; } + public static countReservableConnectors(connectors: Map) { + let reservableConnectors = 0; + for (const [connectorId, connectorStatus] of connectors) { + if (connectorId === 0) { + continue; + } + if (connectorStatus.status === ConnectorStatusEnum.Available) { + ++reservableConnectors; + } + } + return reservableConnectors; + } + public static getHashId(index: number, stationTemplate: ChargingStationTemplate): string { const chargingStationInfo = { chargePointModel: stationTemplate.chargePointModel, @@ -70,8 +85,7 @@ export class ChargingStationUtils { meterType: stationTemplate.meterType, }), }; - return crypto - .createHash(Constants.DEFAULT_HASH_ALGORITHM) + return createHash(Constants.DEFAULT_HASH_ALGORITHM) .update( `${JSON.stringify(chargingStationInfo)}${ChargingStationUtils.getChargingStationId( index, @@ -161,18 +175,10 @@ export class ChargingStationUtils { throw new BaseError(errorMsg); } if (Utils.isEmptyObject(stationTemplate.AutomaticTransactionGenerator)) { - stationTemplate.AutomaticTransactionGenerator = { - enable: false, - minDuration: 60, - maxDuration: 120, - minDelayBetweenTwoTransactions: 15, - maxDelayBetweenTwoTransactions: 30, - probabilityOfStart: 1, - stopAfterHours: 0.3, - stopOnConnectionFailure: true, - }; + stationTemplate.AutomaticTransactionGenerator = Constants.DEFAULT_ATG_CONFIGURATION; logger.warn( - `${logPrefix} Empty automatic transaction generator configuration from template file ${templateFile}, set to default values` + `${logPrefix} Empty automatic transaction generator configuration from template file ${templateFile}, set to default: %j`, + Constants.DEFAULT_ATG_CONFIGURATION ); } if ( @@ -539,14 +545,29 @@ export class ChargingStationUtils { public static getIdTagsFile(stationInfo: ChargingStationInfo): string | undefined { return ( stationInfo.idTagsFile && - path.join( - path.dirname(fileURLToPath(import.meta.url)), - 'assets', - path.basename(stationInfo.idTagsFile) - ) + join(dirname(fileURLToPath(import.meta.url)), 'assets', basename(stationInfo.idTagsFile)) ); } + public static waitForChargingStationEvents = async ( + emitter: EventEmitter, + event: ChargingStationWorkerMessageEvents, + eventsToWait: number + ): Promise => { + return new Promise((resolve) => { + let events = 0; + if (eventsToWait === 0) { + resolve(events); + } + emitter.on(event, () => { + ++events; + if (events === eventsToWait) { + resolve(events); + } + }); + }); + }; + private static getConfiguredNumberOfConnectors(stationTemplate: ChargingStationTemplate): number { let configuredMaxConnectors: number; if (Utils.isNotEmptyArray(stationTemplate.numberOfConnectors) === true) { @@ -752,9 +773,7 @@ export class ChargingStationUtils { randomBytesLength?: number; upperCase?: boolean; }): string { - const randomSerialNumberSuffix = crypto - .randomBytes(params?.randomBytesLength ?? 16) - .toString('hex'); + const randomSerialNumberSuffix = randomBytes(params?.randomBytesLength ?? 16).toString('hex'); if (params?.upperCase) { return randomSerialNumberSuffix.toUpperCase(); }