X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16RequestService.ts;h=3580cc52e18701ff05f8a6939b6714bb5be9113a;hb=672fed6e70e94e37ba8db689d8517f42ae0f4477;hp=4daf9628b905aa08ceecffa78b8cc6abf3e35fd2;hpb=32618c7187a3ff23f04c955b1bc8ba4ca043a931;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 4daf9628..3580cc52 100644 --- a/src/charging-station/ocpp/1.6/OCPP16RequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16RequestService.ts @@ -8,6 +8,7 @@ import { MeterValueUnit, MeterValuesRequest, OCPP16MeterValue, OCPP16MeterValueM 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 +17,25 @@ 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 { 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 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); + 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,9 +48,10 @@ 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); + this.handleRequestError(OCPP16RequestCommand.BOOT_NOTIFICATION, error as Error); } } @@ -61,7 +65,7 @@ export default class OCPP16RequestService extends OCPPRequestService { }; await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.STATUS_NOTIFICATION); } catch (error) { - this.handleRequestError(OCPP16RequestCommand.STATUS_NOTIFICATION, error); + this.handleRequestError(OCPP16RequestCommand.STATUS_NOTIFICATION, error as Error); } } @@ -73,7 +77,7 @@ export default class OCPP16RequestService extends OCPPRequestService { 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); + this.handleRequestError(OCPP16RequestCommand.AUTHORIZE, error as Error); } } @@ -87,7 +91,7 @@ export default class OCPP16RequestService extends OCPPRequestService { }; return await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.START_TRANSACTION) as OCPP16StartTransactionResponse; } catch (error) { - this.handleRequestError(OCPP16RequestCommand.START_TRANSACTION, error); + this.handleRequestError(OCPP16RequestCommand.START_TRANSACTION, error as Error); } } @@ -103,7 +107,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, @@ -115,7 +119,7 @@ export default class OCPP16RequestService extends OCPPRequestService { }; return await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.STOP_TRANSACTION) as OCPP16StartTransactionResponse; } catch (error) { - this.handleRequestError(OCPP16RequestCommand.STOP_TRANSACTION, error); + this.handleRequestError(OCPP16RequestCommand.STOP_TRANSACTION, error as Error); } } @@ -316,7 +320,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 { @@ -337,7 +341,7 @@ export default class OCPP16RequestService extends OCPPRequestService { }; await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.METER_VALUES); } catch (error) { - this.handleRequestError(OCPP16RequestCommand.METER_VALUES, error); + this.handleRequestError(OCPP16RequestCommand.METER_VALUES, error as Error); } } @@ -350,7 +354,7 @@ export default class OCPP16RequestService extends OCPPRequestService { }; await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.METER_VALUES); } catch (error) { - this.handleRequestError(OCPP16RequestCommand.METER_VALUES, error); + this.handleRequestError(OCPP16RequestCommand.METER_VALUES, error as Error); } } @@ -363,7 +367,7 @@ export default class OCPP16RequestService extends OCPPRequestService { }; await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.METER_VALUES); } catch (error) { - this.handleRequestError(OCPP16RequestCommand.METER_VALUES, error); + this.handleRequestError(OCPP16RequestCommand.METER_VALUES, error as Error); } } @@ -374,16 +378,25 @@ export default class OCPP16RequestService extends OCPPRequestService { }; await this.sendMessage(Utils.generateUUID(), payload, MessageType.CALL_MESSAGE, OCPP16RequestCommand.DIAGNOSTICS_STATUS_NOTIFICATION); } catch (error) { - this.handleRequestError(OCPP16RequestCommand.METER_VALUES, error); + this.handleRequestError(OCPP16RequestCommand.METER_VALUES, error as Error); } } - public async sendError(messageId: string, error: OCPPError, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise { + public async sendResult(messageId: string, resultMessageData: JsonType, 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); + 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, ocppError: OCPPError, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise { + try { + // Send error + return await this.sendMessage(messageId, ocppError, MessageType.CALL_ERROR_MESSAGE, commandName) as JsonType; + } catch (error) { + this.handleRequestError(commandName as OCPP16RequestCommand, error as Error); } } }