Standard Configuration Key Names & Values
Based on OCPP 1.6 Edition 2 FINAL, Section 9 (normative). This guide covers all standardized configuration keys organized by Feature Profile, accessed via GetConfiguration and ChangeConfiguration operations.
1. Overview
IntroductionThis section defines all standardized configuration keys for OCPP 1.6 Charge Points.
Configuration keys are organized by Feature Profile and are accessed via the GetConfiguration and ChangeConfiguration operations.
How Configuration Keys Work
Configuration keys are read and written using two CSMS-initiated operations:
| Operation | Direction | Purpose |
|---|---|---|
GetConfiguration | Central System → Charge Point | Read configuration values |
ChangeConfiguration | Central System → Charge Point | Write configuration values |
GetConfiguration (Section 5.8)
The Central System sends a GetConfiguration.req PDU to retrieve configuration values.
- If the
keylist is empty or omitted, the Charge Point returns all configuration settings. - Otherwise, it returns only the recognized keys requested. Unrecognized keys are placed in the
unknownKeylist. - The maximum number of keys per request may be limited by the
GetConfigurationMaxKeysconfiguration key.
{
"key": ["string"] // optional, array of key names (maxLength: 50 each)
}{
"configurationKey": [ // optional, array of known keys
{
"key": "string", // required, maxLength: 50
"readonly": true, // required, boolean
"value": "string" // optional, maxLength: 500
}
],
"unknownKey": ["string"] // optional, array of unrecognized key names
}ChangeConfiguration (Section 5.3)
The Central System sends a ChangeConfiguration.req PDU to change a configuration parameter.
{
"key": "string", // required, maxLength: 50
"value": "string" // required, maxLength: 500
}{
"status": "string" // required, enum: Accepted | Rejected | RebootRequired | NotSupported
}Response Status Rules
| Status | Condition |
|---|---|
Accepted | Change applied successfully and effective immediately |
RebootRequired | Change applied successfully but requires reboot to take effect |
NotSupported | Key does not correspond to a supported configuration setting |
Rejected | Charge Point did not set the configuration (e.g., out-of-range value, wrong format) |
Key Properties
Each configuration key has these properties:
| Property | Description |
|---|---|
| Required/optional | Whether a Charge Point supporting this profile MUST implement the key |
| Accessibility | R = read-only, RW = read-write.
Read-only keys can be read via GetConfiguration but not written.
Read-write keys can also be written via ChangeConfiguration. |
| Type | boolean, integer, or CSL (Comma Separated List) |
| Unit | The unit of measurement (seconds, times, Wh, %, etc.) — only for integer keys |
Rules for Optional Boolean Configuration Keys
For optional boolean configuration keys returned in a GetConfiguration.conf (without a key list):
Key is present
The Charge Point provides the functionality configured by the key. It can be enabled/disabled by setting the value.
Key is not present
The Charge Point does NOT provide the functionality that can be configured by the key.
CSL Keys and MaxLength
If a key value is defined as a CSL, it MAY be accompanied by a [KeyName]MaxLength key indicating the max length of the CSL in items.
If [KeyName]MaxLength is not set, a safe value of 1 item SHOULD be assumed.
2. Core Profile
Section 9.1These keys belong to the Core feature profile. Required keys MUST be supported by any Charge Point that supports the Core profile.
Authorization & Transaction Control
| Key | Req/Opt | Access | Type | Description |
|---|---|---|---|---|
AllowOfflineTxForUnknownId | optional | RW | boolean | If true, Unknown Offline Authorization is enabled. If this key exists, the CP supports Unknown Offline Authorization. |
AuthorizationCacheEnabled | optional | RW | boolean | If true, the Authorization Cache is enabled. If this key exists, the CP supports an Authorization Cache. |
AuthorizeRemoteTxRequests | required | R or RW | boolean | Whether a remote request to start a transaction should be authorized like a local action before starting. Choice of R or RW is up to CP implementation. |
LocalAuthorizeOffline | required | RW | boolean | Whether the CP, when offline, will start a transaction for locally-authorized identifiers. |
LocalPreAuthorize | required | RW | boolean | Whether the CP, when online, will start a transaction for locally-authorized identifiers without waiting for or requesting an Authorize.conf. |
MaxEnergyOnInvalidId | optional | RW | integer (Wh) | Maximum energy in Wh delivered when an identifier is invalidated by the Central System after start of a transaction. |
StopTransactionOnInvalidId | required | RW | boolean | Whether the CP will stop an ongoing transaction when it receives a non-Accepted authorization status in a StartTransaction.conf. |
StopTransactionOnEVSideDisconnect | required | RW | boolean | When true, the CP SHALL administratively stop the transaction when the cable is unplugged from the EV. |
Connection & Heartbeat
| Key | Req/Opt | Access | Type | Unit | Description |
|---|---|---|---|---|---|
ConnectionTimeOut | required | RW | integer | seconds | Interval from beginning of status 'Preparing' until incipient Transaction is automatically canceled, due to failure of EV driver to insert the charging cable connector(s). The CP SHALL go back to 'Available'. |
HeartbeatInterval | required | RW | integer | seconds | Interval of inactivity (no OCPP exchanges) with Central System after which the CP should send a Heartbeat.req PDU. |
WebSocketPingInterval | optional | RW | integer | seconds | Only relevant for websocket implementations. 0 disables client side websocket Ping/Pong. Positive values are seconds between pings. Negative values are not allowed. |
ResetRetries | required | RW | integer | times | Number of times to retry an unsuccessful reset of the Charge Point. |
Metering Configuration
| Key | Req/Opt | Access | Type | Description |
|---|---|---|---|---|
ClockAlignedDataInterval | required | RW | integer (s) | Size (in seconds) of the clock-aligned data interval, starting at 00:00:00 (midnight). For example, 900 (15 minutes) means 96 intervals per day. A value of 0 means no clock-aligned data is transmitted. |
MeterValuesAlignedData | required | RW | CSL | Clock-aligned measurand(s) to be included in a MeterValues.req PDU, every ClockAlignedDataInterval seconds. |
MeterValuesAlignedDataMaxLength | optional | R | integer | Maximum number of items in MeterValuesAlignedData. |
MeterValuesSampledData | required | RW | CSL | Sampled measurands to be included in a MeterValues.req PDU. Default: "Energy.Active.Import.Register". |
MeterValuesSampledDataMaxLength | optional | R | integer | Maximum number of items in MeterValuesSampledData. |
MeterValueSampleInterval | required | RW | integer (s) | Interval between sampling of metering data, transmitted by MeterValues PDUs. A value of 0 means no sampled data is transmitted. |
Transaction Stop Metering
| Key | Req/Opt | Access | Type | Description |
|---|---|---|---|---|
StopTxnAlignedData | required | RW | CSL | Clock-aligned periodic measurand(s) to be included in the TransactionData element of StopTransaction.req / MeterValues.req. |
StopTxnAlignedDataMaxLength | optional | R | integer | Maximum number of items in StopTxnAlignedData. |
StopTxnSampledData | required | RW | CSL | Sampled measurands to be included in the TransactionData element of StopTransaction.req PDU. |
StopTxnSampledDataMaxLength | optional | R | integer | Maximum number of items in StopTxnSampledData. |
Charge Point Information
| Key | Req/Opt | Access | Type | Description |
|---|---|---|---|---|
NumberOfConnectors | required | R | integer | The number of physical charging connectors of this Charge Point. |
ConnectorPhaseRotation | required | RW | CSL | The phase rotation per connector. Format: 0.RST, 1.RST, 2.RTS. |
ConnectorPhaseRotationMaxLength | optional | R | integer | Maximum number of items in ConnectorPhaseRotation. |
SupportedFeatureProfiles | required | R | CSL | A list of supported Feature Profiles: Core, FirmwareManagement, LocalAuthListManagement, Reservation, SmartCharging, RemoteTrigger. |
SupportedFeatureProfilesMaxLength | optional | R | integer | Maximum number of items in SupportedFeatureProfiles. |
GetConfigurationMaxKeys | required | R | integer | Maximum number of requested configuration keys in a GetConfiguration.req PDU. |
Visual & Status
| Key | Req/Opt | Access | Type | Unit | Description |
|---|---|---|---|---|---|
BlinkRepeat | optional | RW | integer | times | Number of times to blink Charge Point lighting when signalling. |
LightIntensity | optional | RW | integer | % | Percentage of maximum intensity at which to illuminate Charge Point lighting. |
MinimumStatusDuration | optional | RW | integer | seconds | The minimum duration that a Charge Point or Connector status is stable before a StatusNotification.req PDU is sent. |
Transaction Message Retry
| Key | Req/Opt | Access | Type | Unit | Description |
|---|---|---|---|---|---|
TransactionMessageAttempts | required | RW | integer | times | How often the Charge Point should try to submit a transaction-related message when the Central System fails to process it. |
TransactionMessageRetryInterval | required | RW | integer | seconds | How long the Charge Point should wait before resubmitting a transaction-related message that the Central System failed to process. |
Connector Behavior
| Key | Req/Opt | Access | Type | Description |
|---|---|---|---|---|
UnlockConnectorOnEVSideDisconnect | required | RW | boolean | When true, the Charge Point SHALL unlock the cable on Charge Point side when the cable is unplugged at the EV. |
Measurand Reference
Core ProfileThe CSL metering keys (MeterValuesSampledData, MeterValuesAlignedData, StopTxnSampledData, StopTxnAlignedData) accept values from the Measurand enum:
| Measurand | Description | Default Unit |
|---|---|---|
Energy.Active.Export.Register | Active energy exported (to grid), register value | Wh |
Energy.Active.Import.Register | Active energy imported (from grid), register value — default measurand | Wh |
Energy.Reactive.Export.Register | Reactive energy exported, register value | varh |
Energy.Reactive.Import.Register | Reactive energy imported, register value | varh |
Energy.Active.Export.Interval | Active energy exported per interval | Wh |
Energy.Active.Import.Interval | Active energy imported per interval | Wh |
Energy.Reactive.Export.Interval | Reactive energy exported per interval | varh |
Energy.Reactive.Import.Interval | Reactive energy imported per interval | varh |
Power.Active.Export | Active power exported (instantaneous) | W |
Power.Active.Import | Active power imported (instantaneous) | W |
Power.Offered | Maximum power offered to EV | W |
Power.Reactive.Export | Reactive power exported | var |
Power.Reactive.Import | Reactive power imported | var |
Power.Factor | Power factor (dimensionless, instantaneous) | — |
Current.Import | Current flowing to EV (instantaneous) | A |
Current.Export | Current flowing from EV (instantaneous) | A |
Current.Offered | Maximum current offered to EV | A |
Voltage | AC RMS supply voltage (instantaneous) | V |
Frequency | Grid frequency (instantaneous) | — |
Temperature | Temperature reading inside the Charge Point | K or Celsius |
SoC | State of Charge of the EV battery | % |
RPM | Fan speed (rotations per minute) | — |
Phase Suffixes
Measurands can be combined with a phase to specify per-phase readings:
| Phase | Description |
|---|---|
L1 | Phase 1 (line-to-neutral default reference) |
L2 | Phase 2 |
L3 | Phase 3 |
N | Neutral |
L1-N | Phase 1 to Neutral |
L2-N | Phase 2 to Neutral |
L3-N | Phase 3 to Neutral |
L1-L2 | Phase 1 to Phase 2 (line-to-line) |
L2-L3 | Phase 2 to Phase 3 |
L3-L1 | Phase 3 to Phase 1 |
SampledValue Context
Each meter value sample carries a context indicating how it was captured:
| Context | Description | Triggered By |
|---|---|---|
Sample.Periodic | Periodically sampled value | MeterValueSampleInterval |
Sample.Clock | Clock-aligned sampled value | ClockAlignedDataInterval |
Transaction.Begin | Value at the start of a transaction | StartTransaction |
Transaction.End | Value at the end of a transaction | StopTransaction |
Trigger | Value taken in response to a TriggerMessage.req | RemoteTrigger profile |
Interruption.Begin | Value at the beginning of a charging interruption | EVSE/EV suspension |
Interruption.End | Value at the end of a charging interruption | Resumption of charging |
Other | Other context | — |
SampledValue Location
Where the measurement point is located:
| Location | Description |
|---|---|
Cable | Measurement at the cable between CP and EV |
EV | Measurement inside the EV |
Inlet | Measurement at the network inlet to the CP |
Outlet | Measurement at the connector outlet (CP→EV) |
Body | Measurement at the Charge Point body (e.g., temperature sensor) |
SampledValue Format
| Format | Description |
|---|---|
Raw | Data is a raw decimal numeric string (default) |
SignedData | Data contains a digitally signed representation |
SampledValue Unit of Measure
| Unit | Measurand Types |
|---|---|
Wh, kWh | Active energy |
varh, kvarh | Reactive energy |
W, kW | Active power |
VA, kVA | Apparent power |
var, kvar | Reactive power |
A | Current |
V | Voltage |
K, Celsius, Fahrenheit | Temperature |
Percent | SoC, Power.Factor |
Note: If a Measurand is included in a CSL key but the CP does not support that specific measurement, the CP silently ignores it (no error).
Always check MeterValuesSampledDataMaxLength / MeterValuesAlignedDataMaxLength to know how many measurands the CP supports simultaneously.
Feature Profile Summary
| Profile | Description | Config Keys |
|---|---|---|
Core | Basic charging operations, authorization, metering, status reporting | Section 9.1 |
FirmwareManagement | Firmware update and diagnostics file transfer | — |
LocalAuthListManagement | Local Authorization List management | Section 9.2 |
Reservation | Connector reservation | Section 9.3 |
SmartCharging | Charging profile and schedule management | Section 9.4 |
RemoteTrigger | CSMS can trigger the CP to send specific messages on demand | None |
RemoteTrigger - TriggerMessage requestedMessage Values
The TriggerMessage.req allows the CSMS to request the CP to send one of these messages immediately:
| requestedMessage | Description |
|---|---|
BootNotification | Trigger a BootNotification (useful to refresh CP registration info) |
DiagnosticsStatusNotification | Trigger a diagnostics status update |
FirmwareStatusNotification | Trigger a firmware status update |
Heartbeat | Trigger an immediate Heartbeat (useful for time sync) |
MeterValues | Trigger an immediate meter value reading (context: Trigger) |
StatusNotification | Trigger a status notification for a connector |
ConnectorPhaseRotation Values
Possible values per connector (phase mapping: R = L1, S = L2, T = L3):
| Value | Description |
|---|---|
NotApplicable | For single phase or DC Charge Points |
Unknown | Not (yet) known |
RST | Standard Reference Phasing |
RTS | Reversed Reference Phasing |
SRT | Reversed 240 degree rotation |
STR | Standard 120 degree rotation |
TRS | Standard 240 degree rotation |
TSR | Reversed 120 degree rotation |
3. Behavior Details
Core ProfileDetailed behavior specifications for key configuration interactions in the Core profile.
Invalid ID Behavior
StopTransactionOnInvalidId and MaxEnergyOnInvalidId work together to control what happens when the Central System
invalidates a transaction's idTag (by returning a non-Accepted status in StartTransaction.conf).
Authorization Status Values
| Status | Meaning |
|---|---|
Accepted | Identifier is valid — transaction proceeds normally |
Blocked | Identifier has been blocked (e.g., reported lost/stolen) |
Expired | Identifier has expired |
Invalid | Identifier is unknown or invalid |
ConcurrentTx | Identifier is already in use in another transaction |
Combined Behavior
| StopTransactionOnInvalidId | MaxEnergyOnInvalidId | Behavior |
|---|---|---|
true | not set | CP stops the transaction immediately. StopTransaction.req is sent with reason DeAuthorized. |
true | set (e.g., 500 Wh) | CP allows up to the specified energy to be delivered, then stops the transaction with reason DeAuthorized. This provides a grace period for the EV driver. |
false | not set | CP does NOT stop the transaction (it continues charging). |
false | set (e.g., 500 Wh) | CP allows up to the specified energy to be delivered, then stops the transaction with reason DeAuthorized. |
Note: When StopTransactionOnInvalidId = false and MaxEnergyOnInvalidId is not set, the CP will continue charging indefinitely even
with an invalidated identifier. The CSMS can still stop the transaction by sending a RemoteStopTransaction.req.
EV-Side Disconnect Behavior Matrix
StopTransactionOnEVSideDisconnect and UnlockConnectorOnEVSideDisconnect interact to define the Charge Point's behavior when the EV driver unplugs the cable at the EV side:
| StopTxnOnEVSideDisconnect | UnlockOnEVSideDisconnect | Behavior |
|---|---|---|
true | true | CP stops the transaction (reason: EVDisconnected) AND unlocks the connector on the CP side. |
true | false | CP stops the transaction (reason: EVDisconnected) but does NOT unlock the connector. The cable remains locked on the CP side. |
false | true | CP suspends energy transfer (status: SuspendedEV) and unlocks the connector, but does NOT stop the transaction. |
false | false | CP suspends energy transfer (status: SuspendedEV) but does NOT unlock the connector and does NOT stop the transaction. |
StopTransaction Reason Values
| Reason | Description |
|---|---|
EmergencyStop | Emergency stop button was used |
EVDisconnected | Disconnection of cable/vehicle detected on EV side |
HardReset | A hard reset command was received |
Local | Stopped locally on request of the EV driver (e.g., badge swipe) |
Other | Other reason |
PowerLoss | Electric power is no longer available |
Reboot | A locally initiated reset/reboot occurred |
Remote | Stopped remotely via RemoteStopTransaction.req |
SoftReset | A soft reset command was received |
UnlockCommand | Stopped due to an UnlockConnector.req command |
DeAuthorized | The identifier was de-authorized (see Invalid ID Behavior) |
ChargePointStatus Values
The following status values are referenced by ConnectionTimeOut (the "Preparing" state) and MinimumStatusDuration:
| Status | Description |
|---|---|
Available | Connector is available for a new user |
Preparing | A user has been detected (e.g., idTag presented) but charging has not yet started. ConnectionTimeOut defines how long the CP waits in this state. |
Charging | Charging is in progress |
SuspendedEVSE | Charging is suspended by the EVSE (e.g., smart charging limit reached) |
SuspendedEV | Charging is suspended by the EV (e.g., EV battery full, cable unplugged but transaction open) |
Finishing | Transaction has stopped, but connector is not yet available (e.g., cable still plugged in) |
Reserved | Connector is reserved for a specific idTag |
Unavailable | Connector is not available for charging (e.g., out of service, firmware update) |
Faulted | An error has occurred on the connector |
4. Local Auth List Management Profile
Section 9.2These keys belong to the LocalAuthListManagement feature profile. Required keys MUST be supported by any Charge Point that supports this profile.
Configuration Keys
| Key | Req/Opt | Access | Type | Description |
|---|---|---|---|---|
LocalAuthListEnabled | required | RW | boolean | Whether the Local Authorization List is enabled. |
LocalAuthListMaxLength | required | R | integer | Maximum number of identifications that can be stored in the Local Authorization List. |
SendLocalListMaxLength | required | R | integer | Maximum number of identifications that can be sent in a single SendLocalList.req. |
SendLocalList.req Schema Fields
| Field | Type | Required | Description |
|---|---|---|---|
listVersion | integer | yes | Version number of the list being sent. The CP tracks this version for GetLocalListVersion responses. |
updateType | string | yes | Full (replace entire list) or Differential (add/update/remove individual entries). |
localAuthorizationList | array | no | List of authorization entries (see below). |
idTag | string (max 20) | yes | The identifier (e.g., RFID tag UID). |
idTagInfo | object | no | Authorization info. If omitted in a Differential update, the entry is removed from the list. |
status | string | yes | Accepted, Blocked, Expired, Invalid, or ConcurrentTx. |
expiryDate | dateTime | no | When this authorization expires. |
parentIdTag | string (max 20) | no | Parent/group identifier for group authorization. |
Note: When sending a Full update, SendLocalListMaxLength limits the number of entries per request.
If the total list exceeds this limit, the CSMS must send multiple requests or use Differential updates.
The total capacity of the list is limited by LocalAuthListMaxLength.
5. Reservation Profile
Section 9.3These keys belong to the Reservation feature profile.
Configuration Keys
| Key | Req/Opt | Access | Type | Description |
|---|---|---|---|---|
ReserveConnectorZeroSupported | optional | R | boolean | If this configuration key is present and set to true: Charge Point supports reservations on connector 0. |
Connector 0 Reservation Semantics
In OCPP 1.6, connector 0 represents the Charge Point as a whole (not a specific physical connector).
A reservation on connector 0 means the reservation applies to the entire Charge Point — the reserved idTag can use any available connector.
If this key is absent or false, the CSMS must always specify a specific connector ID (>= 1) in ReserveNow.req.
6. Smart Charging Profile
Section 9.4These keys belong to the SmartCharging feature profile. Required keys MUST be supported by any Charge Point that supports this profile.
Configuration Keys
| Key | Req/Opt | Access | Type | Description |
|---|---|---|---|---|
ChargeProfileMaxStackLevel | required | R | integer | Max StackLevel of a ChargingProfile. The number also indicates the max allowed number of installed charging schedules per Charging Profile Purpose. |
ChargingScheduleAllowedChargingRateUnit | required | R | CSL | A list of supported quantities for use in a ChargingSchedule. Allowed values: Current and Power. |
ChargingScheduleMaxPeriods | required | R | integer | Maximum number of periods that may be defined per ChargingSchedule. |
ConnectorSwitch3to1PhaseSupported | optional | R | boolean | If defined and true, this Charge Point supports switching from 3 to 1 phase during a Transaction. |
MaxChargingProfilesInstalled | required | R | integer | Maximum number of Charging profiles installed at a time. |
7. Quick Reference: All Configuration Keys
SummaryComplete listing of all 43 standardized configuration keys across all feature profiles.
Core Profile (34 keys)
| # | Key | Req | RW | Type |
|---|---|---|---|---|
| 1 | AllowOfflineTxForUnknownId | opt | RW | boolean |
| 2 | AuthorizationCacheEnabled | opt | RW | boolean |
| 3 | AuthorizeRemoteTxRequests | req | R/RW | boolean |
| 4 | BlinkRepeat | opt | RW | integer |
| 5 | ClockAlignedDataInterval | req | RW | integer |
| 6 | ConnectionTimeOut | req | RW | integer |
| 7 | ConnectorPhaseRotation | req | RW | CSL |
| 8 | ConnectorPhaseRotationMaxLength | opt | R | integer |
| 9 | GetConfigurationMaxKeys | req | R | integer |
| 10 | HeartbeatInterval | req | RW | integer |
| 11 | LightIntensity | opt | RW | integer |
| 12 | LocalAuthorizeOffline | req | RW | boolean |
| 13 | LocalPreAuthorize | req | RW | boolean |
| 14 | MaxEnergyOnInvalidId | opt | RW | integer |
| 15 | MeterValuesAlignedData | req | RW | CSL |
| 16 | MeterValuesAlignedDataMaxLength | opt | R | integer |
| 17 | MeterValuesSampledData | req | RW | CSL |
| 18 | MeterValuesSampledDataMaxLength | opt | R | integer |
| 19 | MeterValueSampleInterval | req | RW | integer |
| 20 | MinimumStatusDuration | opt | RW | integer |
| 21 | NumberOfConnectors | req | R | integer |
| 22 | ResetRetries | req | RW | integer |
| 23 | StopTransactionOnEVSideDisconnect | req | RW | boolean |
| 24 | StopTransactionOnInvalidId | req | RW | boolean |
| 25 | StopTxnAlignedData | req | RW | CSL |
| 26 | StopTxnAlignedDataMaxLength | opt | R | integer |
| 27 | StopTxnSampledData | req | RW | CSL |
| 28 | StopTxnSampledDataMaxLength | opt | R | integer |
| 29 | SupportedFeatureProfiles | req | R | CSL |
| 30 | SupportedFeatureProfilesMaxLength | opt | R | integer |
| 31 | TransactionMessageAttempts | req | RW | integer |
| 32 | TransactionMessageRetryInterval | req | RW | integer |
| 33 | UnlockConnectorOnEVSideDisconnect | req | RW | boolean |
| 34 | WebSocketPingInterval | opt | RW | integer |
Local Auth List Management Profile (3 keys)
| # | Key | Req | RW | Type |
|---|---|---|---|---|
| 1 | LocalAuthListEnabled | req | RW | boolean |
| 2 | LocalAuthListMaxLength | req | R | integer |
| 3 | SendLocalListMaxLength | req | R | integer |
Reservation Profile (1 key)
| # | Key | Req | RW | Type |
|---|---|---|---|---|
| 1 | ReserveConnectorZeroSupported | opt | R | boolean |
Smart Charging Profile (5 keys)
| # | Key | Req | RW | Type |
|---|---|---|---|---|
| 1 | ChargeProfileMaxStackLevel | req | R | integer |
| 2 | ChargingScheduleAllowedChargingRateUnit | req | R | CSL |
| 3 | ChargingScheduleMaxPeriods | req | R | integer |
| 4 | ConnectorSwitch3to1PhaseSupported | opt | R | boolean |
| 5 | MaxChargingProfilesInstalled | req | R | integer |
8. Implementation Notes
GuidelinesPractical guidance for CSMS developers implementing configuration key management.
CSMS-Side Considerations
1. Storing Configuration State
The CSMS should persist the last-known configuration key values per Charge Point. This enables tracking what a CP supports and its current settings without querying every time.
2. BootNotification Flow
After a Charge Point boots and is accepted, the CSMS should issue a GetConfiguration.req (with no keys) to retrieve all configuration, then cache the results.
3. Feature Profile Detection
Read SupportedFeatureProfiles to know what profiles the CP supports.
Only attempt to use configuration keys from profiles the CP actually supports.
4. CSL Value Format
CSL (Comma Separated List) values are comma-delimited strings, e.g., "Energy.Active.Import.Register,Power.Active.Import".
Always check the corresponding MaxLength key to know how many items are supported.
5. Handling ChangeConfiguration Responses
Accepted — Update your cached value immediately.
RebootRequired — Update your cached value but note it takes effect after reboot. Consider issuing a Reset.req if the change must take effect now.
NotSupported — The key is not recognized. Do not retry.
Rejected — The value was likely out of range or wrong format. Check your value and format.
6. Read-Only Keys
Never attempt to ChangeConfiguration on a read-only key — it will be rejected.
All R accessibility keys are informational/capability reporting only.
7. Metering Configuration
The MeterValuesSampledData and MeterValuesAlignedData keys accept Measurand values from the OCPP 1.6 Measurand enum.
In the CSL, measurands are listed by name (e.g., "Energy.Active.Import.Register,Power.Active.Import,Voltage").
The default measurand if none is configured is Energy.Active.Import.Register.
8. Transaction Message Retry
TransactionMessageAttempts and TransactionMessageRetryInterval control how the CP retries failed StartTransaction / StopTransaction messages.
This is critical for offline scenarios — the CSMS should configure these to balance between data reliability and network load.
9. EV Disconnect Behavior
The CSMS should configure StopTransactionOnEVSideDisconnect and UnlockConnectorOnEVSideDisconnect as a pair.
Most deployments should set both to true to ensure clean session teardown when the EV driver unplugs.
If StopTransactionOnEVSideDisconnect is false,
the CSMS must handle suspended transactions (status: SuspendedEV) that may require a RemoteStopTransaction.req to clean up.
10. Invalid ID Handling
When configuring StopTransactionOnInvalidId, consider also setting MaxEnergyOnInvalidId to provide a grace period.
This is important for scenarios where the idTag was valid at session start but becomes invalid mid-session (e.g., pre-paid balance depleted).
The CSMS should monitor StopTransaction.req messages with reason DeAuthorized to track these events.
11. Local Authorization Fallback Chain
The CP's authorization decision follows this priority: (a) online authorization via Authorize.req/Authorize.conf,
(b) Local Authorization List (if LocalAuthListEnabled = true),
(c) Authorization Cache (if AuthorizationCacheEnabled = true),
(d) unknown ID offline authorization (if AllowOfflineTxForUnknownId = true).
The CSMS should configure these in combination to define the desired offline behavior.
OCPP-J (WebSocket) Transport-Specific Notes
These notes apply specifically to OCPP-J implementations (JSON over WebSocket), as described in the OCPP-J 1.6 Implementation Guide:
WebSocketPingInterval vs HeartbeatInterval Interaction
Both WebSocketPingInterval and HeartbeatInterval serve connection keepalive purposes, but they are NOT interchangeable. WebSocket Ping/Pong does NOT provide time synchronization (the OCPP Heartbeat response includes server time).
The CSMS should ensure HeartbeatInterval is configured to send at least one Heartbeat per day,
even if WebSocketPingInterval is set to a short interval for connection liveness.