X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FAutomaticTransactionGenerator.ts;h=2162078b362014ad735cd430dd9a214eec986e92;hb=455ee9cf1788779d13cedfcf4eaa91a0d7921c16;hp=b9d3f1d0f24f8b0898551bb0bf8c68be378afb49;hpb=e7aeea18e189dd087c8f951cf77a253e2818ae90;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/AutomaticTransactionGenerator.ts b/src/charging-station/AutomaticTransactionGenerator.ts index b9d3f1d0..2162078b 100644 --- a/src/charging-station/AutomaticTransactionGenerator.ts +++ b/src/charging-station/AutomaticTransactionGenerator.ts @@ -10,7 +10,9 @@ import { import type ChargingStation from './ChargingStation'; import Constants from '../utils/Constants'; +import { OCPP16ServiceUtils } from './ocpp/1.6/OCPP16ServiceUtils'; import PerformanceStatistics from '../performance/PerformanceStatistics'; +import { RequestCommand } from '../types/ocpp/Requests'; import { Status } from '../types/AutomaticTransactionGenerator'; import Utils from '../utils/Utils'; import logger from '../utils/Logger'; @@ -20,6 +22,7 @@ export default class AutomaticTransactionGenerator { string, AutomaticTransactionGenerator >(); + public started: boolean; private readonly chargingStation: ChargingStation; private readonly connectorsStatus: Map; @@ -268,20 +271,27 @@ export default class AutomaticTransactionGenerator { if (this.chargingStation.hasAuthorizedTags()) { const idTag = this.chargingStation.getRandomIdTag(); if (this.chargingStation.getAutomaticTransactionGeneratorRequireAuthorize()) { + this.chargingStation.getConnectorStatus(connectorId).authorizeIdTag = idTag; // Authorize idTag - const authorizeResponse = await this.chargingStation.ocppRequestService.sendAuthorize( - connectorId, - idTag - ); + const authorizeResponse: AuthorizeResponse = + (await this.chargingStation.ocppRequestService.sendMessageHandler( + RequestCommand.AUTHORIZE, + { + idTag, + } + )) as AuthorizeResponse; this.connectorsStatus.get(connectorId).authorizeRequests++; if (authorizeResponse?.idTagInfo?.status === AuthorizationStatus.ACCEPTED) { this.connectorsStatus.get(connectorId).acceptedAuthorizeRequests++; logger.info(this.logPrefix(connectorId) + ' start transaction for idTag ' + idTag); // Start transaction - startResponse = await this.chargingStation.ocppRequestService.sendStartTransaction( - connectorId, - idTag - ); + startResponse = (await this.chargingStation.ocppRequestService.sendMessageHandler( + RequestCommand.START_TRANSACTION, + { + connectorId, + idTag, + } + )) as StartTransactionResponse; PerformanceStatistics.endMeasure(measureId, beginId); return startResponse; } @@ -291,15 +301,21 @@ export default class AutomaticTransactionGenerator { } logger.info(this.logPrefix(connectorId) + ' start transaction for idTag ' + idTag); // Start transaction - startResponse = await this.chargingStation.ocppRequestService.sendStartTransaction( - connectorId, - idTag - ); + startResponse = (await this.chargingStation.ocppRequestService.sendMessageHandler( + RequestCommand.START_TRANSACTION, + { + connectorId, + idTag, + } + )) as StartTransactionResponse; PerformanceStatistics.endMeasure(measureId, beginId); return startResponse; } logger.info(this.logPrefix(connectorId) + ' start transaction without an idTag'); - startResponse = await this.chargingStation.ocppRequestService.sendStartTransaction(connectorId); + startResponse = (await this.chargingStation.ocppRequestService.sendMessageHandler( + RequestCommand.START_TRANSACTION, + { connectorId } + )) as StartTransactionResponse; PerformanceStatistics.endMeasure(measureId, beginId); return startResponse; } @@ -314,12 +330,36 @@ export default class AutomaticTransactionGenerator { let stopResponse: StopTransactionResponse; if (this.chargingStation.getConnectorStatus(connectorId)?.transactionStarted) { transactionId = this.chargingStation.getConnectorStatus(connectorId).transactionId; - stopResponse = await this.chargingStation.ocppRequestService.sendStopTransaction( - transactionId, - this.chargingStation.getEnergyActiveImportRegisterByTransactionId(transactionId), - this.chargingStation.getTransactionIdTag(transactionId), - reason - ); + if ( + this.chargingStation.getBeginEndMeterValues() && + this.chargingStation.getOcppStrictCompliance() && + !this.chargingStation.getOutOfOrderEndMeterValues() + ) { + // FIXME: Implement OCPP version agnostic helpers + const transactionEndMeterValue = OCPP16ServiceUtils.buildTransactionEndMeterValue( + this.chargingStation, + connectorId, + this.chargingStation.getEnergyActiveImportRegisterByTransactionId(transactionId) + ); + await this.chargingStation.ocppRequestService.sendMessageHandler( + RequestCommand.METER_VALUES, + { + connectorId, + transactionId, + meterValue: transactionEndMeterValue, + } + ); + } + stopResponse = (await this.chargingStation.ocppRequestService.sendMessageHandler( + RequestCommand.STOP_TRANSACTION, + { + transactionId, + meterStop: + this.chargingStation.getEnergyActiveImportRegisterByTransactionId(transactionId), + idTag: this.chargingStation.getTransactionIdTag(transactionId), + reason, + } + )) as StopTransactionResponse; this.connectorsStatus.get(connectorId).stopTransactionRequests++; } else { logger.warn(