+ private initializeConnectors(
+ stationInfo: ChargingStationInfo,
+ configuredMaxConnectors: number,
+ templateMaxConnectors: number
+ ): void {
+ if (!stationInfo?.Connectors && this.connectors.size === 0) {
+ const logMsg = `${this.logPrefix()} No already defined connectors and charging station information from template ${
+ this.templateFile
+ } with no connectors configuration defined`;
+ logger.error(logMsg);
+ throw new BaseError(logMsg);
+ }
+ if (!stationInfo?.Connectors[0]) {
+ logger.warn(
+ `${this.logPrefix()} Charging station information from template ${
+ this.templateFile
+ } with no connector Id 0 configuration`
+ );
+ }
+ if (stationInfo?.Connectors) {
+ const connectorsConfigHash = crypto
+ .createHash(Constants.DEFAULT_HASH_ALGORITHM)
+ .update(JSON.stringify(stationInfo?.Connectors) + configuredMaxConnectors.toString())
+ .digest('hex');
+ const connectorsConfigChanged =
+ this.connectors?.size !== 0 && this.connectorsConfigurationHash !== connectorsConfigHash;
+ if (this.connectors?.size === 0 || connectorsConfigChanged) {
+ connectorsConfigChanged && this.connectors.clear();
+ this.connectorsConfigurationHash = connectorsConfigHash;
+ // Add connector Id 0
+ let lastConnector = '0';
+ for (lastConnector in stationInfo?.Connectors) {
+ const lastConnectorId = Utils.convertToInt(lastConnector);
+ if (
+ lastConnectorId === 0 &&
+ this.getUseConnectorId0(stationInfo) &&
+ stationInfo?.Connectors[lastConnector]
+ ) {
+ this.connectors.set(
+ lastConnectorId,
+ Utils.cloneObject<ConnectorStatus>(stationInfo?.Connectors[lastConnector])
+ );
+ this.getConnectorStatus(lastConnectorId).availability = AvailabilityType.OPERATIVE;
+ if (Utils.isUndefined(this.getConnectorStatus(lastConnectorId)?.chargingProfiles)) {
+ this.getConnectorStatus(lastConnectorId).chargingProfiles = [];
+ }
+ }
+ }
+ // Generate all connectors
+ if ((stationInfo?.Connectors[0] ? templateMaxConnectors - 1 : templateMaxConnectors) > 0) {
+ for (let index = 1; index <= configuredMaxConnectors; index++) {
+ const randConnectorId = stationInfo?.randomConnectors
+ ? Utils.getRandomInteger(Utils.convertToInt(lastConnector), 1)
+ : index;
+ this.connectors.set(
+ index,
+ Utils.cloneObject<ConnectorStatus>(stationInfo?.Connectors[randConnectorId])
+ );
+ this.getConnectorStatus(index).availability = AvailabilityType.OPERATIVE;
+ if (Utils.isUndefined(this.getConnectorStatus(index)?.chargingProfiles)) {
+ this.getConnectorStatus(index).chargingProfiles = [];
+ }
+ }
+ }
+ }
+ } else {
+ logger.warn(
+ `${this.logPrefix()} Charging station information from template ${
+ this.templateFile
+ } with no connectors configuration defined, using already defined connectors`
+ );
+ }
+ // Initialize transaction attributes on connectors
+ for (const connectorId of this.connectors.keys()) {
+ if (connectorId > 0 && !this.getConnectorStatus(connectorId)?.transactionStarted) {
+ this.initializeConnectorStatus(connectorId);
+ }
+ }
+ }
+
+ private getConfigurationFromFile(): ChargingStationConfiguration | null {