X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16RequestService.ts;h=0385f45a5eee50714ad4db8e93c4a85c8c9020c8;hb=9f2e313013116428f5bce2be59e2f5c07502c026;hp=93bb2bcc4f401166a6b98a29ee17fac35c668d91;hpb=de3dbcf58f56e0b7cc36762c6a03bdf908ca3df8;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 93bb2bcc..0385f45a 100644 --- a/src/charging-station/ocpp/1.6/OCPP16RequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16RequestService.ts @@ -6,8 +6,10 @@ import { CurrentType, Voltage } from '../../../types/ChargingStationTemplate'; import { DiagnosticsStatusNotificationRequest, HeartbeatRequest, OCPP16BootNotificationRequest, OCPP16IncomingRequestCommand, OCPP16RequestCommand, StatusNotificationRequest } from '../../../types/ocpp/1.6/Requests'; import { MeterValueUnit, MeterValuesRequest, OCPP16MeterValue, OCPP16MeterValueMeasurand, OCPP16MeterValuePhase } from '../../../types/ocpp/1.6/MeterValues'; +import ChargingStation from '../../ChargingStation'; import Constants from '../../../utils/Constants'; import { ErrorType } from '../../../types/ocpp/ErrorType'; +import { JsonType } from '../../../types/JsonType'; import MeasurandPerPhaseSampledValueTemplates from '../../../types/MeasurandPerPhaseSampledValueTemplates'; import MeasurandValues from '../../../types/MeasurandValues'; import { MessageType } from '../../../types/ocpp/MessageType'; @@ -16,23 +18,33 @@ 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 '../../../exception/OCPPError'; import OCPPRequestService from '../OCPPRequestService'; +import OCPPResponseService from '../OCPPResponseService'; +import { SendParams } from '../../../types/ocpp/Requests'; import Utils from '../../../utils/Utils'; import logger from '../../../utils/Logger'; export default class OCPP16RequestService extends OCPPRequestService { - public async sendHeartbeat(): Promise { + public constructor(chargingStation: ChargingStation, ocppResponseService: OCPPResponseService) { + if (new.target?.name === 'OCPP16RequestService') { + throw new TypeError('Cannot construct OCPP16RequestService instances directly'); + } + super(chargingStation, ocppResponseService); + } + + public async sendHeartbeat(params?: SendParams): Promise { try { const payload: HeartbeatRequest = {}; - await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.HEARTBEAT); + await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.HEARTBEAT, params); } catch (error) { this.handleRequestError(OCPP16RequestCommand.HEARTBEAT, error as Error); } } public async sendBootNotification(chargePointModel: string, chargePointVendor: string, chargeBoxSerialNumber?: string, firmwareVersion?: string, - chargePointSerialNumber?: string, iccid?: string, imsi?: string, meterSerialNumber?: string, meterType?: string): Promise { + chargePointSerialNumber?: string, iccid?: string, imsi?: string, meterSerialNumber?: string, meterType?: string, + params?: SendParams): Promise { try { const payload: OCPP16BootNotificationRequest = { chargePointModel, @@ -45,7 +57,8 @@ 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, true) as OCPP16BootNotificationResponse; + return await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, + OCPP16RequestCommand.BOOT_NOTIFICATION, { ...params, skipBufferingOnError: true }) as OCPP16BootNotificationResponse; } catch (error) { this.handleRequestError(OCPP16RequestCommand.BOOT_NOTIFICATION, error as Error); } @@ -103,7 +116,7 @@ export default class OCPP16RequestService extends OCPPRequestService { } const transactionEndMeterValue = OCPP16ServiceUtils.buildTransactionEndMeterValue(this.chargingStation, connectorId, meterStop); // FIXME: should be a callback, each OCPP commands implementation must do only one job - (this.chargingStation.getBeginEndMeterValues() && !this.chargingStation.getOutOfOrderEndMeterValues()) + (this.chargingStation.getBeginEndMeterValues() && this.chargingStation.getOcppStrictCompliance() && !this.chargingStation.getOutOfOrderEndMeterValues()) && await this.sendTransactionEndMeterValues(connectorId, transactionId, transactionEndMeterValue); const payload: StopTransactionRequest = { transactionId, @@ -316,7 +329,7 @@ export default class OCPP16RequestService extends OCPPRequestService { : Utils.getRandomFloatRounded(maxEnergyRounded); // Persist previous value on connector if (connector && !Utils.isNullOrUndefined(connector.energyActiveImportRegisterValue) && connector.energyActiveImportRegisterValue >= 0 && - !Utils.isNullOrUndefined(connector.transactionEnergyActiveImportRegisterValue) && connector.transactionEnergyActiveImportRegisterValue >= 0) { + !Utils.isNullOrUndefined(connector.transactionEnergyActiveImportRegisterValue) && connector.transactionEnergyActiveImportRegisterValue >= 0) { connector.energyActiveImportRegisterValue += energyValueRounded; connector.transactionEnergyActiveImportRegisterValue += energyValueRounded; } else { @@ -378,21 +391,21 @@ export default class OCPP16RequestService extends OCPPRequestService { } } - public async sendResult(messageId: string, resultMessageData: Record, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise { + public async sendResult(messageId: string, resultMessageData: JsonType, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise { try { // Send error - return await this.sendMessage(messageId, resultMessageData, MessageType.CALL_RESULT_MESSAGE, commandName); - } catch (err) { - this.handleRequestError(commandName as OCPP16RequestCommand, err as Error); + return await this.sendMessage(messageId, resultMessageData, MessageType.CALL_RESULT_MESSAGE, commandName) as JsonType; + } catch (error) { + this.handleRequestError(commandName as OCPP16RequestCommand, error as Error); } } - public async sendError(messageId: string, error: OCPPError, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise { + public async sendError(messageId: string, ocppError: OCPPError, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise { try { // Send error - return await this.sendMessage(messageId, error, MessageType.CALL_ERROR_MESSAGE, commandName); - } catch (err) { - this.handleRequestError(commandName as OCPP16RequestCommand, err as Error); + return await this.sendMessage(messageId, ocppError, MessageType.CALL_ERROR_MESSAGE, commandName) as JsonType; + } catch (error) { + this.handleRequestError(commandName as OCPP16RequestCommand, error as Error); } } }