From 1f2723bb031ecccb4975b997f393c48f064fe29f Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sat, 28 Mar 2026 13:05:34 +0100 Subject: [PATCH] refactor: replace Measurands string literal with OCPP20RequiredVariableName enum MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Add Measurands to OCPP20RequiredVariableName enum (required per OCPP 2.0.1 Part 2 §2.7.1, AlignedDataCtrlr component) and replace all string literals in ConfigurationKeyUtils mapping and OCPP20VariableRegistry. --- src/charging-station/ConfigurationKeyUtils.ts | 2 +- .../ocpp/2.0/OCPP20VariableRegistry.ts | 68 +++++++++---------- src/types/ocpp/2.0/Variables.ts | 1 + 3 files changed, 36 insertions(+), 35 deletions(-) diff --git a/src/charging-station/ConfigurationKeyUtils.ts b/src/charging-station/ConfigurationKeyUtils.ts index bbe11c17..ff83ffed 100644 --- a/src/charging-station/ConfigurationKeyUtils.ts +++ b/src/charging-station/ConfigurationKeyUtils.ts @@ -81,7 +81,7 @@ const OCPP2_PARAMETER_KEY_MAP = new Map< ], [ StandardParametersKey.MeterValuesAlignedData, - buildConfigKey(OCPP20ComponentName.AlignedDataCtrlr, 'Measurands'), + buildConfigKey(OCPP20ComponentName.AlignedDataCtrlr, StandardParametersKey.Measurands), ], [ StandardParametersKey.ClockAlignedDataInterval, diff --git a/src/charging-station/ocpp/2.0/OCPP20VariableRegistry.ts b/src/charging-station/ocpp/2.0/OCPP20VariableRegistry.ts index 1a44e366..e9215789 100644 --- a/src/charging-station/ocpp/2.0/OCPP20VariableRegistry.ts +++ b/src/charging-station/ocpp/2.0/OCPP20VariableRegistry.ts @@ -127,40 +127,6 @@ export const VARIABLE_REGISTRY: Record = { supportedAttributes: [AttributeEnumType.Actual], variable: 'Available', }, - [buildRegistryKey(OCPP20ComponentName.AlignedDataCtrlr, 'Measurands')]: { - component: OCPP20ComponentName.AlignedDataCtrlr, - dataType: DataEnumType.MemberList, - defaultValue: OCPP20MeasurandEnumType.ENERGY_ACTIVE_IMPORT_REGISTER, - description: - 'Clock-aligned measurand(s) to be included in MeterValuesRequest, every AlignedDataInterval seconds.', - enumeration: [ - OCPP20MeasurandEnumType.CURRENT_EXPORT, - OCPP20MeasurandEnumType.CURRENT_IMPORT, - OCPP20MeasurandEnumType.CURRENT_OFFERED, - OCPP20MeasurandEnumType.ENERGY_ACTIVE_EXPORT_REGISTER, - OCPP20MeasurandEnumType.ENERGY_ACTIVE_IMPORT_REGISTER, - OCPP20MeasurandEnumType.ENERGY_REACTIVE_EXPORT_REGISTER, - OCPP20MeasurandEnumType.ENERGY_REACTIVE_IMPORT_REGISTER, - OCPP20MeasurandEnumType.ENERGY_ACTIVE_EXPORT_INTERVAL, - OCPP20MeasurandEnumType.ENERGY_ACTIVE_IMPORT_INTERVAL, - OCPP20MeasurandEnumType.ENERGY_REACTIVE_EXPORT_INTERVAL, - OCPP20MeasurandEnumType.ENERGY_REACTIVE_IMPORT_INTERVAL, - OCPP20MeasurandEnumType.FREQUENCY, - OCPP20MeasurandEnumType.POWER_ACTIVE_EXPORT, - OCPP20MeasurandEnumType.POWER_ACTIVE_IMPORT, - OCPP20MeasurandEnumType.POWER_FACTOR, - OCPP20MeasurandEnumType.POWER_OFFERED, - OCPP20MeasurandEnumType.POWER_REACTIVE_EXPORT, - OCPP20MeasurandEnumType.POWER_REACTIVE_IMPORT, - OCPP20MeasurandEnumType.STATE_OF_CHARGE, - OCPP20MeasurandEnumType.VOLTAGE, - ], - mutability: MutabilityEnumType.ReadWrite, - persistence: PersistenceEnumType.Persistent, - required: true, - supportedAttributes: [AttributeEnumType.Actual], - variable: 'Measurands', - }, [buildRegistryKey(OCPP20ComponentName.AlignedDataCtrlr, 'SendDuringIdle')]: { component: OCPP20ComponentName.AlignedDataCtrlr, dataType: DataEnumType.boolean, @@ -224,6 +190,40 @@ export const VARIABLE_REGISTRY: Record = { supportedAttributes: [AttributeEnumType.Actual], variable: OCPP20RequiredVariableName.Enabled, }, + [buildRegistryKey(OCPP20ComponentName.AlignedDataCtrlr, OCPP20RequiredVariableName.Measurands)]: { + component: OCPP20ComponentName.AlignedDataCtrlr, + dataType: DataEnumType.MemberList, + defaultValue: OCPP20MeasurandEnumType.ENERGY_ACTIVE_IMPORT_REGISTER, + description: + 'Clock-aligned measurand(s) to be included in MeterValuesRequest, every AlignedDataInterval seconds.', + enumeration: [ + OCPP20MeasurandEnumType.CURRENT_EXPORT, + OCPP20MeasurandEnumType.CURRENT_IMPORT, + OCPP20MeasurandEnumType.CURRENT_OFFERED, + OCPP20MeasurandEnumType.ENERGY_ACTIVE_EXPORT_REGISTER, + OCPP20MeasurandEnumType.ENERGY_ACTIVE_IMPORT_REGISTER, + OCPP20MeasurandEnumType.ENERGY_REACTIVE_EXPORT_REGISTER, + OCPP20MeasurandEnumType.ENERGY_REACTIVE_IMPORT_REGISTER, + OCPP20MeasurandEnumType.ENERGY_ACTIVE_EXPORT_INTERVAL, + OCPP20MeasurandEnumType.ENERGY_ACTIVE_IMPORT_INTERVAL, + OCPP20MeasurandEnumType.ENERGY_REACTIVE_EXPORT_INTERVAL, + OCPP20MeasurandEnumType.ENERGY_REACTIVE_IMPORT_INTERVAL, + OCPP20MeasurandEnumType.FREQUENCY, + OCPP20MeasurandEnumType.POWER_ACTIVE_EXPORT, + OCPP20MeasurandEnumType.POWER_ACTIVE_IMPORT, + OCPP20MeasurandEnumType.POWER_FACTOR, + OCPP20MeasurandEnumType.POWER_OFFERED, + OCPP20MeasurandEnumType.POWER_REACTIVE_EXPORT, + OCPP20MeasurandEnumType.POWER_REACTIVE_IMPORT, + OCPP20MeasurandEnumType.STATE_OF_CHARGE, + OCPP20MeasurandEnumType.VOLTAGE, + ], + mutability: MutabilityEnumType.ReadWrite, + persistence: PersistenceEnumType.Persistent, + required: true, + supportedAttributes: [AttributeEnumType.Actual], + variable: OCPP20RequiredVariableName.Measurands, + }, [buildRegistryKey( OCPP20ComponentName.AlignedDataCtrlr, OCPP20RequiredVariableName.TxEndedMeasurands diff --git a/src/types/ocpp/2.0/Variables.ts b/src/types/ocpp/2.0/Variables.ts index a7e0651c..7a4360e5 100644 --- a/src/types/ocpp/2.0/Variables.ts +++ b/src/types/ocpp/2.0/Variables.ts @@ -53,6 +53,7 @@ export enum OCPP20RequiredVariableName { ItemsPerMessage = 'ItemsPerMessage', LocalAuthorizationOffline = 'LocalAuthorizationOffline', LocalPreAuthorization = 'LocalPreAuthorization', + Measurands = 'Measurands', MessageAttemptInterval = 'MessageAttemptInterval', MessageAttempts = 'MessageAttempts', MessageTimeout = 'MessageTimeout', -- 2.53.0