Skip to main content
EVerest provides comprehensive OCPP support through two dedicated modules for communication with Central System Management Systems (CSMS). These modules enable charging stations to integrate with backend platforms for remote management, billing, and monitoring.
OCPP modules are located at modules/EVSE/OCPP/ (OCPP 1.6) and modules/EVSE/OCPP201/ (OCPP 2.0.1). OCPP 2.1 library support is in development at lib/everest/ocpp/lib/ocpp/v21/.

Available OCPP Modules

OCPP 1.6

Mature OCPP-J 1.6 implementation with full feature support

OCPP 2.0.1

Latest OCPP 2.0.1 standard with enhanced features

OCPP 1.6 Module

The OCPP module implements OCPP-J 1.6 (JSON over WebSocket) charge point functionality.

Key Features

  • WebSocket-based communication with CSMS
  • Remote monitoring and control
  • Smart charging with composite schedules
  • Remote firmware updates
  • Authorization management
  • Transaction handling and MeterValues
  • Configuration management
  • Reservation support
  • ISO 15118 Plug & Charge extensions

OCPP 1.6 Configuration

ChargePointConfigPath
string
default:"ocpp-config.json"
Path to the OCPP configuration file. Libocpp defines a JSON schema for this file.
Refer to the libocpp documentation for detailed configuration options.
UserConfigPath
string
default:"user_config.json"
Path to the OCPP user config. Used as an overlay for the original config. Changes from CSMS are written here.
DatabasePath
string
default:"/tmp/ocpp_1_6_charge_point"
Path to the persistent SQLite database directory
Use a persistent location (not /tmp) in production to retain transaction data across reboots.
MessageLogPath
string
default:"/tmp/everest_ocpp_logs"
Directory where logs of all OCPP messages are written
EnableExternalWebsocketControl
boolean
default:"false"
Allow external WebSocket connect/disconnect control
For debug and testing only. Do not enable in production.
PublishChargingScheduleIntervalS
integer
default:"30"
Interval in seconds for publishing charging schedules. Set to 0 to publish only on changes.
PublishChargingScheduleDurationS
integer
default:"600"
Duration in seconds for requested charging schedules (from now)
RequestCompositeScheduleUnit
string
default:"A"
Unit for composite schedules: A (Amps) or W (Watts)
Use Amps for AC charging stations and Watts for DC charging stations.
MessageQueueResumeDelay
integer
default:"0"
Delay in seconds before resuming message queue after reconnect. Required for some OCTT test cases.

OCPP 1.6 Provided Interfaces

Main OCPP 1.6 charge point interface providing:
  • Connection management
  • Transaction handling
  • Remote operations
  • Status notifications
Validates auth tokens with the CSMS via RemoteStartTransaction and authorization cache
Provides auth tokens received from CSMS remote start requests
Custom data transfer towards the CSMS
Generic OCPP interface for common operations
Send session cost information to connected modules

OCPP 1.6 Required Interfaces

evse_manager (evse_manager)

Required: 1 to 128 EVSE managersConnects to EvseManager instances representing physical connectors.
Required: Authentication moduleHandles authorization requests and token validation.
Required: System operationsProvides system-level operations like reset and firmware updates.
Required: Security and certificate managementHandles TLS certificates and security profiles.
Required: Reservation managementHandles reservation requests from CSMS.

OCPP 2.0.1 Module

The OCPP201 module implements the latest OCPP 2.0.1 specification.

OCPP 2.0.1 Features

  • Device model with component/variable architecture
  • Enhanced security profiles
  • Transaction events instead of simple start/stop
  • Improved smart charging (schedules v2)
  • Display message support
  • ISO 15118 certificate management
  • Get/Set variable operations
  • Custom data support

OCPP 2.0.1 Configuration

CoreDatabasePath
string
default:"/tmp/ocpp201"
Path to the persistent SQLite database directory
Use a persistent location in production.
DeviceModelDatabasePath
string
default:"device_model_storage.db"
Path to the SQLite database for the device model
EverestDeviceModelDatabasePath
string
default:"everest_device_model_storage.db"
Database for EVerest-specific device model components (EVSE, Connector) not managed by libocpp
DeviceModelDatabaseMigrationPath
string
default:"device_model_migrations"
Path to device model database migration files
DeviceModelConfigPath
string
default:"component_config"
Path to device model component config directory
Libocpp defines the schema for these configuration files.
MessageLogPath
string
default:"/tmp/everest_ocpp_logs"
Directory for OCPP message logs
CompositeScheduleIntervalS
integer
default:"30"
Interval for publishing composite schedules. Set to 0 for publish on change only.
RequestCompositeScheduleDurationS
integer
default:"600"
Duration in seconds for composite schedule requests
RequestCompositeScheduleUnit
string
default:"A"
Unit for composite schedules: A (Amps) or W (Watts)

OCPP 2.0.1 Provided Interfaces

Validates tokens using CSMS, AuthorizationList, or AuthorizationCache
Provides authorization requests initiated by CSMS
Custom data transfer to CSMS
Generic OCPP interface
Session cost information

OCPP 2.0.1 Required Interfaces

Similar to OCPP 1.6 but with optional reservation support:
  • evse_manager (1-128 connections) - EVSE management
  • system - System operations
  • security - Certificate management
  • auth - Authentication
  • reservation (optional) - Reservation handling
  • display_message (optional) - Display message support

Configuration Examples

OCPP 1.6 Setup

active_modules:
  ocpp:
    module: OCPP
    config:
      ChargePointConfigPath: config/ocpp-config.json
      UserConfigPath: user_data/user_config.json
      DatabasePath: /persistent/ocpp_db
      MessageLogPath: /var/log/ocpp
      RequestCompositeScheduleUnit: A
      PublishChargingScheduleIntervalS: 30
    connections:
      evse_manager:
        - evse_manager_1
      auth: auth_manager
      system: system_module
      security: evse_security
      reservation: auth_manager

OCPP 2.0.1 Setup

active_modules:
  ocpp201:
    module: OCPP201
    config:
      CoreDatabasePath: /persistent/ocpp201
      DeviceModelDatabasePath: /persistent/device_model.db
      DeviceModelConfigPath: config/component_config
      MessageLogPath: /var/log/ocpp201
      CompositeScheduleIntervalS: 30
      RequestCompositeScheduleUnit: A
    connections:
      evse_manager:
        - evse_manager_1
        - evse_manager_2
      auth: auth_manager
      system: system_module  
      security: evse_security

OCPP Configuration File

Both modules require an OCPP configuration JSON file. Example structure:
{
  "Internal": {
    "ChargePointId": "CP001",
    "CentralSystemURI": "wss://csms.example.com/ocpp",
    "ChargeBoxSerialNumber": "SN123456",
    "ChargePointModel": "EVerest",
    "ChargePointVendor": "Pionix"
  },
  "Core": {
    "AuthorizeRemoteTxRequests": true,
    "ClockAlignedDataInterval": 900,
    "MeterValueSampleInterval": 60,
    "NumberOfConnectors": 1
  },
  "Security": {
    "SecurityProfile": 3,
    "AuthorizationKey": "your-auth-key"
  }
}
Refer to the libocpp documentation for complete configuration schema.

Smart Charging

Both OCPP modules support smart charging:
1

CSMS Sends Schedule

Central system sends charging profile via SetChargingProfile (1.6) or SetChargingProfileRequest (2.0.1)
2

Module Processes

OCPP module validates and stores the charging profile
3

Composite Schedule

Module calculates composite schedule from all active profiles
4

Energy Limits

Publishes limits to EvseManager via evse_energy_sink interface

Security Profiles

OCPP 1.6 Security

  • Profile 0: Unsecured HTTP (development only)
  • Profile 1: Basic Authentication over HTTP
  • Profile 2: TLS with Basic Authentication
  • Profile 3: TLS with Client Certificates

OCPP 2.0.1 Security

  • Security Profile 1: TLS with Basic Authentication
  • Security Profile 2: TLS with Client Certificates
  • Security Profile 3: TLS with Client Certificates + Enhanced Security
Always use Security Profile 2 or 3 in production environments. Profile 0 and 1 are not secure.

Message Logging

Both modules support detailed message logging:
# Enable message logging
MessageLogPath: /var/log/ocpp

# Log format: one file per day
/var/log/ocpp/
├── 2026-03-04.log
├── 2026-03-05.log
└── 2026-03-06.log
Logs include:
  • All OCPP messages (requests and responses)
  • WebSocket connection events
  • Transaction events
  • Error conditions

Integration with Auth Module

OCPP modules integrate with the Auth module:
active_modules:
  auth:
    module: Auth
    connections:
      token_provider:
        - ocpp  # OCPP provides tokens from remote start
      token_validator:
        - ocpp  # OCPP validates tokens with CSMS
      evse_manager:
        - evse_manager_1

Troubleshooting

  • Verify CentralSystemURI in config
  • Check network connectivity and firewall rules
  • Review TLS certificate configuration
  • Check message logs for connection errors
  • Verify CSMS authorization cache
  • Check AuthorizeRemoteTxRequests setting
  • Review auth_validator connection to Auth module
  • Enable message logging to see authorization responses
  • Verify evse_energy_sink connections
  • Check composite schedule calculation
  • Review charging profile validity periods
  • Enable schedule publishing logs

Authentication

Auth module integration

EvseManager

EVSE management and control

ISO 15118

Plug & Charge integration

EvseSecurity

Certificate management

Additional Resources

Source Code Reference

OCPP 1.6:
  • modules/EVSE/OCPP/OCPP.cpp - Main implementation
  • modules/EVSE/OCPP/manifest.yaml - Module configuration
  • modules/EVSE/OCPP/conversions.cpp - Type conversions
OCPP 2.0.1:
  • modules/EVSE/OCPP201/OCPP201.cpp - Main implementation
  • modules/EVSE/OCPP201/manifest.yaml - Module configuration
  • modules/EVSE/OCPP201/transaction_handler.cpp - Transaction management

Build docs developers (and LLMs) love