X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16RequestService.ts;h=cf5ff237cb2e24b93dcbe5e1258ef2cd71862ae1;hb=c38f0ced134bb1e7daf750500788e9c194e7b74c;hp=fef9d86daa6cbe3a855b8e9c3d09b27584ae9eee;hpb=cf058664a0053a43b9ac08815b6e430179ff5ddf;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 fef9d86d..cf5ff237 100644 --- a/src/charging-station/ocpp/1.6/OCPP16RequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16RequestService.ts @@ -1,4 +1,4 @@ -// Partial Copyright Jerome Benoit. 2021. All Rights Reserved. +// Partial Copyright Jerome Benoit. 2021-2023. All Rights Reserved. import fs from 'fs'; import path from 'path'; @@ -10,11 +10,12 @@ import OCPPError from '../../../exception/OCPPError'; import type { JsonObject, JsonType } from '../../../types/JsonType'; import type { OCPP16MeterValuesRequest } from '../../../types/ocpp/1.6/MeterValues'; import { - DiagnosticsStatusNotificationRequest, - OCPP16BootNotificationRequest, - OCPP16HeartbeatRequest, + type DiagnosticsStatusNotificationRequest, + type OCPP16BootNotificationRequest, + type OCPP16DataTransferRequest, + type OCPP16HeartbeatRequest, OCPP16RequestCommand, - OCPP16StatusNotificationRequest, + type OCPP16StatusNotificationRequest, } from '../../../types/ocpp/1.6/Requests'; import type { OCPP16AuthorizeRequest, @@ -22,12 +23,12 @@ import type { OCPP16StopTransactionRequest, } from '../../../types/ocpp/1.6/Transaction'; import { ErrorType } from '../../../types/ocpp/ErrorType'; +import { OCPPVersion } from '../../../types/ocpp/OCPPVersion'; import type { RequestParams } from '../../../types/ocpp/Requests'; import Constants from '../../../utils/Constants'; import logger from '../../../utils/Logger'; import Utils from '../../../utils/Utils'; import type ChargingStation from '../../ChargingStation'; -import { ChargingStationUtils } from '../../ChargingStationUtils'; import OCPPRequestService from '../OCPPRequestService'; import type OCPPResponseService from '../OCPPResponseService'; import { OCPP16ServiceUtils } from './OCPP16ServiceUtils'; @@ -41,7 +42,7 @@ export default class OCPP16RequestService extends OCPPRequestService { if (new.target?.name === moduleName) { throw new TypeError(`Cannot construct ${new.target?.name} instances directly`); } - super(ocppResponseService); + super(OCPPVersion.VERSION_16, ocppResponseService); this.jsonSchemas = new Map>([ [ OCPP16RequestCommand.AUTHORIZE, @@ -139,6 +140,18 @@ export default class OCPP16RequestService extends OCPPRequestService { ) ) as JSONSchemaType, ], + [ + OCPP16RequestCommand.DATA_TRANSFER, + JSON.parse( + fs.readFileSync( + path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + '../../../assets/json-schemas/ocpp/1.6/DataTransfer.json' + ), + 'utf8' + ) + ) as JSONSchemaType, + ], ]); this.buildRequestPayload.bind(this); this.validatePayload.bind(this); @@ -150,7 +163,7 @@ export default class OCPP16RequestService extends OCPPRequestService { commandParams?: JsonType, params?: RequestParams ): Promise { - if (ChargingStationUtils.isRequestCommandSupported(commandName, chargingStation)) { + if (OCPP16ServiceUtils.isRequestCommandSupported(chargingStation, commandName) === true) { const requestPayload = this.buildRequestPayload( chargingStation, commandName, @@ -165,6 +178,7 @@ export default class OCPP16RequestService extends OCPPRequestService { params )) as unknown as ResponseType; } + // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError(). throw new OCPPError( ErrorType.NOT_SUPPORTED, `Unsupported OCPP command '${commandName}'`, @@ -243,10 +257,12 @@ export default class OCPP16RequestService extends OCPPRequestService { connectorId = chargingStation.getConnectorIdByTransactionId( commandParams?.transactionId as number ); - energyActiveImportRegister = chargingStation.getEnergyActiveImportRegisterByTransactionId( - commandParams?.transactionId as number, - true - ); + commandParams?.meterStop && + (energyActiveImportRegister = + chargingStation.getEnergyActiveImportRegisterByTransactionId( + commandParams?.transactionId as number, + true + )); return { transactionId: commandParams?.transactionId, idTag: @@ -266,7 +282,10 @@ export default class OCPP16RequestService extends OCPPRequestService { ), }), } as unknown as Request; + case OCPP16RequestCommand.DATA_TRANSFER: + return commandParams as unknown as Request; default: + // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError(). throw new OCPPError( ErrorType.NOT_SUPPORTED, // eslint-disable-next-line @typescript-eslint/restrict-template-expressions