- private setStartConnectorStatus(connectorId: number): void {
- this.connectorsStatus.get(connectorId).skippedConsecutiveTransactions = 0;
- const previousRunDuration =
- this.connectorsStatus.get(connectorId)?.startDate &&
- this.connectorsStatus.get(connectorId)?.lastRunDate
- ? this.connectorsStatus.get(connectorId).lastRunDate.getTime() -
- this.connectorsStatus.get(connectorId).startDate.getTime()
- : 0;
- this.connectorsStatus.get(connectorId).startDate = new Date();
- this.connectorsStatus.get(connectorId).stopDate = new Date(
- this.connectorsStatus.get(connectorId).startDate.getTime() +
- this.chargingStation.getAutomaticTransactionGeneratorConfiguration().stopAfterHours *
- 3600 *
- 1000 -
- previousRunDuration
- );
- this.connectorsStatus.get(connectorId).start = true;
+ private canStartConnector (connectorId: number): boolean {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ if (new Date() > this.connectorsStatus.get(connectorId)!.stopDate!) {
+ logger.info(
+ `${this.logPrefix(
+ connectorId
+ )} entered in transaction loop while the ATG stop date has been reached`
+ )
+ return false
+ }
+ if (!this.chargingStation.inAcceptedState()) {
+ logger.error(
+ `${this.logPrefix(
+ connectorId
+ )} entered in transaction loop while the charging station is not in accepted state`
+ )
+ return false
+ }
+ if (!this.chargingStation.isChargingStationAvailable()) {
+ logger.info(
+ `${this.logPrefix(
+ connectorId
+ )} entered in transaction loop while the charging station is unavailable`
+ )
+ return false
+ }
+ if (!this.chargingStation.isConnectorAvailable(connectorId)) {
+ logger.info(
+ `${this.logPrefix(
+ connectorId
+ )} entered in transaction loop while the connector ${connectorId} is unavailable`
+ )
+ return false
+ }
+ const connectorStatus = this.chargingStation.getConnectorStatus(connectorId)
+ if (connectorStatus?.transactionStarted === true) {
+ logger.info(
+ `${this.logPrefix(
+ connectorId
+ )} entered in transaction loop while a transaction ${connectorStatus.transactionId} is already started on connector ${connectorId}`
+ )
+ return false
+ }
+ return true
+ }
+
+ private async waitChargingStationAvailable (connectorId: number): Promise<void> {
+ let logged = false
+ while (!this.chargingStation.isChargingStationAvailable()) {
+ if (!logged) {
+ logger.info(
+ `${this.logPrefix(
+ connectorId
+ )} transaction loop waiting for charging station to be available`
+ )
+ logged = true
+ }
+ await sleep(Constants.DEFAULT_ATG_WAIT_TIME)
+ }
+ }
+
+ private async waitConnectorAvailable (connectorId: number): Promise<void> {
+ let logged = false
+ while (!this.chargingStation.isConnectorAvailable(connectorId)) {
+ if (!logged) {
+ logger.info(
+ `${this.logPrefix(
+ connectorId
+ )} transaction loop waiting for connector ${connectorId} to be available`
+ )
+ logged = true
+ }
+ await sleep(Constants.DEFAULT_ATG_WAIT_TIME)
+ }