4.0.0 (2026-03-28)
⚠ BREAKING CHANGES
- connectors and evses Maps are now private on ChargingStation. Use iterateConnectors(), iterateEvses(), hasEvse(), getEvseStatus(), getConnectorStatus() instead of direct Map access.
🚀 Features
- enrich OCPP 2.0 template with OCPP 1.6 equivalent config keys (a2fc938)
- implement TxEnded meter value accumulator per OCPP 2.0.1 spec §2.1 (4ca2e99)
- log once per key when OCPP 1.6 configuration key is remapped to OCPP 2.0 variable (d2ee9aa)
- resolve OCPP 1.6 configuration keys to OCPP 2.0 equivalents transparently (66b8ba4)
- support configurable measurands per transaction stage in OCPP 2.0 (3196f5d)
🐞 Bug Fixes
- align ConnectionTimeOut semantics with OCPP spec (97cb0e1)
- align OCPP 2.0 variable names to spec (LocalPreAuthorization, LocalAuthorizationOffline) (405ad5f)
- correct WebSocketPingInterval documentation and registry default (06f62f7)
- deps: add security overrides for brace-expansion, picomatch, smol-toml (816ea7a)
- deps: update all non-major dependencies (#1759) (5a31d2b)
- docs: use bold instead of italic for vendor-specific markers to avoid underscore conflicts (d7c72e2)
- map WebSocketPingInterval to OCPPCommCtrlr per OCPP 2.0.1 spec (12650b2)
- remove OrganizationName from ISO15118Ctrlr (spec says SecurityCtrlr only) (f1107d5)
- replace incorrect zero fallbacks for maximumPower and maximumAmperage (e5f8aed)
- type buildRejected reasonCode as ReasonCodeEnumType instead of string (ae9f9cd)
- use case-insensitive boolean parsing for OCPP configuration values (bae2346)
- use Component.Variable[.Instance] key format for OCPP 2.0 variable persistence (f7e682f)
- use OCPP version-specific parameter keys for meter value measurands (5723899)
✨ Polish
- accept enum types in registry/manager signatures, remove 429 redundant as-string casts (436d8ef)
- add Enabled to OCPP20RequiredVariableName enum and fix LocalAuthListCtrlr.Enabled mapping (e0617e0)
- add SimulateSignatureVerificationFailure to OCPP20VendorVariableName enum (15ab6c8)
- align intermediate variable naming with codebase conventions (ebe64c9)
- align variable naming and remove non-null assertions in tests and UI (75cb24c)
- centralize handler type bridges in OCPP base classes (5bd5b13)
- consolidate enforceMessageLimits types with generic R and RejectionReason (e6bc461)
- deduplicate imports (c5545f1)
- eliminate all non-null assertion suppressions with proper null guards (5959eb2)
- eliminate explicit
anyfromonce()andtoHandler()with proper generics (0d41439) - encapsulate connector/EVSE iteration behind generator API (404ba5d)
- extract normalized boolean variable in validation checks (16679b7)
- harmonize connector iteration to use iterateConnectors() across prod and tests (0375fa4)
- harmonize errMsg → errorMsg for intra-file naming consistency (e76a841)
- make
eventTyperequired inOCPP20TransactionEventOptions(243cf56) - move ConfigurationValueSize, ReportingValueSize, ValueSize to OCPP20OptionalVariableName (1d0814f)
- move debug param to last position in buildMeterValue (7cd25ce)
- replace Measurands string literal with OCPP20RequiredVariableName enum (1f2723b)
- type buildTransactionEvent with OCPP20TransactionEventOptions (b6de95e)
- type deprecated config key maps with
keyofto eliminate 4 casts (29a04ab) - use
JsonObjectand genericOCPPAuthAdapterin auth module (d93b534) - use
OCPP20MessageFormatEnumTypeinstead of string literal union (5f24ad5) - use Number.isNaN() instead of global isNaN() (6a360ba)
- use OCPP20RequiredVariableName for measurands in OCPP20ServiceUtils (811f142)
🧪 Tests
- add symmetric Ended meter value tests for start/stop/zero-interval (689e439)
- add whitespace-padded value coverage for convertToBoolean (7c9443f)
- isolate readCombinedLog tests from real logs directory (1c52a65)
- restore and harmonize OCPP 2.0 transaction meter value assertions (ea3eb1e)
📚 Documentation
- align README OCPP 2.0.1 variable list with code registry (ba64338)
- list OCPP 2.0 device model variables by component in README (9b3547f)
webui: 4.0.0
4.0.0 (2026-03-28)
⚠ BREAKING CHANGES
- connectors and evses Maps are now private on ChargingStation. Use iterateConnectors(), iterateEvses(), hasEvse(), getEvseStatus(), getConnectorStatus() instead of direct Map access.
🚀 Features
- support configurable measurands per transaction stage in OCPP 2.0 (3196f5d)
🐞 Bug Fixes
- deps: update all non-major dependencies (#1759) (5a31d2b)
- use case-insensitive boolean parsing for OCPP configuration values (bae2346)
✨ Polish
- align variable naming and remove non-null assertions in tests and UI (75cb24c)
- encapsulate connector/EVSE iteration behind generator API (404ba5d)
🧪 Tests
- add whitespace-padded value coverage for convertToBoolean (7c9443f)
ocpp-server: 4.0.0