OCPP 1.6J protocolreferentie
De volledige technische referentie voor het Open Charge Point Protocol, versie 1.6J. Alle 28 berichten gedocumenteerd vanuit de officiële Open Charge Alliance specificatie.
Wat is OCPP?
Het Open Charge Point Protocol (OCPP) is een gratis, open communicatiestandaard die wordt beheerd door de Open Charge Alliance (OCA). Het definieert hoe EV-laders (Charge Points) communiceren met beheersoftware (een Central System) via een netwerkverbinding.
OCPP 1.6J gebruikt WebSocket met JSON-payloads. Een lader maakt verbinding met een Central System URL en beide zijden wisselen gestructureerde berichten uit: de lader rapporteert zijn status, meterstanden en transactiegebeurtenissen, terwijl het Central System commando's stuurt zoals sessies starten, firmware updaten of laadprofielen aanpassen.
Omdat OCPP een open standaard is, kan elke lader die het ondersteunt verbinding maken met elk compatibel Central System. Dit voorkomt vendor lock-in en geeft operators de vrijheid om hardware van verschillende fabrikanten te combineren onder één beheerplatform.
Wil je overstappen naar een andere OCPP-backend of Plugchoice naast een bestaande draaien? De Plugchoice OCPP-proxy regelt backend-migraties en parallelle setups zonder laadpalen te ontkoppelen.
Vier dingen die mensen bedoelen met OCPP
OCPP-platform
Een gratis CSMS voor elke OCPP-lader: portaal, app en API.
OCPP-app
Bedien elke OCPP-lader vanuit een app voor rijders en installateurs.
OCPP-proxy
Routeer een lader parallel naar twee backends, zonder herconfiguratie.
OCPP-backoffice
Bekijk de operator- en CSMS-backends waar laders mee verbinden.
OCPP? Plugchoice
Plugchoice is een gratis laadpuntbeheerplatform dat functioneert als een OCPP Central System. Sluit elke OCPP-compatibele lader aan en beheer deze via ons webportaal, mobiele app of REST API.
Wij ondersteunen de volledige OCPP 1.6J specificatie, inclusief Smart Charging profielen voor load balancing en zonne-integratie. Hardware-onafhankelijk, geen lock-in, geen abonnementskosten voor kernfuncties.
Plugchoice werkt ook als een OCPP Proxy, zodat je het naast bestaande billing- of beheerplatformen kunt draaien zonder migratie of herconfiguratie van laders.
Protocolreferentie
Alle 28 OCPP 1.6J berichten georganiseerd per functieprofiel. Elk bericht toont richting, verplichte en optionele velden, types en geldige enum-waarden.
Core
Vereist. Fundamentele laadpuntbewerkingen: autorisatie, transacties, statusrapportage, configuratie en basisafstandsbediening.
Firmware Management
Firmware-updates en diagnostiek-upload voor onderhoud op afstand van laadpunten.
Local Auth List
Beheer een lokale autorisatiecache op het laadpunt voor offline authenticatie.
Reservering
Reserveer een connector voor een specifieke gebruiker van tevoren.
Smart Charging
Stel laadprofielen in en beheer deze voor load balancing, zonne-integratie en gepland laden.
Remote Trigger
Verzoek het laadpunt om een specifiek bericht op aanvraag te versturen.
Configuratiesleutels
Met ChangeConfiguration zet je een sleutel per keer op een lader, met GetConfiguration lees je ze terug. Hier wordt het meeste echte ladergedrag bepaald: hoe vaak meterwaarden binnenkomen, wat erin zit, of een sessie een netwerkstoring overleeft, hoe een kabel ontgrendelt. Hieronder de standaard OCPP 1.6-sleutels, wat elke sleutel echt doet, en een uitgebreide uitleg over degene die de meeste problemen veroorzaakt.
Hoe de aanroep zich gedraagt
- Elke waarde gaat als tekst mee, ook getallen en booleans: "60", "true". Een JSON-getal sturen is een veelvoorkomende reden voor een Rejected.
- Sleutelnamen zijn hoofdlettergevoelig en moeten exact overeenkomen met de specificatie. MeterValuesSampledData werkt, metervaluessampleddata niet.
- Veel sleutels worden pas actief na een herstart. De lader laat dat weten met RebootRequired, en jij stuurt vervolgens zelf een Reset.
- Fabrikanten voegen eigen sleutels toe buiten deze lijst. GetConfiguration met een lege sleutellijst geeft alles terug wat een lader ondersteunt, inclusief die eigen sleutels, plus een unknownKey-array voor alles wat hij niet herkent.
Wat de vier antwoorden betekenen
- Accepted
- de sleutel staat en is nu actief.
- Rejected
- de sleutel bestaat, maar de waarde is geweigerd: buiten bereik, verkeerd formaat, of alleen-lezen op deze lader.
- RebootRequired
- de waarde is opgeslagen maar geldt pas na een herstart.
- NotSupported
- de lader kent deze sleutel helemaal niet.
Standaardsleutels
Core
| Sleutel | Type | Toegang | Wat het doet |
|---|---|---|---|
| AllowOfflineTxForUnknownIdoptioneel in spec | boolean | RW | Of de lader een transactie start voor een onbekende idTag terwijl hij offline is.True houdt een locatie aan het laden tijdens een netwerkstoring, met als prijs sessies die je mogelijk aan niemand kunt factureren. |
| AuthorizationCacheEnabledoptioneel in spec | boolean | RW | Of de lader de uitkomst van eerdere Authorize-aanroepen bewaart.Anders dan de Local Auth List: de cache vult zichzelf met echte autorisaties, de lijst wordt door de backend gestuurd. |
| AuthorizeRemoteTxRequests | boolean | R | Of de lader de idTag uit een RemoteStartTransaction eerst autoriseert voordat hij start.Staat dit aan, dan heeft een remote start vanuit de app alsnog een Authorize-ronde nodig, dus een foute idTag laat de start mislukken. |
| BlinkRepeatoptioneel in spec | integer (times) | RW | Hoe vaak de lader de lamp laat knipperen in een knippersequentie. |
| ClockAlignedDataInterval | integer (seconds) | RW | Interval voor klokgebonden meterwaarden, gerekend vanaf middernacht. 0 schakelt ze uit.900 geeft een meting op elk kwartier. Dit is de sleutel die MeterValuesAlignedData voedt, en hij loopt of er nu een auto aan hangt of niet. |
| ConnectionTimeOut | integer (seconds) | RW | Hoe lang de lader na autorisatie wacht tot de bestuurder insteekt voordat hij de connector vrijgeeft. |
| ConnectorPhaseRotation | CSL | RW | Fasedraaiing per connector, in connectorId.RST-notatie, bijvoorbeeld 0.RST, 1.RST, 2.RTS.Staat dit verkeerd, dan kloppen de meterwaarden per fase niet en gaat eenfasig load balancing de mist in. Op elke driefasige locatie het controleren waard. |
| ConnectorPhaseRotationMaxLengthoptioneel in spec | integer | R | Maximaal aantal items in ConnectorPhaseRotation. |
| GetConfigurationMaxKeys | integer | R | Maximaal aantal sleutels dat één GetConfiguration-verzoek mag opvragen.Vraag je er meer op, dan kan de lader met een fout antwoorden. Stuur GetConfiguration zonder sleutels om alles te krijgen wat hij ondersteunt. |
| HeartbeatInterval | integer (seconds) | RW | Hoe vaak de lader een Heartbeat stuurt als er verder niets gebeurt.Het antwoord op BootNotification kan dit overschrijven. Op een simkaart met databundel is een korte heartbeat de stille kostenpost die oploopt. |
| LightIntensityoptioneel in spec | integer (%) | RW | Helderheid van de verlichting van de lader, in procenten. |
| LocalAuthorizeOffline | boolean | RW | Of de lader offline autoriseert vanuit zijn lokale lijst of cache. |
| LocalPreAuthorize | boolean | RW | Of de lader online een transactie start vanuit de lokale lijst of cache, zonder op de backend te wachten.Scheelt wachttijd bij de lader, met als prijs dat de backend niet over elke start het laatste woord heeft. |
| MaxEnergyOnInvalidIdoptioneel in spec | integer (Wh) | RW | Energie die de lader nog levert nadat een autorisatie ongeldig blijkt. |
| MeterValuesAlignedData | CSL | RW | Measurands die meegaan in de klokgebonden MeterValues, op de ClockAlignedDataInterval.Dezelfde measurand-woordenschat als MeterValuesSampledData, andere trigger: de klok, niet de sessie. |
| MeterValuesAlignedDataMaxLengthoptioneel in spec | integer | R | Maximaal aantal measurands in MeterValuesAlignedData. |
| MeterValuesSampledData | CSL | RW | Measurands die tijdens een transactie worden bemonsterd en in MeterValues meegaan, op de MeterValueSampleInterval.De nuttigste sleutel op deze pagina. Zie de uitgebreide uitleg hieronder. |
| MeterValuesSampledDataMaxLengthoptioneel in spec | integer | R | Maximaal aantal measurands in MeterValuesSampledData.Lees deze voordat je een lange lijst bouwt: ga je eroverheen, dan weigert de lader het geheel. |
| MeterValueSampleInterval | integer (seconds) | RW | Hoe vaak de lader tijdens een transactie MeterValuesSampledData bemonstert. 0 schakelt bemonstering uit.60 is een verstandige standaard. Onder de 30, met een lange lijst measurands, genereer je veel verkeer voor weinig extra inzicht. |
| MinimumStatusDurationoptioneel in spec | integer (seconds) | RW | Minimale tijd dat de lader in een status blijft voordat hij de volgende meldt.Handig tegen flapperende statussen op laders die heen en weer springen tussen Preparing en Available. |
| NumberOfConnectors | integer | R | Aantal fysieke connectoren op deze lader. |
| ResetRetries | integer (times) | RW | Hoe vaak de lader een mislukte reset opnieuw probeert. |
| StopTransactionOnEVSideDisconnect | boolean | RW | Of loskoppelen aan de autokant de lopende transactie beëindigt.False betekent dat de sessie doorloopt nadat de kabel eruit is, en zo krijg je sessies die nooit eindigen. |
| StopTransactionOnInvalidId | boolean | RW | Of de lader de transactie stopt wanneer de backend de idTag afwijst. |
| StopTxnAlignedData | CSL | RW | Klokgebonden measurands die worden toegevoegd aan de transactionData van StopTransaction. |
| StopTxnAlignedDataMaxLengthoptioneel in spec | integer | R | Maximaal aantal measurands in StopTxnAlignedData. |
| StopTxnSampledData | CSL | RW | Bemonsterde measurands die worden toegevoegd aan de transactionData van StopTransaction.Houd dit kort. Alles wat erin staat wordt herhaald voor elke sample van de hele sessie binnen één StopTransaction-payload, en zo produceren laders stopberichten van megabytes die backends weigeren. |
| StopTxnSampledDataMaxLengthoptioneel in spec | integer | R | Maximaal aantal measurands in StopTxnSampledData. |
| SupportedFeatureProfiles | CSL | R | Feature profiles die deze lader implementeert, bijvoorbeeld Core, FirmwareManagement, SmartCharging.Het eerlijke antwoord op wat een lader kan. Lees het voordat je een klant smart charging belooft. |
| SupportedFeatureProfilesMaxLengthoptioneel in spec | integer | R | Maximaal aantal items in SupportedFeatureProfiles. |
| TransactionMessageAttempts | integer (times) | RW | Hoe vaak de lader een transactiebericht opnieuw stuurt dat de backend niet heeft bevestigd. |
| TransactionMessageRetryInterval | integer (seconds) | RW | Basiswachttijd tussen die pogingen. De lader vermenigvuldigt hem met het pogingnummer. |
| UnlockConnectorOnEVSideDisconnect | boolean | RW | Of de kabel bij de lader ontgrendelt wanneer hij aan de autokant wordt losgekoppeld. |
| WebSocketPingIntervaloptioneel in spec | integer (seconds) | RW | Interval voor WebSocket-pingframes op de OCPP-J-verbinding.De stille oplossing voor laders die steeds offline vallen achter een NAT of firewall die inactieve verbindingen sluit. |
Local Auth List Management
| Sleutel | Type | Toegang | Wat het doet |
|---|---|---|---|
| LocalAuthListEnabled | boolean | RW | Of de lokale autorisatielijst in gebruik is. |
| LocalAuthListMaxLength | integer | R | Hoeveel vermeldingen de lokale autorisatielijst bevat. |
| SendLocalListMaxLength | integer | R | Hoeveel vermeldingen er in één SendLocalList-bericht passen.Een lijst die groter is dan dit moet in meerdere differentiële updates worden verstuurd. |
Reservation
| Sleutel | Type | Toegang | Wat het doet |
|---|---|---|---|
| ReserveConnectorZeroSupportedoptioneel in spec | boolean | R | Of de lader een reservering op connector 0 accepteert, wat elke connector betekent. |
Smart Charging
| Sleutel | Type | Toegang | Wat het doet |
|---|---|---|---|
| ChargeProfileMaxStackLevel | integer | R | Hoogste stack level dat de lader accepteert op een laadprofiel. Hogere niveaus winnen. |
| ChargingScheduleAllowedChargingRateUnit | CSL | R | Welke eenheden de lader accepteert in een laadschema: Current (A), Power (W), of beide.Stuur je een profiel in watt naar een lader die alleen ampère aanneemt, dan wordt het geweigerd. Deze sleutel vertelt je welke je moet gebruiken. |
| ChargingScheduleMaxPeriods | integer | R | Maximaal aantal perioden in één laadschema. |
| ConnectorSwitch3to1PhaseSupportedoptioneel in spec | boolean | R | Of de lader kan schakelen tussen driefasig en eenfasig laden.Bepaalt of je onder het driefasige minimum kunt terugregelen in plaats van helemaal te pauzeren. |
| MaxChargingProfilesInstalled | integer | R | Hoeveel laadprofielen er tegelijk geïnstalleerd kunnen zijn. |
MeterValuesSampledData
Deze ene sleutel bepaalt welke telemetrie je uit een laadsessie krijgt. Het is een lijst met measurands, gescheiden door komma's, en de lader bemonstert elk item op de interval van MeterValueSampleInterval en stuurt ze in een MeterValues-bericht. Laat je hem op de standaard staan, dan krijg je één cumulatieve energiestand, genoeg om te factureren, en verder niets: geen vermogenscurve, geen stroom per fase, geen spanning, geen manier om te zien of een smart-charging-limiet is aangekomen.
Hij werkt nooit alleen. MeterValueSampleInterval bepaalt hoe vaak hij afgaat, MeterValuesSampledDataMaxLength begrenst hoeveel measurands je mag opgeven, StopTxnSampledData bepaalt welke daarvan herhaald worden in StopTransaction, en MeterValuesAlignedData is dezelfde woordenschat op een kloktijd in plaats van een sessie.
De measurand-woordenschat
Elk hiervan mag in de lijst staan. Welke een lader werkelijk ondersteunt hangt af van de hardware: een AC-wallbox rapporteert geen SoC, en een eenvoudige lader heeft misschien alleen de energiestand.
| Measurand | Eenheid | Meestal op | Wat het je geeft |
|---|---|---|---|
| Energy.Active.Import.Registerfacturatie | Wh | AC en DC | Cumulatieve energie afgenomen van het net, rechtstreeks van de meterstand. De standaard wanneer MeterValuesSampledData leeg is, en de waarde waarop vrijwel elke facturatieberekening rust. |
| Energy.Active.Export.Register | Wh | V2G-geschikt | Cumulatieve teruggeleverde energie, voor bidirectionele opstellingen. |
| Energy.Active.Import.Interval | Wh | AC en DC | Energie afgenomen sinds de vorige sample, in plaats van een lopend totaal. |
| Energy.Reactive.Import.Register | varh | Afhankelijk van meter | Cumulatieve blindenergie afgenomen. |
| Power.Active.Import | W | AC en DC | Momentaan werkelijk vermogen. Dit plot je om een laadcurve te zien, en hierop reageert load management. |
| Power.Offered | W | AC en DC | Vermogen dat de lader op dit moment aan de auto aanbiedt. Vergelijk het met Power.Active.Import om te zien of een limiet echt wordt toegepast. |
| Power.Reactive.Import | var | Afhankelijk van meter | Momentaan blindvermogen. |
| Power.Factor | ratio | Afhankelijk van meter | Verhouding tussen werkelijk en schijnbaar vermogen. |
| Current.Import | A | AC en DC | Opgenomen stroom. Meestal per fase gerapporteerd, dus deze ene measurand kan drie waarden per sample worden. |
| Current.Offered | A | AC en DC | Stroomlimiet die de lader aan de auto doorgeeft. De directe uitlezing of je smart-charging-profiel is aangekomen. |
| Current.Export | A | V2G-geschikt | Teruggeleverde stroom, voor bidirectionele opstellingen. |
| Voltage | V | AC en DC | Netspanning, per fase op driefasige laders. Handig om een weggevallen fase of een slechte verbinding op te sporen. |
| Frequency | Hz | Afhankelijk van meter | Netfrequentie. Let op: de specificatie geeft hier geen eenheidsveld aan. |
| Temperature | Celsius | Afhankelijk van lader | Temperatuur bij de lader of connector. Verklaart terugregelen op een warme dag voordat iemand het een storing noemt. |
| SoC | % | DC, of ISO 15118 op AC | Laadtoestand van de accu van de auto. Alleen aanwezig als de auto het echt doorgeeft, wat bij gewoon AC-laden meestal niet zo is. |
| RPM | rpm | Zeldzaam | Ventilatortoerental, op laders die dat rapporteren. |
Lijsten die werken
Kopieer er een in de waarde van een ChangeConfiguration-aanroep. Begin smal en voeg measurands toe zodra je hebt bevestigd dat de lader ze accepteert.
Alleen facturatie
Het minimum dat nog steeds een correcte factuur oplevert. De standaard op de meeste laders.
Energy.Active.Import.RegisterStandaardtelemetrie
Verstandige basis voor een beheerde AC-locatie: een vermogenscurve, stroom per fase en spanning om te diagnosticeren.
Energy.Active.Import.Register,Power.Active.Import,Current.Import,VoltageSmart charging
Voegt de aangeboden waarden toe, zodat je ziet of een profiel echt wordt toegepast in plaats van dat aan te nemen.
Energy.Active.Import.Register,Power.Active.Import,Power.Offered,Current.Import,Current.Offered,VoltageDC-snelladen
Voegt laadtoestand en temperatuur toe, die DC-laders wel rapporteren en die het meeste terugregelen verklaren.
Energy.Active.Import.Register,Power.Active.Import,Current.Import,Voltage,SoC,TemperatureWat er misgaat
Eén verkeerde measurand weigert de hele lijst
Laders valideren de lijst als geheel. Is één item niet ondersteund, dan krijg je Rejected of NotSupported voor alles, zonder te zeggen welke faalde. Zet de lijst measurand voor measurand om de boosdoener te vinden, of lees eerst MeterValuesSampledDataMaxLength en de documentatie van de fabrikant.
Eén measurand kan drie waarden zijn
Current.Import en Voltage worden per fase gerapporteerd, dus op een driefasige lader komen ze binnen als drie sampledValue-items elk, gemarkeerd L1, L2, L3 of L1-N enzovoort. Een lijst van zes measurands is zo een dozijn waarden per sample. De payload groeit sneller dan de lengte van de lijst doet vermoeden.
Wh tegenover kWh
De energiestand is standaard in Wh, maar het unit-veld kan kWh zeggen en sommige firmware doet dat ook. Lees de eenheid in plaats van hem aan te nemen, anders krijg je een factuur die een factor duizend afwijkt.
Een korte interval is niet gratis
MeterValueSampleInterval op 10 seconden met een lange lijst betekent honderden berichten per sessie. Op een simkaart met databundel is dat echt geld, en op een grote locatie echte belasting op de backend. 60 seconden is een goede standaard, 300 voor locaties waar je alleen de vorm van de curve nodig hebt.
StopTxnSampledData is de payload-val
Alles wat daar staat wordt herhaald, voor elke sample van de hele sessie, binnen één StopTransaction-bericht. Een lange lijst op een lange sessie levert een payload op die groot genoeg is om door backends geweigerd of afgekapt te worden, en dan sluit de transactie niet netjes af. Houd het bij de energiestand, tenzij je een specifieke reden hebt.
Laat de energiestand weg en facturatie breekt
Staat Energy.Active.Import.Register niet in de lijst, dan bevatten de periodieke meterwaarden geen cumulatief totaal. De meeste backends vallen dan terug op meterStart en meterStop uit de transactieberichten, en elke sessie waarbij StopTransaction wegvalt wordt onfactureerbaar. Houd hem altijd in de lijst.
SoC is op AC meestal niet beschikbaar
Laadtoestand komt van de auto, via ISO 15118 of het DC-laadprotocol. Op een gewone AC-wallbox zonder Plug and Charge rapporteert de auto hem niet, dus SoC opvragen wordt geweigerd of levert niets bruikbaars op.
Lees het context-veld
Elke sampledValue heeft een context: Sample.Periodic, Transaction.Begin, Transaction.End, Sample.Clock of Trigger. Een waarde bij Transaction.Begin is een beginstand, geen verbruik. Elke sample als periodiek behandelen is hoe sessies dubbel geteld worden.
Een volledige heen-en-weerDe lijst zetten, en de MeterValues die daarna binnenkomen op een driefasige lader.
// Set the list
[2,"19223201","ChangeConfiguration",{
"key": "MeterValuesSampledData",
"value": "Energy.Active.Import.Register,Power.Active.Import,Current.Import,Voltage"
}]
[3,"19223201",{"status":"RebootRequired"}]
// What the charger then sends, every MeterValueSampleInterval
[2,"19223202","MeterValues",{
"connectorId": 1,
"transactionId": 8123,
"meterValue": [{
"timestamp": "2026-07-23T11:04:00Z",
"sampledValue": [
{"value":"14230","measurand":"Energy.Active.Import.Register",
"unit":"Wh","context":"Sample.Periodic"},
{"value":"7360","measurand":"Power.Active.Import","unit":"W"},
{"value":"10.7","measurand":"Current.Import","unit":"A","phase":"L1"},
{"value":"10.6","measurand":"Current.Import","unit":"A","phase":"L2"},
{"value":"10.8","measurand":"Current.Import","unit":"A","phase":"L3"},
{"value":"231.2","measurand":"Voltage","unit":"V","phase":"L1-N"}
]
}]
}]Deze pagina voor AI-assistenten
De volledige referentie, elk bericht en elke configuratiesleutel, als één tekstbestand dat een LLM in één keer kan inlezen.
plugchoice.com/help/ocpp/llms.txt