How chargers connect
Charge points connect to Dynamo CSMS over a persistent WebSocket connection. Each charge point authenticates using itscharge_point_id as part of the WebSocket URL path:
BootNotification message to identify itself. Dynamo CSMS responds with an Accepted status and a heartbeat interval. From that point on, the charger periodically sends Heartbeat messages to confirm it is still online.
Dynamo CSMS uses the heartbeat interval to determine connectivity status. A charge point is marked
offline if no heartbeat is received within 2× the configured interval. You can tune this interval using the HeartbeatInterval configuration key.OCPP 1.6 vs. OCPP 2.0.1
Both protocol versions are supported in production. The right choice depends on your hardware capabilities and use case requirements.- OCPP 1.6
- OCPP 2.0.1
OCPP 1.6 is the most widely deployed version of the protocol. The majority of chargers currently in the field support OCPP 1.6J (the JSON/WebSocket variant, as opposed to the older SOAP variant).Key characteristics:
- JSON over WebSocket (OCPP 1.6J)
- Broad hardware support across all major manufacturers
- Core feature set: remote start/stop, availability control, charging profiles, reservations
- Authentication via RFID tags or remote authorization
- Smart charging via
SetChargingProfile
/api/v1/ocpp16/.Heartbeat monitoring
Every connected charge point sends periodicHeartbeat messages. Dynamo CSMS records each heartbeat and exposes the timestamp via the API:
Status notifications
Charge points sendStatusNotification messages whenever a connector’s status changes. Dynamo CSMS processes these in real time and updates the connector record accordingly. You can retrieve the current status of all connectors on a charge point at any time:
OCPP 1.6 supported commands
Dynamo CSMS exposes the following OCPP 1.6 commands as REST API endpoints under/api/v1/ocpp16/{charge_point_id}/. Each request is translated into the corresponding OCPP message and forwarded to the charge point over its active WebSocket connection.
| Command | Endpoint | Description |
|---|---|---|
RemoteStartTransaction | POST /api/v1/ocpp16/remote_start_transaction | Instruct a charge point to start a charging session on a specified connector, optionally with a specific idTag for authorization |
RemoteStopTransaction | POST /api/v1/ocpp16/remote_stop_transaction | Instruct a charge point to end an active transaction by transactionId |
ChangeAvailability | POST /api/v1/ocpp16/change_availability | Set a charge point or individual connector to Operative or Inoperative |
SetChargingProfile | POST /api/v1/ocpp16/set_charging_profile | Push a smart charging profile to limit or shape power delivery on a connector |
ClearChargingProfile | POST /api/v1/ocpp16/clear_charging_profile | Remove a previously applied charging profile from a connector |
Reset | POST /api/v1/ocpp16/reset | Trigger a soft or hard reboot of the charge point |
TriggerMessage | POST /api/v1/ocpp16/trigger_message | Request the charge point to send a specific OCPP message immediately, such as StatusNotification or MeterValues |
ReserveNow | POST /api/v1/ocpp16/reserve_now | Reserve a connector for a specific idTag until a given expiry time |
CancelReservation | POST /api/v1/ocpp16/cancel_reservation | Cancel an active reservation by reservationId |
Example: remote start transaction
A status of
Accepted means the charge point acknowledged the command. The transaction ID is not available at this point — it is assigned by the charge point once the session actually begins and delivered via a StartTransaction notification.Example: set charging profile
Error handling
When a command fails, the API returns the OCPP error code alongside an HTTP error response:NotSupported
NotSupported
The charge point does not implement the requested command. This is common with older firmware versions that lack support for features like smart charging or reservations.
InternalError
InternalError
The charge point encountered an internal error while processing the command. Trigger a
TriggerMessage with DiagnosticsStatusNotification to collect diagnostics.Rejected
Rejected
The charge point received the command but rejected it based on its local logic. For example,
RemoteStart is rejected if the connector is already occupied.Timeout
Timeout
Dynamo CSMS did not receive a response from the charge point within the configured timeout window. This typically indicates a connectivity issue.
Charge points
Learn about the charge point resource, connector statuses, and the commissioning lifecycle.
Billing model
Understand how OCPP sessions map to billing records and how tariffs are applied.