X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStationUtils.ts;h=517a3c9a5e0f40c4e56d9f7ea84cafaf13279793;hb=cda5d0fb59316951530288baebfaa181261295cb;hp=4564f389674f45e4dba051e2bf0432e8db11dafa;hpb=c3b8313087c651563b66173c2d6dd41034d194f9;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStationUtils.ts b/src/charging-station/ChargingStationUtils.ts index 4564f389..517a3c9a 100644 --- a/src/charging-station/ChargingStationUtils.ts +++ b/src/charging-station/ChargingStationUtils.ts @@ -18,6 +18,7 @@ import { type ChargingSchedulePeriod, type ChargingStationInfo, type ChargingStationTemplate, + ConnectorPhaseRotation, type ConnectorStatus, ConnectorStatusEnum, CurrentType, @@ -96,6 +97,23 @@ export class ChargingStationUtils { return true; } + public static getPhaseRotationValue( + connectorId: number, + numberOfPhases: number + ): string | undefined { + // AC/DC + if (connectorId === 0 && numberOfPhases === 0) { + return `${connectorId}.${ConnectorPhaseRotation.RST}`; + } else if (connectorId > 0 && numberOfPhases === 0) { + return `${connectorId}.${ConnectorPhaseRotation.NotApplicable}`; + // AC + } else if (connectorId > 0 && numberOfPhases === 1) { + return `${connectorId}.${ConnectorPhaseRotation.NotApplicable}`; + } else if (connectorId > 0 && numberOfPhases === 3) { + return `${connectorId}.${ConnectorPhaseRotation.RST}`; + } + } + public static getMaxNumberOfEvses(evses: Record): number { if (!evses) { return -1; @@ -110,22 +128,6 @@ export class ChargingStationUtils { return Object.keys(connectors).length; } - public static checkTemplateMaxConnectors( - templateMaxConnectors: number, - templateFile: string, - logPrefix: string - ): void { - if (templateMaxConnectors === 0) { - logger.warn( - `${logPrefix} Charging station information from template ${templateFile} with empty connectors configuration` - ); - } else if (templateMaxConnectors < 0) { - logger.error( - `${logPrefix} Charging station information from template ${templateFile} with no connectors configuration defined` - ); - } - } - public static getBootConnectorStatus( chargingStation: ChargingStation, connectorId: number, @@ -151,42 +153,39 @@ export class ChargingStationUtils { return connectorBootStatus; } - public static getConfiguredNumberOfConnectors(stationInfo: ChargingStationInfo): number { - let configuredMaxConnectors: number; - if (Utils.isNotEmptyArray(stationInfo.numberOfConnectors) === true) { - const numberOfConnectors = stationInfo.numberOfConnectors as number[]; - configuredMaxConnectors = - numberOfConnectors[Math.floor(Utils.secureRandom() * numberOfConnectors.length)]; - } else if (Utils.isUndefined(stationInfo.numberOfConnectors) === false) { - configuredMaxConnectors = stationInfo.numberOfConnectors as number; - } else if (stationInfo.Connectors && !stationInfo.Evses) { - configuredMaxConnectors = stationInfo?.Connectors[0] - ? ChargingStationUtils.getMaxNumberOfConnectors(stationInfo.Connectors) - 1 - : ChargingStationUtils.getMaxNumberOfConnectors(stationInfo.Connectors); - } else if (stationInfo.Evses && !stationInfo.Connectors) { - configuredMaxConnectors = 0; - for (const evse in stationInfo.Evses) { - if (evse === '0') { - continue; - } - configuredMaxConnectors += ChargingStationUtils.getMaxNumberOfConnectors( - stationInfo.Evses[evse].Connectors - ); - } - } - return configuredMaxConnectors; - } - - public static checkConfiguredMaxConnectors( - configuredMaxConnectors: number, + public static checkConnectorsConfiguration( + stationTemplate: ChargingStationTemplate | ChargingStationInfo, templateFile: string, logPrefix: string - ): void { - if (configuredMaxConnectors <= 0) { + ): { + configuredMaxConnectors: number; + templateMaxConnectors: number; + templateMaxAvailableConnectors: number; + } { + const configuredMaxConnectors = + ChargingStationUtils.getConfiguredNumberOfConnectors(stationTemplate); + ChargingStationUtils.checkConfiguredMaxConnectors( + configuredMaxConnectors, + templateFile, + logPrefix + ); + const templateMaxConnectors = ChargingStationUtils.getMaxNumberOfConnectors( + stationTemplate.Connectors + ); + ChargingStationUtils.checkTemplateMaxConnectors(templateMaxConnectors, templateFile, logPrefix); + const templateMaxAvailableConnectors = stationTemplate?.Connectors[0] + ? templateMaxConnectors - 1 + : templateMaxConnectors; + if ( + configuredMaxConnectors > templateMaxAvailableConnectors && + !stationTemplate?.randomConnectors + ) { logger.warn( - `${logPrefix} Charging station information from template ${templateFile} with ${configuredMaxConnectors} connectors` + `${logPrefix} Number of connectors exceeds the number of connector configurations in template ${templateFile}, forcing random connector configurations affectation` ); + stationTemplate.randomConnectors = true; } + return { configuredMaxConnectors, templateMaxConnectors, templateMaxAvailableConnectors }; } public static checkStationInfoConnectorStatus( @@ -369,14 +368,6 @@ export class ChargingStationUtils { return stationTemplate as unknown as ChargingStationInfo; } - public static createStationInfoHash(stationInfo: ChargingStationInfo): void { - delete stationInfo.infoHash; - stationInfo.infoHash = crypto - .createHash(Constants.DEFAULT_HASH_ALGORITHM) - .update(JSON.stringify(stationInfo)) - .digest('hex'); - } - public static createSerialNumber( stationTemplate: ChargingStationTemplate, stationInfo: ChargingStationInfo, @@ -388,27 +379,18 @@ export class ChargingStationUtils { randomSerialNumber: true, } ): void { - params = params ?? {}; - params.randomSerialNumberUpperCase = params?.randomSerialNumberUpperCase ?? true; - params.randomSerialNumber = params?.randomSerialNumber ?? true; + params = { ...{ randomSerialNumberUpperCase: true, randomSerialNumber: true }, ...params }; const serialNumberSuffix = params?.randomSerialNumber ? ChargingStationUtils.getRandomSerialNumberSuffix({ upperCase: params.randomSerialNumberUpperCase, }) : ''; - stationInfo.chargePointSerialNumber = Utils.isNotEmptyString( - stationTemplate?.chargePointSerialNumberPrefix - ) - ? `${stationTemplate.chargePointSerialNumberPrefix}${serialNumberSuffix}` - : undefined; - stationInfo.chargeBoxSerialNumber = Utils.isNotEmptyString( - stationTemplate?.chargeBoxSerialNumberPrefix - ) - ? `${stationTemplate.chargeBoxSerialNumberPrefix}${serialNumberSuffix}` - : undefined; - stationInfo.meterSerialNumber = Utils.isNotEmptyString(stationTemplate?.meterSerialNumberPrefix) - ? `${stationTemplate.meterSerialNumberPrefix}${serialNumberSuffix}` - : undefined; + Utils.isNotEmptyString(stationTemplate?.chargePointSerialNumberPrefix) && + (stationInfo.chargePointSerialNumber = `${stationTemplate.chargePointSerialNumberPrefix}${serialNumberSuffix}`); + Utils.isNotEmptyString(stationTemplate?.chargeBoxSerialNumberPrefix) && + (stationInfo.chargeBoxSerialNumber = `${stationTemplate.chargeBoxSerialNumberPrefix}${serialNumberSuffix}`); + Utils.isNotEmptyString(stationTemplate?.meterSerialNumberPrefix) && + (stationInfo.meterSerialNumber = `${stationTemplate.meterSerialNumberPrefix}${serialNumberSuffix}`); } public static propagateSerialNumber( @@ -514,7 +496,7 @@ export class ChargingStationUtils { templateFile: string, logPrefix: string ): Voltage { - const errMsg = `Unknown ${currentType} currentOutType in template file ${templateFile}, cannot define default voltage out`; + const errorMsg = `Unknown ${currentType} currentOutType in template file ${templateFile}, cannot define default voltage out`; let defaultVoltageOut: number; switch (currentType) { case CurrentType.AC: @@ -524,8 +506,8 @@ export class ChargingStationUtils { defaultVoltageOut = Voltage.VOLTAGE_400; break; default: - logger.error(`${logPrefix} ${errMsg}`); - throw new BaseError(errMsg); + logger.error(`${logPrefix} ${errorMsg}`); + throw new BaseError(errorMsg); } return defaultVoltageOut; } @@ -541,6 +523,62 @@ export class ChargingStationUtils { ); } + private static getConfiguredNumberOfConnectors( + stationTemplate: ChargingStationTemplate | ChargingStationInfo + ): number { + let configuredMaxConnectors: number; + if (Utils.isNotEmptyArray(stationTemplate.numberOfConnectors) === true) { + const numberOfConnectors = stationTemplate.numberOfConnectors as number[]; + configuredMaxConnectors = + numberOfConnectors[Math.floor(Utils.secureRandom() * numberOfConnectors.length)]; + } else if (Utils.isUndefined(stationTemplate.numberOfConnectors) === false) { + configuredMaxConnectors = stationTemplate.numberOfConnectors as number; + } else if (stationTemplate.Connectors && !stationTemplate.Evses) { + configuredMaxConnectors = stationTemplate?.Connectors[0] + ? ChargingStationUtils.getMaxNumberOfConnectors(stationTemplate.Connectors) - 1 + : ChargingStationUtils.getMaxNumberOfConnectors(stationTemplate.Connectors); + } else if (stationTemplate.Evses && !stationTemplate.Connectors) { + configuredMaxConnectors = 0; + for (const evse in stationTemplate.Evses) { + if (evse === '0') { + continue; + } + configuredMaxConnectors += ChargingStationUtils.getMaxNumberOfConnectors( + stationTemplate.Evses[evse].Connectors + ); + } + } + return configuredMaxConnectors; + } + + private static checkConfiguredMaxConnectors( + configuredMaxConnectors: number, + templateFile: string, + logPrefix: string + ): void { + if (configuredMaxConnectors <= 0) { + logger.warn( + `${logPrefix} Charging station information from template ${templateFile} with ${configuredMaxConnectors} connectors` + ); + } + } + + private static checkTemplateMaxConnectors( + templateMaxConnectors: number, + templateFile: string, + logPrefix: string + ): void { + if (templateMaxConnectors === 0) { + logger.warn( + `${logPrefix} Charging station information from template ${templateFile} with empty connectors configuration` + ); + } else if (templateMaxConnectors < 0) { + logger.error( + `${logPrefix} Charging station information from template ${templateFile} with no connectors configuration defined` + ); + } + } + private static initializeConnectorStatus(connectorStatus: ConnectorStatus): void { connectorStatus.availability = AvailabilityType.Operative; connectorStatus.idTagLocalAuthorized = false;