The charging profiles of the morning, as sent
Stop 03 said that a limit travels from the controller to the car as an OCPP charging profile. These are the messages themselves: what the backend sent to charge point 07, and to charge point 12 for the pool car, during the morning of this path.
OCPP 1.6 over JSON, as the backend logged it. Timestamps are UTC, two hours behind the car park's clock.
The questionWhat does a charging profile contain, which of the morning's decisions became which message, and how does the backend know the car complied?
Guess firstThe controller decided on 5.7 kW per car. What number did it send?RevealHide
8.3 amperes per phase. OCPP profiles can limit in watts or amperes; most AC sites use amperes, because that is what the charge point signals to the car over the cable: 8.3 A on three phases at 230 V is 5.7 kW.
What you are looking at
has been part of since version 1.6: the backend sends a , a limit with a purpose, a kind and a schedule, and the charge point passes the limit to the car through the control signal of the cable. Three purposes exist: a ceiling for the whole charge point, a default for new sessions, and a profile for one session, which is what sends every time it recalculates. New public charge points must be capable of this since April 2024.
The log shows OCPP 1.6 over JSON: 2 for a call with the action and its payload, 3 for the answer with the same id. Select the lines to follow the morning.
Lines starting with a hash are notes of the operations team. Limits in amperes per phase; 230 V times three phases turns them into kilowatts.
- Line 1Two profiles that never change
Before any car arrived, the backend gave every charge point two standing profiles: a ceiling it may never exceed, and a default for sessions that start while the controller is unreachable (stop 03).
CP-07 -> [3,"c001", {"status":"Accepted"}] CP-07 -> [3,"c002", {"status":"Accepted"}] CP-12 -> [3,"c140", {"status":"Accepted"}] CP-07 -> [3,"c141", {"status":"Accepted"}] CP-07 -> [3,"c162", {"status":"Accepted"}]
charging-profiles-2026-10-07.log: the whole file, to copy
# Set once, at commissioning: the ceiling of every charge point and the fallback for new sessions
CP-07 <- [2,"c001","SetChargingProfile",{"connectorId":0,"csChargingProfiles":{"chargingProfileId":1,"stackLevel":0,"chargingProfilePurpose":"ChargePointMaxProfile","chargingProfileKind":"Absolute","chargingSchedule":{"chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":16.0,"numberPhases":3}]}}}]
CP-07 -> [3,"c001",{"status":"Accepted"}]
CP-07 <- [2,"c002","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":2,"stackLevel":0,"chargingProfilePurpose":"TxDefaultProfile","chargingProfileKind":"Absolute","chargingSchedule":{"chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":6.0,"numberPhases":3}]}}}]
CP-07 -> [3,"c002",{"status":"Accepted"}]
# Wednesday 9:10 AM: fourteen cars, 80 kW. The controller sends each point its share.
CP-07 <- [2,"c118","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":7,"stackLevel":0,"chargingProfilePurpose":"TxProfile","chargingProfileKind":"Absolute","transactionId":50231,"chargingSchedule":{"startSchedule":"2026-10-07T07:10:00Z","chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":8.3,"numberPhases":3}]}}}]
CP-07 -> [3,"c118",{"status":"Accepted"}]
CP-07 -> [2,"m443","MeterValues",{"connectorId":1,"transactionId":50231,"meterValue":[{"timestamp":"2026-10-07T07:11:09Z","sampledValue":[{"value":"8.2","measurand":"Current.Import","phase":"L1","unit":"A"},{"value":"8.2","measurand":"Current.Import","phase":"L2","unit":"A"},{"value":"8.1","measurand":"Current.Import","phase":"L3","unit":"A"},{"value":"5.63","measurand":"Power.Active.Import","unit":"kW"}]}]}]
# 9:40 AM: the pool car at CP-12 leaves at 11. Priority by departure.
CP-12 <- [2,"c140","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":7,"stackLevel":0,"chargingProfilePurpose":"TxProfile","chargingProfileKind":"Absolute","transactionId":50236,"chargingSchedule":{"startSchedule":"2026-10-07T07:40:00Z","chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":16.0,"numberPhases":3}]}}}]
CP-12 -> [3,"c140",{"status":"Accepted"}]
CP-07 <- [2,"c141","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":7,"stackLevel":0,"chargingProfilePurpose":"TxProfile","chargingProfileKind":"Absolute","transactionId":50231,"chargingSchedule":{"startSchedule":"2026-10-07T07:40:00Z","chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":4.6,"numberPhases":3}]}}}]
CP-07 -> [3,"c141",{"status":"Accepted"}]
# 10:30 AM: three cars are full. Their shares go back to the pool.
CP-07 <- [2,"c162","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":7,"stackLevel":0,"chargingProfilePurpose":"TxProfile","chargingProfileKind":"Absolute","transactionId":50231,"chargingSchedule":{"startSchedule":"2026-10-07T08:30:00Z","chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":11.6,"numberPhases":3}]}}}]
CP-07 -> [3,"c162",{"status":"Accepted"}]A composed log in the message format of OCPP 1.6 over JSON, with the profile purposes and schedule fields of its smart charging functionality. The lowest limit the control signal can express, 6 A, is set by IEC 61851-1. The numbers are those of stops 01 to 04.
5.7 kW, an equal share of 80 kW
3.2 kW, the pool car has priority
8.0 kW, three cars are full
11 kW, never exceeded
Computed: kilowatts equal amperes times 230 volts times three phases. The charge point merges its profiles into one schedule and takes the lowest limit of any that apply, so the ceiling holds whatever a session profile asks.
Reading a profile
- Purpose. ChargePointMaxProfile caps the point, TxDefaultProfile covers sessions without a profile, TxProfile steers one session and names its transaction.
- Kind and schedule. Absolute limits hold from the start of the schedule; a schedule can list several periods with their own limits, for example a lower one for the evening peak. The morning's profiles have one period each.
- Unit. Amperes per phase or watts. AC sites usually limit in amperes, the language of the cable's control signal, DC chargers in watts.
- Stack level. When several profiles apply, the higher stack level wins. The morning replaces one profile with the same id instead of stacking.
How the backend knows the car complied
Accepted means the charge point took the profile, not that the car draws less. The proof is the next meter value: current per phase and power, one minute later. A car that ignores the limit would show up there, and the controller would lower the other points to protect the connection. The same messages, seen from the charger's side, are the subject of OCPP in depth, deep dive; what a controller does with them at a depot is shown in Fleet charging, stop 04.
Check your understanding
3 questions. Answer all of them to complete this stop. Each answer explains itself.
The controller decided on 5.7 kW for CP-07 at 9:10 AM. Why does the message say 8.3?
Profiles limit in amperes or watts; AC sites use amperes, the unit of the cable's control signal.
What is the TxDefaultProfile of 6 A for?
A standing default keeps the site safe when the controller or the internet fails (stop 03).
The charge point answered Accepted to the 4.6 A profile. What still tells the backend that the car complied?
Accepted comes from the charge point. The car's compliance shows in the measured current and power a minute later.
- OCPP Open Charge Point Protocol: the open protocol between a charger and its operator's backend. EV charging fundamentals, stop 03 Glossary
- Load management Shares a site's grid connection between the cars charging at the same time. EV charging fundamentals, stop 04 Glossary
- Charging profile An OCPP message that sets a limit in amperes or watts for a station, for new sessions or for one session, valid for a time or as a schedule. Stop 03 Glossary
- Smart charging Charging whose power is adjusted in real time, based on information received electronically, for example from the grid operator or a price signal; EU law calls it smart recharging. Bidirectional charging, stop 01 Glossary
- Open Charge Alliance: Open Charge Point Protocol (OCPP): versions 1.6, 2.0.1 and 2.1. https://openchargealliance.org/protocols/open-charge-point-protocol/. Checked 11 Oct 2026.
- Open Charge Alliance: OCPP 1.6 edition 2 (2017), section 3.13 Smart Charging: profile purposes, composite schedule, startSchedule; free download. https://openchargealliance.org/download-ocpp/. Checked 11 Oct 2026.
- Open Charge Alliance: What is new in OCPP 2.0.1? Whitepaper, version 1.0, March 2023. https://openchargealliance.org/wp-content/uploads/2024/01/new_in_ocpp_201-v10.pdf. Checked 09 Oct 2026. Licence: CC BY-ND 4.0.
- EUR-Lex: Regulation (EU) 2023/1804 (AFIR), Article 5(8). https://eur-lex.europa.eu/eli/reg/2023/1804/oj. Checked 09 Oct 2026. © European Union, reused under Commission Decision 2011/833/EU.
- Open Charge Alliance: OCPP 1.6 edition 2 (2017), section 3.13 Smart Charging: profile purposes, composite schedule, startSchedule; free download. https://openchargealliance.org/download-ocpp/. Checked 11 Oct 2026.
- IEC: IEC 61851-1:2017, Electric vehicle conductive charging system, Part 1: General requirements (control pilot duty cycle, 6 A minimum). https://webstore.iec.ch/en/publication/33644. Checked 11 Oct 2026.
- Open Charge Alliance: What is new in OCPP 2.0.1? Whitepaper, version 1.0, March 2023. https://openchargealliance.org/wp-content/uploads/2024/01/new_in_ocpp_201-v10.pdf. Checked 09 Oct 2026. Licence: CC BY-ND 4.0.
- Open Charge Alliance: OCPP 1.6 edition 2 (2017), section 3.13 Smart Charging: profile purposes, composite schedule, startSchedule; free download. https://openchargealliance.org/download-ocpp/. Checked 11 Oct 2026.