]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
fix(ocpp2.0): align VARIABLE_REGISTRY spec conformance and log severity
authorJérôme Benoit <jerome.benoit@sap.com>
Fri, 20 Mar 2026 18:23:38 +0000 (19:23 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Fri, 20 Mar 2026 18:23:38 +0000 (19:23 +0100)
Distinguish required vs optional variables per OCPP 2.0.1 spec
(dm_components_vars.csv). Missing required variables log as error,
missing optional ones as warning. Tag 58 spec-required entries with
required: true and 6 non-spec entries with vendorSpecific: true.

src/charging-station/ocpp/2.0/OCPP20VariableManager.ts
src/charging-station/ocpp/2.0/OCPP20VariableRegistry.ts

index 94a59a273da0259ea5d84baef59add005af03556..4a152be5580a13e552f6832139487710a1a7d6ad 100644 (file)
@@ -293,9 +293,15 @@ export class OCPP20VariableManager {
           )
         } else {
           invalidVariables.add(variableKey)
-          logger.error(
-            `${chargingStation.logPrefix()} Missing configuration key mapping and no default for variable '${configurationKeyName}'`
-          )
+          if (variableMetadata.required === true) {
+            logger.error(
+              `${chargingStation.logPrefix()} Missing required configuration key mapping and no default for variable '${configurationKeyName}'`
+            )
+          } else {
+            logger.warn(
+              `${chargingStation.logPrefix()} Missing optional configuration key mapping and no default for variable '${configurationKeyName}'`
+            )
+          }
         }
       }
     }
index c4eaa2aabf72e72f407fafd33fbc275d117c9c02..c10821914a84ea58ede338758ba4fcd723cd202d 100644 (file)
@@ -67,6 +67,12 @@ export interface VariableMetadata {
   positive?: boolean
   postProcess?: (value: string, ctx: { chargingStation: ChargingStation }) => string
   rebootRequired?: boolean
+  /**
+   * Whether this variable is required per OCPP 2.0.1 spec (dm_components_vars.csv Required? column).
+   * When true, a missing configuration key with no default triggers an error;
+   * when false or omitted (default), it triggers a warning.
+   */
+  required?: boolean
   supportedAttributes: AttributeEnumType[]
   supportsTarget?: boolean
   unit?: OCPP20UnitEnumType
@@ -131,6 +137,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.SECONDS,
     variable: 'Interval',
@@ -165,6 +172,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     ],
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'Measurands',
   },
@@ -199,6 +207,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.SECONDS,
     variable: 'TxEndedInterval',
@@ -233,6 +242,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     ],
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.TxEndedMeasurands,
   },
@@ -378,6 +388,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     description: 'Whether remote start requires authorization.',
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Volatile,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.AuthorizeRemoteStart as string,
   },
@@ -391,6 +402,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     description: 'Start transaction offline for locally authorized identifiers.',
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.LocalAuthorizeOffline as string,
   },
@@ -404,6 +416,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     description: 'Start transaction locally without waiting for CSMS authorization.',
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.LocalPreAuthorize as string,
   },
@@ -503,6 +516,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     description: 'Component exists (ChargingStation level).',
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'Available',
   },
@@ -525,6 +539,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'SupplyPhases',
   },
@@ -548,6 +563,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     enumeration: ['Operative', 'Inoperative'],
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20DeviceInfoVariableName.AvailabilityState as string,
   },
@@ -569,6 +585,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.SECONDS,
     variable: OCPP20OptionalVariableName.WebSocketPingInterval as string,
+    vendorSpecific: true,
   },
   [buildRegistryKey(
     OCPP20ComponentName.ChargingStation as string,
@@ -656,6 +673,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
       dynamicValueResolver: () => new Date().toISOString(),
       mutability: MutabilityEnumType.ReadOnly,
       persistence: PersistenceEnumType.Volatile,
+      required: true,
       supportedAttributes: [AttributeEnumType.Actual],
       variable: OCPP20RequiredVariableName.DateTime as string,
     },
@@ -677,6 +695,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     ],
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.TimeSource as string,
   },
@@ -697,6 +716,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     positive: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.BytesPerMessage as string,
+    vendorSpecific: true,
   },
   [buildRegistryKey(
     OCPP20ComponentName.DeviceDataCtrlr as string,
@@ -713,6 +733,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.BytesPerMessage as string,
   },
@@ -731,6 +752,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.BytesPerMessage as string,
   },
@@ -749,6 +771,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.BytesPerMessage as string,
   },
@@ -786,6 +809,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.ItemsPerMessage as string,
   },
@@ -804,6 +828,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.ItemsPerMessage as string,
   },
@@ -822,6 +847,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.ItemsPerMessage as string,
   },
@@ -881,6 +907,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     enumeration: ['Operative', 'Inoperative'],
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Volatile,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20DeviceInfoVariableName.AvailabilityState,
   },
@@ -891,6 +918,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     description: 'Component exists',
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'Available',
   },
@@ -926,6 +954,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     description: 'The maximum power that this EVSE can provide and instantaneous power',
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Volatile,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual, AttributeEnumType.MaxSet],
     supportsTarget: false,
     unit: OCPP20UnitEnumType.WATT,
@@ -940,6 +969,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'SupplyPhases',
   },
@@ -981,6 +1011,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
       'If this variable is true, then Charging Station will try to validate a contract certificate when it is offline',
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'ContractValidationOffline',
   },
@@ -1102,6 +1133,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.BytesPerMessage,
   },
@@ -1135,6 +1167,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 0,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Volatile,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'Entries',
   },
@@ -1146,6 +1179,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.ItemsPerMessage,
   },
@@ -1231,6 +1265,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.BytesPerMessage,
   },
@@ -1274,6 +1309,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.ItemsPerMessage,
   },
@@ -1433,6 +1469,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     enumeration: ['HTTP', 'HTTPS', 'FTP', 'FTPS', 'SFTP'],
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.FileTransferProtocols as string,
   },
@@ -1451,6 +1488,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.SECONDS,
     variable: OCPP20RequiredVariableName.MessageAttemptInterval as string,
@@ -1470,6 +1508,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.MessageAttempts as string,
   },
@@ -1488,6 +1527,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.SECONDS,
     variable: OCPP20RequiredVariableName.MessageTimeout as string,
@@ -1503,6 +1543,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     enumeration: ['1', '2', '3'],
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.NetworkConfigurationPriority as string,
   },
@@ -1518,6 +1559,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.NetworkProfileConnectionAttempts as string,
   },
@@ -1534,6 +1576,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.SECONDS,
     variable: OCPP20RequiredVariableName.OfflineThreshold as string,
@@ -1551,6 +1594,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 0,
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.ResetRetries as string,
   },
@@ -1564,6 +1608,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     description: 'Unlock cable when unplugged at EV side.',
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.UnlockOnEVSideDisconnect as string,
   },
@@ -1654,6 +1699,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.SECONDS,
     variable: 'TxEndedInterval',
@@ -1671,6 +1717,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.AMP,
     variable: OCPP20MeasurandEnumType.CURRENT_IMPORT,
+    vendorSpecific: true,
   },
   [buildRegistryKey(
     OCPP20ComponentName.SampledDataCtrlr as string,
@@ -1685,6 +1732,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.WATT_HOUR,
     variable: OCPP20MeasurandEnumType.ENERGY_ACTIVE_IMPORT_REGISTER,
+    vendorSpecific: true,
   },
   [buildRegistryKey(
     OCPP20ComponentName.SampledDataCtrlr as string,
@@ -1699,6 +1747,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.WATT,
     variable: OCPP20MeasurandEnumType.POWER_ACTIVE_IMPORT,
+    vendorSpecific: true,
   },
   [buildRegistryKey(
     OCPP20ComponentName.SampledDataCtrlr as string,
@@ -1713,6 +1762,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.VOLT,
     variable: OCPP20MeasurandEnumType.VOLTAGE,
+    vendorSpecific: true,
   },
   [buildRegistryKey(
     OCPP20ComponentName.SampledDataCtrlr as string,
@@ -1741,6 +1791,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     ],
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.TxEndedMeasurands as string,
   },
@@ -1770,6 +1821,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     ],
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.TxStartedMeasurands as string,
   },
@@ -1788,6 +1840,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Volatile,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.SECONDS,
     variable: OCPP20RequiredVariableName.TxUpdatedInterval as string,
@@ -1818,6 +1871,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     ],
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.TxUpdatedMeasurands as string,
   },
@@ -1900,6 +1954,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 0,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.CertificateEntries as string,
   },
@@ -1915,6 +1970,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
     rebootRequired: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.OrganizationName as string,
   },
@@ -1935,6 +1991,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     persistence: PersistenceEnumType.Persistent,
     positive: true,
     rebootRequired: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.SecurityProfile as string,
   },
@@ -2001,6 +2058,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 0,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Volatile,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'Entries',
   },
@@ -2028,6 +2086,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 0.0,
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.PERCENT,
     variable: 'LimitChangeSignificance',
@@ -2054,6 +2113,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 1,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'PeriodsPerSchedule',
   },
@@ -2077,6 +2137,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     min: 0,
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'ProfileStackLevel',
   },
@@ -2089,6 +2150,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     enumeration: ['A', 'W'],
     mutability: MutabilityEnumType.ReadOnly,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'RateUnit',
   },
@@ -2124,6 +2186,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     maxLength: 3,
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'Currency',
   },
@@ -2158,6 +2221,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     maxLength: 512,
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'TariffFallbackMessage',
   },
@@ -2170,6 +2234,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     maxLength: 512,
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: 'TotalCostFallbackMessage',
   },
@@ -2222,6 +2287,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
     positive: true,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     unit: OCPP20UnitEnumType.SECONDS,
     variable: OCPP20RequiredVariableName.EVConnectionTimeOut as string,
@@ -2236,6 +2302,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     description: 'Deauthorize transaction when cable unplugged at EV.',
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.StopTxOnEVSideDisconnect as string,
   },
@@ -2249,6 +2316,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     description: 'Deauthorize transaction on invalid id token status.',
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.StopTxOnInvalidId as string,
   },
@@ -2270,6 +2338,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
     ],
     mutability: MutabilityEnumType.ReadWrite,
     persistence: PersistenceEnumType.Persistent,
+    required: true,
     supportedAttributes: [AttributeEnumType.Actual],
     variable: OCPP20RequiredVariableName.TxStartPoint as string,
   },
@@ -2288,6 +2357,7 @@ export const VARIABLE_REGISTRY: Record<string, VariableMetadata> = {
       ],
       mutability: MutabilityEnumType.ReadWrite,
       persistence: PersistenceEnumType.Persistent,
+      required: true,
       supportedAttributes: [AttributeEnumType.Actual],
       variable: OCPP20RequiredVariableName.TxStopPoint as string,
     },