Heartbeat
Keeps the connection alive and returns the CSMS clock. Unchanged in substance from 1.6.
- Version
- OCPP 2.0.1
- Direction
- Charge Point → CSMS
- Functional block
- Availability
Heartbeat also exists in OCPP 1.6, with a different payload. See the OCPP 1.6 version.
The simplest message in 2.0.1, and essentially identical to its 1.6 counterpart: an empty request, and a response carrying the server's time.
The interval comes from BootNotification, and is afterwards a device model variable rather than a flat configuration key — HeartbeatInterval on the OCPPCommCtrlr component.
Request
No fields — the payload is an empty object {}.
[2, "19223201", "Heartbeat", {}]Response
| Field | Type | Required | Description |
|---|---|---|---|
currentTime | dateTime | Required | The CSMS's current time, in UTC. |
[3, "19223201", {
"currentTime": "2026-09-09T10:20:30Z"
}]Implementation notes
Any other message resets the heartbeat timer — a station sending transaction data does not also need to send Heartbeat.
As in 1.6, this is not a NAT keepalive. WebSocket ping/pong at a shorter interval is what keeps carrier-grade NAT from dropping an idle connection.