X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16ServiceUtils.ts;h=b50ea9f7303adba864042f060038212fd5fb72d4;hb=f6f5fcf76fe58ae58c9891717c4474e72a9bbb0a;hp=853b46aaf932e28822ead86de0ed534b9f975f0c;hpb=4a1857a25fbcc203def0c0b1a6c5ebcb19602fe6;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/1.6/OCPP16ServiceUtils.ts b/src/charging-station/ocpp/1.6/OCPP16ServiceUtils.ts index 853b46aa..b50ea9f7 100644 --- a/src/charging-station/ocpp/1.6/OCPP16ServiceUtils.ts +++ b/src/charging-station/ocpp/1.6/OCPP16ServiceUtils.ts @@ -1,6 +1,7 @@ -import { MeterValueContext, MeterValueLocation, MeterValuePhase, MeterValueUnit, OCPP16MeterValueMeasurand, OCPP16SampledValue } from '../../../types/ocpp/1.6/MeterValues'; +import { MeterValueContext, MeterValueLocation, MeterValueUnit, OCPP16MeterValue, OCPP16MeterValueMeasurand, OCPP16MeterValuePhase, OCPP16SampledValue } from '../../../types/ocpp/1.6/MeterValues'; import ChargingStation from '../../ChargingStation'; +import { SampledValueTemplate } from '../../../types/Connectors'; import Utils from '../../../utils/Utils'; import logger from '../../../utils/Logger'; @@ -10,14 +11,15 @@ export class OCPP16ServiceUtils { const errMsg = `${chargingStation.logPrefix()} MeterValues measurand ${measurandType ?? OCPP16MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER}: powerDivider is undefined`; logger.error(errMsg); throw Error(errMsg); - } else if (chargingStation.stationInfo.powerDivider && chargingStation.stationInfo.powerDivider <= 0) { + } else if (chargingStation.stationInfo?.powerDivider <= 0) { const errMsg = `${chargingStation.logPrefix()} MeterValues measurand ${measurandType ?? OCPP16MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER}: powerDivider have zero or below value ${chargingStation.stationInfo.powerDivider}`; logger.error(errMsg); throw Error(errMsg); } } - public static buildSampledValue(sampledValueTemplate: OCPP16SampledValue, value: number, context?: MeterValueContext, phase?: MeterValuePhase): OCPP16SampledValue { + public static buildSampledValue(sampledValueTemplate: SampledValueTemplate, value: number, context?: MeterValueContext, phase?: OCPP16MeterValuePhase): OCPP16SampledValue { + const sampledValueValue = value ?? (sampledValueTemplate.value ?? null); const sampledValueContext = context ?? (sampledValueTemplate.context ?? null); const sampledValueLocation = sampledValueTemplate.location ? sampledValueTemplate.location @@ -28,7 +30,7 @@ export class OCPP16ServiceUtils { ...!Utils.isNullOrUndefined(sampledValueContext) && { context: sampledValueContext }, ...!Utils.isNullOrUndefined(sampledValueTemplate.measurand) && { measurand: sampledValueTemplate.measurand }, ...!Utils.isNullOrUndefined(sampledValueLocation) && { location: sampledValueLocation }, - ...!Utils.isNullOrUndefined(sampledValueTemplate.value) ? { value: sampledValueTemplate.value } : { value: value.toString() }, + ...!Utils.isNullOrUndefined(sampledValueValue) && { value: sampledValueValue.toString() }, ...!Utils.isNullOrUndefined(sampledValuePhase) && { phase: sampledValuePhase }, }; } @@ -59,4 +61,35 @@ export class OCPP16ServiceUtils { return MeterValueLocation.EV; } } + + public static buildTransactionBeginMeterValue(chargingStation: ChargingStation, connectorId: number, meterBegin: number): OCPP16MeterValue { + const meterValue: OCPP16MeterValue = { + timestamp: new Date().toISOString(), + sampledValue: [], + }; + // Energy.Active.Import.Register measurand (default) + const sampledValueTemplate = chargingStation.getSampledValueTemplate(connectorId); + const unitDivider = sampledValueTemplate?.unit === MeterValueUnit.KILO_WATT_HOUR ? 1000 : 1; + meterValue.sampledValue.push(OCPP16ServiceUtils.buildSampledValue(sampledValueTemplate, Utils.roundTo(meterBegin / unitDivider, 4), MeterValueContext.TRANSACTION_BEGIN)); + return meterValue; + } + + public static buildTransactionEndMeterValue(chargingStation: ChargingStation, connectorId: number, meterEnd: number): OCPP16MeterValue { + const meterValue: OCPP16MeterValue = { + timestamp: new Date().toISOString(), + sampledValue: [], + }; + // Energy.Active.Import.Register measurand (default) + const sampledValueTemplate = chargingStation.getSampledValueTemplate(connectorId); + const unitDivider = sampledValueTemplate?.unit === MeterValueUnit.KILO_WATT_HOUR ? 1000 : 1; + meterValue.sampledValue.push(OCPP16ServiceUtils.buildSampledValue(sampledValueTemplate, Utils.roundTo(meterEnd / unitDivider, 4), MeterValueContext.TRANSACTION_END)); + return meterValue; + } + + public static buildTransactionDataMeterValues(transactionBeginMeterValue: OCPP16MeterValue, transactionEndMeterValue: OCPP16MeterValue): OCPP16MeterValue[] { + const meterValues: OCPP16MeterValue[] = []; + meterValues.push(transactionBeginMeterValue); + meterValues.push(transactionEndMeterValue); + return meterValues; + } }