Plugchoice

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.

Open protocol
Vrij te implementeren, beheerd door de OCA
WebSocket + JSON
Persistente verbinding, gestructureerde payloads
28 berichten
Georganiseerd in 6 functieprofielen
Bidirectioneel
Zowel lader als server initiëren berichten

OCPP? Plugchoice

Gratis, geen lock-inElke OCPP-lader, elk merkApp, portaal en API inbegrepenSlim Laden ingebouwd

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.

Bekijk hoe de OCPP Proxy werkt

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

SleutelTypeToegangWat het doet
AllowOfflineTxForUnknownIdoptioneel in specbooleanRWOf 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 specbooleanRWOf 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.
AuthorizeRemoteTxRequestsbooleanROf 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 specinteger (times)RWHoe vaak de lader de lamp laat knipperen in een knippersequentie.
ClockAlignedDataIntervalinteger (seconds)RWInterval 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.
ConnectionTimeOutinteger (seconds)RWHoe lang de lader na autorisatie wacht tot de bestuurder insteekt voordat hij de connector vrijgeeft.
ConnectorPhaseRotationCSLRWFasedraaiing 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 specintegerRMaximaal aantal items in ConnectorPhaseRotation.
GetConfigurationMaxKeysintegerRMaximaal 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.
HeartbeatIntervalinteger (seconds)RWHoe 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 specinteger (%)RWHelderheid van de verlichting van de lader, in procenten.
LocalAuthorizeOfflinebooleanRWOf de lader offline autoriseert vanuit zijn lokale lijst of cache.
LocalPreAuthorizebooleanRWOf 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 specinteger (Wh)RWEnergie die de lader nog levert nadat een autorisatie ongeldig blijkt.
MeterValuesAlignedDataCSLRWMeasurands die meegaan in de klokgebonden MeterValues, op de ClockAlignedDataInterval.Dezelfde measurand-woordenschat als MeterValuesSampledData, andere trigger: de klok, niet de sessie.
MeterValuesAlignedDataMaxLengthoptioneel in specintegerRMaximaal aantal measurands in MeterValuesAlignedData.
MeterValuesSampledDataCSLRWMeasurands 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 specintegerRMaximaal aantal measurands in MeterValuesSampledData.Lees deze voordat je een lange lijst bouwt: ga je eroverheen, dan weigert de lader het geheel.
MeterValueSampleIntervalinteger (seconds)RWHoe 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 specinteger (seconds)RWMinimale 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.
NumberOfConnectorsintegerRAantal fysieke connectoren op deze lader.
ResetRetriesinteger (times)RWHoe vaak de lader een mislukte reset opnieuw probeert.
StopTransactionOnEVSideDisconnectbooleanRWOf 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.
StopTransactionOnInvalidIdbooleanRWOf de lader de transactie stopt wanneer de backend de idTag afwijst.
StopTxnAlignedDataCSLRWKlokgebonden measurands die worden toegevoegd aan de transactionData van StopTransaction.
StopTxnAlignedDataMaxLengthoptioneel in specintegerRMaximaal aantal measurands in StopTxnAlignedData.
StopTxnSampledDataCSLRWBemonsterde 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 specintegerRMaximaal aantal measurands in StopTxnSampledData.
SupportedFeatureProfilesCSLRFeature 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 specintegerRMaximaal aantal items in SupportedFeatureProfiles.
TransactionMessageAttemptsinteger (times)RWHoe vaak de lader een transactiebericht opnieuw stuurt dat de backend niet heeft bevestigd.
TransactionMessageRetryIntervalinteger (seconds)RWBasiswachttijd tussen die pogingen. De lader vermenigvuldigt hem met het pogingnummer.
UnlockConnectorOnEVSideDisconnectbooleanRWOf de kabel bij de lader ontgrendelt wanneer hij aan de autokant wordt losgekoppeld.
WebSocketPingIntervaloptioneel in specinteger (seconds)RWInterval 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

SleutelTypeToegangWat het doet
LocalAuthListEnabledbooleanRWOf de lokale autorisatielijst in gebruik is.
LocalAuthListMaxLengthintegerRHoeveel vermeldingen de lokale autorisatielijst bevat.
SendLocalListMaxLengthintegerRHoeveel vermeldingen er in één SendLocalList-bericht passen.Een lijst die groter is dan dit moet in meerdere differentiële updates worden verstuurd.

Reservation

SleutelTypeToegangWat het doet
ReserveConnectorZeroSupportedoptioneel in specbooleanROf de lader een reservering op connector 0 accepteert, wat elke connector betekent.

Smart Charging

SleutelTypeToegangWat het doet
ChargeProfileMaxStackLevelintegerRHoogste stack level dat de lader accepteert op een laadprofiel. Hogere niveaus winnen.
ChargingScheduleAllowedChargingRateUnitCSLRWelke 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.
ChargingScheduleMaxPeriodsintegerRMaximaal aantal perioden in één laadschema.
ConnectorSwitch3to1PhaseSupportedoptioneel in specbooleanROf de lader kan schakelen tussen driefasig en eenfasig laden.Bepaalt of je onder het driefasige minimum kunt terugregelen in plaats van helemaal te pauzeren.
MaxChargingProfilesInstalledintegerRHoeveel 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.

MeasurandEenheidMeestal opWat het je geeft
Energy.Active.Import.RegisterfacturatieWhAC en DCCumulatieve 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.RegisterWhV2G-geschiktCumulatieve teruggeleverde energie, voor bidirectionele opstellingen.
Energy.Active.Import.IntervalWhAC en DCEnergie afgenomen sinds de vorige sample, in plaats van een lopend totaal.
Energy.Reactive.Import.RegistervarhAfhankelijk van meterCumulatieve blindenergie afgenomen.
Power.Active.ImportWAC en DCMomentaan werkelijk vermogen. Dit plot je om een laadcurve te zien, en hierop reageert load management.
Power.OfferedWAC en DCVermogen 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.ImportvarAfhankelijk van meterMomentaan blindvermogen.
Power.FactorratioAfhankelijk van meterVerhouding tussen werkelijk en schijnbaar vermogen.
Current.ImportAAC en DCOpgenomen stroom. Meestal per fase gerapporteerd, dus deze ene measurand kan drie waarden per sample worden.
Current.OfferedAAC en DCStroomlimiet die de lader aan de auto doorgeeft. De directe uitlezing of je smart-charging-profiel is aangekomen.
Current.ExportAV2G-geschiktTeruggeleverde stroom, voor bidirectionele opstellingen.
VoltageVAC en DCNetspanning, per fase op driefasige laders. Handig om een weggevallen fase of een slechte verbinding op te sporen.
FrequencyHzAfhankelijk van meterNetfrequentie. Let op: de specificatie geeft hier geen eenheidsveld aan.
TemperatureCelsiusAfhankelijk van laderTemperatuur bij de lader of connector. Verklaart terugregelen op een warme dag voordat iemand het een storing noemt.
SoC%DC, of ISO 15118 op ACLaadtoestand van de accu van de auto. Alleen aanwezig als de auto het echt doorgeeft, wat bij gewoon AC-laden meestal niet zo is.
RPMrpmZeldzaamVentilatortoerental, 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.Register

Standaardtelemetrie

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,Voltage

Smart 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,Voltage

DC-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,Temperature

Wat 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