X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16RequestService.ts;h=a41a9731b7099a6be9ff135f135fcf6ba43f40ed;hb=734d790d9983a43c20f9ffa728f18825625e8119;hp=8bdc37cf8bf8415d2d3bc31a69b575d573e450a9;hpb=b02ab2157918aede5b539c6307a6010d97b6ee83;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/1.6/OCPP16RequestService.ts b/src/charging-station/ocpp/1.6/OCPP16RequestService.ts index 8bdc37cf..a41a9731 100644 --- a/src/charging-station/ocpp/1.6/OCPP16RequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16RequestService.ts @@ -1,3 +1,5 @@ +// Partial Copyright Jerome Benoit. 2021. All Rights Reserved. + import { ACElectricUtils, DCElectricUtils } from '../../../utils/ElectricUtils'; import { AuthorizeRequest, OCPP16AuthorizeResponse, OCPP16StartTransactionResponse, OCPP16StopTransactionReason, OCPP16StopTransactionResponse, StartTransactionRequest, StopTransactionRequest } from '../../../types/ocpp/1.6/Transaction'; import { CurrentType, Voltage } from '../../../types/ChargingStationTemplate'; @@ -5,6 +7,7 @@ import { DiagnosticsStatusNotificationRequest, HeartbeatRequest, OCPP16BootNotif import { MeterValueUnit, MeterValuesRequest, OCPP16MeterValue, OCPP16MeterValueMeasurand, OCPP16MeterValuePhase } from '../../../types/ocpp/1.6/MeterValues'; import Constants from '../../../utils/Constants'; +import { ErrorType } from '../../../types/ocpp/ErrorType'; import MeasurandPerPhaseSampledValueTemplates from '../../../types/MeasurandPerPhaseSampledValueTemplates'; import MeasurandValues from '../../../types/MeasurandValues'; import { MessageType } from '../../../types/ocpp/MessageType'; @@ -13,7 +16,7 @@ import { OCPP16ChargePointErrorCode } from '../../../types/ocpp/1.6/ChargePointE import { OCPP16ChargePointStatus } from '../../../types/ocpp/1.6/ChargePointStatus'; import { OCPP16DiagnosticsStatus } from '../../../types/ocpp/1.6/DiagnosticsStatus'; import { OCPP16ServiceUtils } from './OCPP16ServiceUtils'; -import OCPPError from '../../OCPPError'; +import OCPPError from '../OCPPError'; import OCPPRequestService from '../OCPPRequestService'; import Utils from '../../../utils/Utils'; import logger from '../../../utils/Logger'; @@ -42,7 +45,7 @@ export default class OCPP16RequestService extends OCPPRequestService { ...!Utils.isUndefined(meterSerialNumber) && { meterSerialNumber }, ...!Utils.isUndefined(meterType) && { meterType } }; - return await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.BOOT_NOTIFICATION) as OCPP16BootNotificationResponse; + return await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.BOOT_NOTIFICATION, true) as OCPP16BootNotificationResponse; } catch (error) { this.handleRequestError(OCPP16RequestCommand.BOOT_NOTIFICATION, error); } @@ -67,7 +70,7 @@ export default class OCPP16RequestService extends OCPPRequestService { const payload: AuthorizeRequest = { ...!Utils.isUndefined(idTag) ? { idTag } : { idTag: Constants.TRANSACTION_DEFAULT_IDTAG }, }; - this.chargingStation.getConnector(connectorId).authorizeIdTag = idTag; + this.chargingStation.getConnectorStatus(connectorId).authorizeIdTag = idTag; return await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.AUTHORIZE) as OCPP16AuthorizeResponse; } catch (error) { this.handleRequestError(OCPP16RequestCommand.AUTHORIZE, error); @@ -92,9 +95,9 @@ export default class OCPP16RequestService extends OCPPRequestService { reason: OCPP16StopTransactionReason = OCPP16StopTransactionReason.NONE): Promise { try { let connectorId: number; - for (const connector in this.chargingStation.connectors) { - if (Utils.convertToInt(connector) > 0 && this.chargingStation.getConnector(Utils.convertToInt(connector))?.transactionId === transactionId) { - connectorId = Utils.convertToInt(connector); + for (const id of this.chargingStation.connectors.keys()) { + if (id > 0 && this.chargingStation.getConnectorStatus(id)?.transactionId === transactionId) { + connectorId = id; break; } } @@ -108,7 +111,7 @@ export default class OCPP16RequestService extends OCPPRequestService { meterStop, timestamp: new Date().toISOString(), ...reason && { reason }, - ...this.chargingStation.getTransactionDataMeterValues() && { transactionData: OCPP16ServiceUtils.buildTransactionDataMeterValues(this.chargingStation.getConnector(connectorId).transactionBeginMeterValue, transactionEndMeterValue) }, + ...this.chargingStation.getTransactionDataMeterValues() && { transactionData: OCPP16ServiceUtils.buildTransactionDataMeterValues(this.chargingStation.getConnectorStatus(connectorId).transactionBeginMeterValue, transactionEndMeterValue) }, }; return await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.STOP_TRANSACTION) as OCPP16StartTransactionResponse; } catch (error) { @@ -116,20 +119,19 @@ export default class OCPP16RequestService extends OCPPRequestService { } } - // eslint-disable-next-line consistent-this public async sendMeterValues(connectorId: number, transactionId: number, interval: number, debug = false): Promise { try { const meterValue: OCPP16MeterValue = { timestamp: new Date().toISOString(), sampledValue: [], }; - const connector = this.chargingStation.getConnector(connectorId); + const connector = this.chargingStation.getConnectorStatus(connectorId); // SoC measurand const socSampledValueTemplate = this.chargingStation.getSampledValueTemplate(connectorId, OCPP16MeterValueMeasurand.STATE_OF_CHARGE); if (socSampledValueTemplate) { const socSampledValueTemplateValue = socSampledValueTemplate.value ? Utils.getRandomFloatFluctuatedRounded(parseInt(socSampledValueTemplate.value), socSampledValueTemplate.fluctuationPercent ?? Constants.DEFAULT_FLUCTUATION_PERCENT) - : Utils.getRandomInt(100); + : Utils.getRandomInteger(100); meterValue.sampledValue.push(OCPP16ServiceUtils.buildSampledValue(socSampledValueTemplate, socSampledValueTemplateValue)); const sampledValuesIndex = meterValue.sampledValue.length - 1; if (Utils.convertToInt(meterValue.sampledValue[sampledValuesIndex].value) > 100 || debug) { @@ -219,7 +221,7 @@ export default class OCPP16RequestService extends OCPPRequestService { break; default: logger.error(errMsg); - throw new Error(errMsg); + throw new OCPPError(ErrorType.INTERNAL_ERROR, errMsg, OCPP16RequestCommand.METER_VALUES); } meterValue.sampledValue.push(OCPP16ServiceUtils.buildSampledValue(powerSampledValueTemplate, powerMeasurandValues.allPhases)); const sampledValuesIndex = meterValue.sampledValue.length - 1; @@ -285,7 +287,7 @@ export default class OCPP16RequestService extends OCPPRequestService { break; default: logger.error(errMsg); - throw new Error(errMsg); + throw new OCPPError(ErrorType.INTERNAL_ERROR, errMsg, OCPP16RequestCommand.METER_VALUES); } meterValue.sampledValue.push(OCPP16ServiceUtils.buildSampledValue(currentSampledValueTemplate, currentMeasurandValues.allPhases)); const sampledValuesIndex = meterValue.sampledValue.length - 1; @@ -310,7 +312,7 @@ export default class OCPP16RequestService extends OCPPRequestService { const energyMeasurandValue = energySampledValueTemplate.value // Cumulate the fluctuated value around the static one ? Utils.getRandomFloatFluctuatedRounded(parseInt(energySampledValueTemplate.value), energySampledValueTemplate.fluctuationPercent ?? Constants.DEFAULT_FLUCTUATION_PERCENT) - : Utils.getRandomInt(this.chargingStation.stationInfo.maxPower / (this.chargingStation.stationInfo.powerDivider * 3600000) * interval); + : Utils.getRandomInteger(this.chargingStation.stationInfo.maxPower / (this.chargingStation.stationInfo.powerDivider * 3600000) * interval); // Persist previous value on connector if (connector && !Utils.isNullOrUndefined(connector.energyActiveImportRegisterValue) && connector.energyActiveImportRegisterValue >= 0 && !Utils.isNullOrUndefined(connector.transactionEnergyActiveImportRegisterValue) && connector.transactionEnergyActiveImportRegisterValue >= 0) { @@ -380,7 +382,7 @@ export default class OCPP16RequestService extends OCPPRequestService { public async sendError(messageId: string, error: OCPPError, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise { try { // Send error - return this.sendMessage(messageId, error, MessageType.CALL_ERROR_MESSAGE, commandName); + return await this.sendMessage(messageId, error, MessageType.CALL_ERROR_MESSAGE, commandName); } catch (err) { this.handleRequestError(commandName as OCPP16RequestCommand, err); }