Skip to content

Event Reference

Pipelet delivers 23 distinct event types to webhook subscribers. Each event corresponds to an OCPP 1.6 message — when a station sends one to the Pipelet broker, an event with the same name is enqueued for delivery to every webhook subscribed to it.

The canonical list lives in cpms-headless/gateway/routes/webhooks.py (the EVENT_COLUMNS dict).

EventOCPP directionFires when…
AuthorizeStation → CSMSA station is verifying an idTag with the central system.
BootNotificationStation → CSMSA station starts up and registers with the CSMS.
HeartbeatStation → CSMSA station sends its periodic keep-alive (typically every 60–300s).
StartTransactionStation → CSMSA charging session begins.
StopTransactionStation → CSMSA charging session ends.
StatusNotificationStation → CSMSA connector changes status (Available, Preparing, Charging, Finishing, Faulted, …).
MeterValuesStation → CSMSA station reports meter readings during a session.
DataTransferBothVendor-specific data exchange.
ChangeAvailabilityCSMS → StationThe CSMS toggles a connector between Operative and Inoperative.
ChangeConfigurationCSMS → StationThe CSMS writes an OCPP config key.
ClearCacheCSMS → StationThe CSMS instructs the station to clear its authorization cache.
GetConfigurationCSMS → StationThe CSMS reads OCPP config keys.
RemoteStartTransactionCSMS → StationThe CSMS triggers a remote start (e.g. via the Headless API).
RemoteStopTransactionCSMS → StationThe CSMS triggers a remote stop.
ResetCSMS → StationThe CSMS sends a Soft or Hard reset.
UnlockConnectorCSMS → StationThe CSMS asks the station to unlock a stuck connector.
GetDiagnosticsCSMS → StationThe CSMS requests a diagnostics file upload.
UpdateFirmwareCSMS → StationThe CSMS triggers a firmware update.
TriggerMessageCSMS → StationThe CSMS asks a station to re-send a specific message (e.g. BootNotification).
ReserveNowCSMS → StationThe CSMS reserves a connector for a specific user.
SendLocalListCSMS → StationThe CSMS pushes the local authorization list.
ConnectPipelet internalA station opens its OCPP WebSocket connection.
DisconnectPipelet internalA station’s OCPP WebSocket connection closes.

Total: 23 events.

{
"event": "StartTransaction",
"station_id": "WALLBOX_001",
"timestamp": "2026-04-14T12:34:56.789Z",
"payload": {
"connectorId": 1,
"idTag": "RFID_12345678",
"meterStart": 12345,
"timestamp": "2026-04-14T12:34:56Z",
"transactionId": 42
}
}
{
"event": "StopTransaction",
"station_id": "WALLBOX_001",
"timestamp": "2026-04-14T13:42:11.221Z",
"payload": {
"transactionId": 42,
"timestamp": "2026-04-14T13:42:11Z",
"meterStop": 17340,
"reason": "Local",
"idTag": "RFID_12345678"
}
}
{
"event": "StatusNotification",
"station_id": "WALLBOX_001",
"timestamp": "2026-04-14T12:34:50.000Z",
"payload": {
"connectorId": 1,
"errorCode": "NoError",
"status": "Preparing",
"timestamp": "2026-04-14T12:34:50Z"
}
}
{
"event": "MeterValues",
"station_id": "WALLBOX_001",
"timestamp": "2026-04-14T12:35:56.000Z",
"payload": {
"connectorId": 1,
"transactionId": 42,
"meterValue": [
{
"timestamp": "2026-04-14T12:35:56Z",
"sampledValue": [
{ "value": "13456", "measurand": "Energy.Active.Import.Register", "unit": "Wh" },
{ "value": "11.2", "measurand": "Power.Active.Import", "unit": "kW" }
]
}
]
}
}

If you need all events for audit purposes, that’s fine — but consider running a dedicated archive consumer rather than mixing high-volume events with low-volume ones.

Querying available events programmatically

Section titled “Querying available events programmatically”
Terminal window
curl -H "X-API-Key: hcpms_live_..." \
http://localhost:8080/api/v1/webhooks/events

Returns the canonical list as JSON — useful for building dynamic UIs.