Skip to content

OCPP 1.6J Reference

This document provides integration specifications for the BrightBlu Charging Communication Controller. Our implementation follows the OCPP 1.6J protocol, with BrightBlu-specific enhancements — including custom configuration keys, Smart Charging, and support for custom packets and custom data packets (vendor-specific DataTransfer messages) for bespoke integrations.

BrightBlu chargers support the OCPP DataTransfer message for vendor-specific packets — a way to exchange custom commands or data that are not part of standard OCPP. Custom packets are provisioned per integration: the charger recognises a specific vendorId and one or more agreed messageIds.

A DataTransfer request has this shape:

[2, "<uniqueId>", "DataTransfer", {
"vendorId": "<your-vendor-id>",
"messageId": "<message-name>",
"data": "<payload>"
}]

The charger replies with one of: Accepted, UnknownMessageId (vendor recognised, message not), or UnknownVendorId.

A custom stop-energy packet tells the charger to end an ongoing session once it has delivered a target amount of energy. The data field carries the transaction id and the target energy in kWh, separated by an underscore:

[2, "<uniqueId>", "DataTransfer", {
"vendorId": "<your-vendor-id>",
"messageId": "Stop_Energy",
"data": "<transactionId>_<energyKWh>"
}]

For example, "1024_34.5" stops transaction 1024 once 34.5 kWh have been delivered. The charger stores the target and ends the session when the delivered energy reaches it.

To add a custom packet for your platform, contact BrightBlu with the messages and payloads you need.

Our controller implements a state machine for transactions with the following key states:

  1. Available: Ready to accept a new transaction
  2. Preparing: Authorization in progress
  3. Charging: Active charging session
  4. Suspended EV: Vehicle has paused charging
  5. Finishing: Transaction ending sequence
  6. Reserved: Connector is reserved for a specific user
  7. DiodeError: Vehicle has detected water/contaminants in the connector. Will not charge
  8. VentError: Vehicle has detected ventilation issues with its cooling system and will need to cool down before charging
  9. Faulted: Faults detected by the charger or vehicle. Detailed list provided below

The authorization sequence follows specific pathways based on configuration parameters:

┌─────────────────┐ ┌───────────────────┐ ┌───────────────────┐
│ RFID Presented │───►│ LocalPreAuthorize │───►│ Local DB Check │
└─────────────────┘ └───────────────────┘ └─────────┬─────────┘
┌────────────────────┐ ┌───────────────┐ ┌───────────────────┐
│ Remote Authorization◄───┤ Not Found │◄───┤ RFID Found? │
└──────────┬─────────┘ └───────────────┘ └───────────────────┘
│ │
▼ ▼
┌─────────────────────┐ ┌──────────────────┐
│ Central System Auth │ │ Begin Transaction │
└──────────┬──────────┘ └──────────────────┘
┌─────────────────────┐
│ Transaction Decision │
└─────────────────────┘

The following parameters work together to control authorization behavior:

Primary ParameterRelated ParametersInteraction Behavior
LocalPreAuthorizeAuthorizationCacheEnabledWhen LocalPreAuthorize=true and AuthorizationCacheEnabled=true, the system checks the local cache before making a server request
LocalAuthorizeOfflineAllowOfflineTxForUnknownIdWhen offline, LocalAuthorizeOffline controls whether local authorization is attempted. If true but RFID is unknown, AllowOfflineTxForUnknownId determines if charging proceeds
AuthorizeRemoteTxRequests-Controls whether RemoteStartTransaction commands require separate authorization via Authorize request

Example: If server connectivity is lost during charging (connectionServer=false):

  • If LocalAuthorizeOffline=true: New RFID requests will be validated against local whitelist
  • If AllowOfflineTxForUnknownId=true: Unknown RFIDs will be accepted
  • If both are false: No new charging sessions will be authorized during offline periods

These parameters determine behavior during active charging sessions:

ParameterRelated ParametersEffect
StopTransactionOnEVSideDisconnectUnlockConnectorOnEVSideDisconnectWhen vehicle disconnects while StopTransactionOnEVSideDisconnect=true, transaction ends and connector unlocks if UnlockConnectorOnEVSideDisconnect=true
StopTransactionOnInvalidId-When a different RFID is presented during charging, transaction ends if this is true
suspendedEVTimeout-Maximum time (seconds) to wait in “SuspendedEV” state before ending transaction

Implementation Detail: Our controller sends StatusNotification with status=“SuspendedEV” when charging pauses, then monitors for timeout specified in suspendedEVTimeout. Once exceeded, a StopTransaction with reason=“EVDisconnected” is automatically triggered.

The meter value parameters form a complex interaction that controls data sampling and reporting:

ParameterRelated ParametersEffect
MeterValueSampleIntervalMeterValuesSampledDataControls how frequently (seconds) the meter values in MeterValuesSampledData are sampled and sent

Implementation Note: Our system attempts to optimize network traffic by:

  1. Not sending unchanged meter values when variations are below thresholds
  2. Bundling multiple measurements when possible
  3. Prioritizing critical measurements (Energy.Active.Import.Register) during network constraints

The “Phase” parameter is critical for charger operation:

  • Single.Phase: Operates on L1-N, limits to 7kW
  • Three.Phase: Operates on L1-L2-L3-N, supports up to 22kW

The system automatically applies appropriate limits to DPM (Dynamic Power Management) based on phase configuration.

Our implementation supports these specific measurements:

MeasurementUnitsDescription
Energy.Active.Import.RegisterWhCumulative energy consumed (required in all transaction messages)
VoltageVRMS voltage per phase
Current.ImportACurrent being drawn per phase
Power.Active.ImportWActive power being drawn
TemperatureCInternal temperature of charging unit
FrequencyHzAC frequency
Power.Factor-Power factor ratio (0.00-1.00)
Current.OfferedAMaximum current available from EVSE

Implementation Detail: All the data is directly retrieved from the Energy Meter. No calculations/edits are done to these values.

The charger implements the OCPP 1.6 Smart Charging profile. A CSMS can cap the delivered current with SetChargingProfile, remove caps with ClearChargingProfile, and read the active limit with GetCompositeSchedule. A TxProfile can also be attached to a RemoteStartTransaction.

  • Purposes — all three are supported: ChargePointMaxProfile (station-wide, must use connectorId 0), TxDefaultProfile (default limit), and TxProfile (per-session; requires an active or pending transaction).
  • KindsAbsolute, Recurring (Daily / Weekly) and Relative are supported. Recurring windows and later schedule periods take effect automatically over time — the charger re-evaluates the active period continuously, so you don’t need to resend a profile for a scheduled step-change.
  • Rate unit — send schedules in Current (Amps). Power (Watts) is not supported (ChargingScheduleAllowedChargingRateUnit = Current).
  • Clamping — the resulting limit is clamped to 6 A (IEC 61851 minimum) at the low end and the charger’s configured rated maximum (e.g. 32 A) at the high end.
  • numberPhases is accepted and echoed back but does not change the Amps limit (the hardware does not switch 1↔3-phase mid-session; ConnectorSwitch3to1PhaseSupported = false).

Within a purpose, the profile with the highest stackLevel wins (standard OCPP). Across purposes, the charger applies the strictest (lowest) limit of all active profiles — so a TxProfile can tighten but not raise the limit set by a TxDefaultProfile or ChargePointMaxProfile. Re-sending a profile with the same chargingProfileId (or the same purpose + stackLevel + connector) replaces the stored one.

The profile cap is combined with the charger’s thermal/voltage derating — the current the vehicle sees is always the stricter of the two. A newly applied cap becomes effective within a few seconds.

Max profiles stored5 total (shared across all purposes and connectors; persist across reboot)
Max stack level5
Max periods per schedule8

If all 5 slots are full and a new, non-matching profile arrives, SetChargingProfile is rejected.

  • ClearChargingProfile — filter by any of id, connectorId, stackLevel, chargingProfilePurpose (all criteria present must match). An empty request clears every profile. Returns Accepted if any were cleared, otherwise Unknown.
  • GetCompositeSchedule — returns the current effective limit as a flat schedule for the requested connector. It reports the limit in force now; it does not project future step-changes (an upcoming recurring window or a later period will not appear as a separate period). Use it to read the present cap, not to forecast.

Our reservation system has specific behavior:

  1. Reservations timeout after the expiry time in ReserveNow
  2. Only the specified idTag can initiate a transaction during reservation
  3. Presenting a different RFID during the reservation period results in rejection

When sending StatusNotification, our controller uses these specific error codes:

Error CodeDescriptionSystem Response
ConnectorLockFailureUnable to lock/unlock connectorRetry 3 times, then report failure
EVCommunicationErrorCannot establish/maintain EV communicationWait 30s, attempt reset
GroundFailureGround fault detectedImmediate shutdown, requires manual reset
HighTemperatureSystem temperature exceeds safe thresholdReduces max current, may shutdown
PowerMeterFailureUnable to read energy meterFalls back to calculated energy values
PowerSwitchFailureCannot control power contactorImmediate shutdown, reports fatal error
ReaderFailureRFID reader malfunctionSystem remains operational but requires service
ResetFailureFailed to reset systemAttempts alternative reset method
WeakSignalCellular/WiFi signal below thresholdOnly sent in Available State and is NOT a FAULTED state. Attempts connectivity recovery measures.

The following error codes carry additional detail on the specific condition/threshold that triggers them:

Error CodeDescription
UnderVoltageBRIGHTBLU Chargers support an input supply value of +/- 20% of 230V
OverVoltageBRIGHTBLU Chargers support an input supply value of +/- 20% of 230V
OverCurrentFailureCharger has detected that the current drawn is greater than max allowed (32A)
HighTemperatureCharger temperature sensor detects an internal temperature greater than 80°C and has shut down to prevent further damage
GroundFailureNeutral - Earth voltage has exceeded permissible values (maximum allowed 8V)
DiodeErrorDiode failure detected at vehicle end
VentErrorVentilation error failure detected at vehicle end

OtherError covers the following sub-errors, reported via vendorErrorCode:

  • EmergencyButton — Emergency button is pressed
  • InputFrequencyError — Frequency of input supply is not between 50/60 Hz
  • EarthLeakageError — A current leakage of either 30mA AC or 6mA DC has been detected
  • PowerFailure — Loss of input supply power (will only work with BRIGHTBLU POWER BACKUP systems)
  • ModBusComsFailure — Loss of communication with Energy Meter
  • VPRError — Input supply error (phase reversal or asymmetrical input supply), mostly with 3-Phase
  • SDCardFailure — Internal SD card error (logging and OTA updates disabled but charger will function normally otherwise)

Every OCPP configuration key the charger supports — with its access (RW / RO / WO), type, default, accepted values and meaning — is documented on the Configuration Keys page.

To set up your charger, please download the BRIGHTBLU Install Partner application:

Authentication requires a one-time password (OTP) provided by BRIGHTBLU Support. After successful login, you can connect to your BRIGHTBLU JOLT Charger.

  1. Device Identification

    • The Charger ID displayed in the BLE application is fixed and cannot be changed
    • The OCPP Device ID setting affects only OCPP server communications
  2. Server URL Format

    • Use the following format: ws://"host":"port"/"path" or wss://"host":"port"/"path"
    • Port specification is mandatory (even for default ports 80/443)
    • Do not include trailing slashes (/) or the charger ID in the URL
    • The device automatically appends the charger ID to complete the connection URL
  3. Energy Metering

    • Jolt Business: Stores cumulative energy values between sessions
    • HomePlus: Resets energy counter at the start of each session (meterStart = 0)
  4. Network

    • BRIGHTBLU Jolt HomePlus only supports WiFi / BLE / SIM
    • BRIGHTBLU Jolt Business supports WiFi / BLE / SIM / LAN
    • BRIGHTBLU JOLT always uses WiFi. The SIM Module on the JOLT acts as a hotspot for the controller to connect to. If you do not wish to connect it to SIM, you can always configure the charger to access other WiFi connections and also configure fallback WiFi connections.

For technical support or further information, please contact: