// Allow size limit variables to remain intentionally unset.
if (
variableMetadata.variable ===
- (OCPP20RequiredVariableName.ConfigurationValueSize as string) ||
- variableMetadata.variable === (OCPP20RequiredVariableName.ValueSize as string) ||
- variableMetadata.variable === (OCPP20RequiredVariableName.ReportingValueSize as string)
+ (OCPP20OptionalVariableName.ConfigurationValueSize as string) ||
+ variableMetadata.variable === (OCPP20OptionalVariableName.ValueSize as string) ||
+ variableMetadata.variable === (OCPP20OptionalVariableName.ReportingValueSize as string)
) {
continue
}
const reportingValueSizeKey = buildCaseInsensitiveCompositeKey(
OCPP20ComponentName.DeviceDataCtrlr,
undefined,
- OCPP20RequiredVariableName.ReportingValueSize
+ OCPP20OptionalVariableName.ReportingValueSize
)
// ValueSize truncation applied before ReportingValueSize if present
const valueSizeKey = buildCaseInsensitiveCompositeKey(
OCPP20ComponentName.DeviceDataCtrlr,
undefined,
- OCPP20RequiredVariableName.ValueSize
+ OCPP20OptionalVariableName.ValueSize
)
let valueSize: string | undefined
let reportingValueSize: string | undefined
if (!invalidVariables.has(valueSizeKey)) {
valueSize = getConfigurationKey(
chargingStation,
- buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20RequiredVariableName.ValueSize)
+ buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20OptionalVariableName.ValueSize)
)?.value
}
if (!invalidVariables.has(reportingValueSizeKey)) {
chargingStation,
buildConfigKey(
OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ReportingValueSize
+ OCPP20OptionalVariableName.ReportingValueSize
)
)?.value
}
const configurationValueSizeKey = buildCaseInsensitiveCompositeKey(
OCPP20ComponentName.DeviceDataCtrlr,
undefined,
- OCPP20RequiredVariableName.ConfigurationValueSize
+ OCPP20OptionalVariableName.ConfigurationValueSize
)
const valueSizeKey = buildCaseInsensitiveCompositeKey(
OCPP20ComponentName.DeviceDataCtrlr,
undefined,
- OCPP20RequiredVariableName.ValueSize
+ OCPP20OptionalVariableName.ValueSize
)
let configurationValueSizeRaw: string | undefined
let valueSizeRaw: string | undefined
chargingStation,
buildConfigKey(
OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ConfigurationValueSize
+ OCPP20OptionalVariableName.ConfigurationValueSize
)
)?.value
}
if (!invalidVariables.has(valueSizeKey)) {
valueSizeRaw = getConfigurationKey(
chargingStation,
- buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20RequiredVariableName.ValueSize)
+ buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20OptionalVariableName.ValueSize)
)?.value
}
const cfgLimit = convertToIntOrNaN(configurationValueSizeRaw ?? '')
variable: OCPP20RequiredVariableName.TimeSource,
},
+ // Value size family: ValueSize (broadest), ConfigurationValueSize (affects setting), ReportingValueSize (affects reporting). Simulator sets same absolute cap; truncate occurs at reporting step.
+ [buildRegistryKey(
+ OCPP20ComponentName.DeviceDataCtrlr,
+ OCPP20OptionalVariableName.ConfigurationValueSize
+ )]: {
+ component: OCPP20ComponentName.DeviceDataCtrlr,
+ dataType: DataEnumType.integer,
+ defaultValue: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH.toString(),
+ description: 'Maximum size allowed for configuration values when setting.',
+ max: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH,
+ maxLength: 5,
+ min: 1,
+ mutability: MutabilityEnumType.ReadOnly,
+ persistence: PersistenceEnumType.Persistent,
+ positive: true,
+ supportedAttributes: [AttributeEnumType.Actual],
+ unit: OCPP20UnitEnumType.CHARS,
+ variable: OCPP20OptionalVariableName.ConfigurationValueSize,
+ },
+ [buildRegistryKey(
+ OCPP20ComponentName.DeviceDataCtrlr,
+ OCPP20OptionalVariableName.ReportingValueSize
+ )]: {
+ component: OCPP20ComponentName.DeviceDataCtrlr,
+ dataType: DataEnumType.integer,
+ defaultValue: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH.toString(),
+ description: 'Maximum size of reported values.',
+ max: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH,
+ maxLength: 5,
+ min: 1,
+ mutability: MutabilityEnumType.ReadOnly,
+ persistence: PersistenceEnumType.Persistent,
+ positive: true,
+ supportedAttributes: [AttributeEnumType.Actual],
+ unit: OCPP20UnitEnumType.CHARS,
+ variable: OCPP20OptionalVariableName.ReportingValueSize,
+ },
+ [buildRegistryKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20OptionalVariableName.ValueSize)]: {
+ component: OCPP20ComponentName.DeviceDataCtrlr,
+ dataType: DataEnumType.integer,
+ defaultValue: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH.toString(),
+ description: 'Unified maximum size for any stored or reported value.',
+ max: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH,
+ maxLength: 5,
+ min: 1,
+ mutability: MutabilityEnumType.ReadOnly,
+ persistence: PersistenceEnumType.Persistent,
+ positive: true,
+ supportedAttributes: [AttributeEnumType.Actual],
+ unit: OCPP20UnitEnumType.CHARS,
+ variable: OCPP20OptionalVariableName.ValueSize,
+ },
// DeviceDataCtrlr Component
[buildRegistryKey(
OCPP20ComponentName.DeviceDataCtrlr,
supportedAttributes: [AttributeEnumType.Actual],
variable: OCPP20RequiredVariableName.BytesPerMessage,
},
- // Value size family: ValueSize (broadest), ConfigurationValueSize (affects setting), ReportingValueSize (affects reporting). Simulator sets same absolute cap; truncate occurs at reporting step.
- [buildRegistryKey(
- OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ConfigurationValueSize
- )]: {
- component: OCPP20ComponentName.DeviceDataCtrlr,
- dataType: DataEnumType.integer,
- defaultValue: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH.toString(),
- description: 'Maximum size allowed for configuration values when setting.',
- max: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH,
- maxLength: 5,
- min: 1,
- mutability: MutabilityEnumType.ReadOnly,
- persistence: PersistenceEnumType.Persistent,
- positive: true,
- supportedAttributes: [AttributeEnumType.Actual],
- unit: OCPP20UnitEnumType.CHARS,
- variable: OCPP20RequiredVariableName.ConfigurationValueSize,
- },
[buildRegistryKey(
OCPP20ComponentName.DeviceDataCtrlr,
OCPP20RequiredVariableName.ItemsPerMessage,
supportedAttributes: [AttributeEnumType.Actual],
variable: OCPP20RequiredVariableName.ItemsPerMessage,
},
- [buildRegistryKey(
- OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ReportingValueSize
- )]: {
- component: OCPP20ComponentName.DeviceDataCtrlr,
- dataType: DataEnumType.integer,
- defaultValue: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH.toString(),
- description: 'Maximum size of reported values.',
- max: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH,
- maxLength: 5,
- min: 1,
- mutability: MutabilityEnumType.ReadOnly,
- persistence: PersistenceEnumType.Persistent,
- positive: true,
- supportedAttributes: [AttributeEnumType.Actual],
- unit: OCPP20UnitEnumType.CHARS,
- variable: OCPP20RequiredVariableName.ReportingValueSize,
- },
- [buildRegistryKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20RequiredVariableName.ValueSize)]: {
- component: OCPP20ComponentName.DeviceDataCtrlr,
- dataType: DataEnumType.integer,
- defaultValue: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH.toString(),
- description: 'Unified maximum size for any stored or reported value.',
- max: Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH,
- maxLength: 5,
- min: 1,
- mutability: MutabilityEnumType.ReadOnly,
- persistence: PersistenceEnumType.Persistent,
- positive: true,
- supportedAttributes: [AttributeEnumType.Actual],
- unit: OCPP20UnitEnumType.CHARS,
- variable: OCPP20RequiredVariableName.ValueSize,
- },
// EVSE Component
[buildRegistryKey(OCPP20ComponentName.EVSE, 'AllowReset')]: {
}
export enum OCPP20OptionalVariableName {
+ ConfigurationValueSize = 'ConfigurationValueSize',
HeartbeatInterval = 'HeartbeatInterval',
MaxCertificateChainSize = 'MaxCertificateChainSize',
MaxEnergyOnInvalidId = 'MaxEnergyOnInvalidId',
NonEvseSpecific = 'NonEvseSpecific',
+ ReportingValueSize = 'ReportingValueSize',
+ ValueSize = 'ValueSize',
WebSocketPingInterval = 'WebSocketPingInterval',
}
AuthorizeRemoteStart = 'AuthorizeRemoteStart',
BytesPerMessage = 'BytesPerMessage',
CertificateEntries = 'CertificateEntries',
- ConfigurationValueSize = 'ConfigurationValueSize',
DateTime = 'DateTime',
Enabled = 'Enabled',
EVConnectionTimeOut = 'EVConnectionTimeOut',
NetworkProfileConnectionAttempts = 'NetworkProfileConnectionAttempts',
OfflineThreshold = 'OfflineThreshold',
OrganizationName = 'OrganizationName',
- ReportingValueSize = 'ReportingValueSize',
ResetRetries = 'ResetRetries',
SecurityProfile = 'SecurityProfile',
StopTxOnEVSideDisconnect = 'StopTxOnEVSideDisconnect',
TxUpdatedInterval = 'TxUpdatedInterval',
TxUpdatedMeasurands = 'TxUpdatedMeasurands',
UnlockOnEVSideDisconnect = 'UnlockOnEVSideDisconnect',
- ValueSize = 'ValueSize',
}
export enum OCPP20VendorVariableName {
getVariableData: [
{
component: { name: OCPP20ComponentName.DeviceDataCtrlr },
- variable: { name: OCPP20RequiredVariableName.ReportingValueSize },
+ variable: { name: OCPP20OptionalVariableName.ReportingValueSize },
},
],
}
setConfigurationValueSize(mockStation, 100)
upsertConfigurationKey(
mockStation,
- buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20RequiredVariableName.ValueSize),
+ buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20OptionalVariableName.ValueSize),
''
)
const prefix = 'wss://example.com/'
mockStation,
buildConfigKey(
OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ConfigurationValueSize
+ OCPP20OptionalVariableName.ConfigurationValueSize
),
''
)
HashAlgorithmEnumType,
OCPP20ComponentName,
OCPP20IdTokenEnumType,
+ OCPP20OptionalVariableName,
OCPP20RequiredVariableName,
OCPPVersion,
} from '../../../../src/types/index.js'
chargingStation,
buildConfigKey(
OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ReportingValueSize
+ OCPP20OptionalVariableName.ReportingValueSize
),
Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH.toString()
)
chargingStation,
buildConfigKey(
OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ConfigurationValueSize
+ OCPP20OptionalVariableName.ConfigurationValueSize
),
Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH.toString()
)
upsertConfigurationKey(
chargingStation,
- buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20RequiredVariableName.ValueSize),
+ buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20OptionalVariableName.ValueSize),
Constants.OCPP_VALUE_ABSOLUTE_MAX_LENGTH.toString()
)
}
chargingStation,
buildConfigKey(
OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ConfigurationValueSize
+ OCPP20OptionalVariableName.ConfigurationValueSize
),
size.toString()
)
chargingStation,
buildConfigKey(
OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ReportingValueSize
+ OCPP20OptionalVariableName.ReportingValueSize
),
size.toString()
)
export function setValueSize (chargingStation: ChargingStation, size: number) {
upsertConfigurationKey(
chargingStation,
- buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20RequiredVariableName.ValueSize),
+ buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20OptionalVariableName.ValueSize),
size.toString()
)
}
// remove ValueSize to simulate unset
deleteConfigurationKey(
station,
- buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20RequiredVariableName.ValueSize),
+ buildConfigKey(OCPP20ComponentName.DeviceDataCtrlr, OCPP20OptionalVariableName.ValueSize),
{ save: false }
)
const okRes = manager.setVariables(station, [
station,
buildConfigKey(
OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ConfigurationValueSize
+ OCPP20OptionalVariableName.ConfigurationValueSize
),
{ save: false }
)
station,
buildConfigKey(
OCPP20ComponentName.DeviceDataCtrlr,
- OCPP20RequiredVariableName.ReportingValueSize
+ OCPP20OptionalVariableName.ReportingValueSize
),
{ save: false }
)