Naar de inhoud

De naslag van de protocollen OCPP 2.0.1 en 2.1.

Alle 91 berichten van OCPP 2.0.1 en 2.1 met hun velden en een voorbeeld, welke 2.1 heeft toegevoegd, het device model dat de configuratiesleutels van 1.6 heeft vervangen, en de drie beveiligingsprofielen.

BerichtenDevice modelBeveiligingsprofielenOverstap vanaf 1.6Vragen

Wat zijn OCPP 2.0.1 en 2.1?

Het zijn de nieuwere versies van het Open Charge Point Protocol, de open standaard van de Open Charge Alliance voor hoe een lader praat met de software die hem beheert: het CSMS in de specificatie, de backoffice in de praktijk. Net als bij 1.6J opent de lader een WebSocket naar de backoffice, en beide kanten sturen er JSON-berichten over.

OCPP 2.0.1 is niet achterwaarts compatibel met 1.6. Het beschrijft een lader als een device model van componenten en variabelen, heeft drie beveiligingsprofielen ingebouwd, meldt een transactie in één bericht, TransactionEvent, en ondersteunt ISO 15118 voor Plug and Charge en voor slim laden met input van de auto.

OCPP 2.1 bouwt voort op 2.0.1. De schema's zijn die van 2.0.1 met extra optionele velden, en het voegt 27 berichten toe voor bidirectioneel laden, DER-aansturing, tarieven op een lader die de kosten zelf berekent, betalen bij de lader, periodieke eventstreams en batterijwissel. Een lader en zijn backoffice spreken één versie af als de WebSocket opent.

  • Een open standaardVrij te implementeren, beheerd door de Open Charge Alliance. OCPP 2.1 is ook verschenen als IEC 63584-210.
  • WebSocket en JSONEén verbinding die de lader openhoudt. 2.1 voegt SEND toe, een bericht dat geen antwoord krijgt.
  • 91 berichten64 in 2.0.1 en nog 27 in 2.1, in 19 functionele blokken.
  • Beide richtingenDe lader en de backoffice starten elk hun eigen berichten.

Alle 91 berichten van OCPP 2.0.1 en 2.1

Elk bericht is een verzoek van de ene kant en een antwoord van de andere, gekoppeld via een bericht-ID. NotifyPeriodicEventStream is de enige uitzondering: een SEND-bericht in 2.1 dat geen antwoord krijgt.

Beveiliging

Certificaten voor de lader en de backoffice, en de beveiligingsgebeurtenissen die een lader meldt.

Inrichting

Opstarten, aanmelden bij de backoffice, het device model lezen en instellen, en herstarts.

Autorisatie

Een ID-token controleren voordat er geladen wordt, de autorisatiecache, en in 2.1 ad-hocbetalingen.

Lokale autorisatielijst

De lijst met ID-tokens die de backoffice op de lader zet, zodat die zelf kan autoriseren.

Transacties

Eén bericht, TransactionEvent, voor het begin, de updates en het einde van elke transactie.

Bediening op afstand

Een transactie starten en stoppen vanuit de backoffice, een connector ontgrendelen en een bericht opvragen.

Beschikbaarheid

De status van elke connector, de heartbeat, en een lader of EVSE buiten gebruik stellen.

Reservering

Een EVSE reserveren voor een ID-token, en die reservering annuleren.

Tarief en kosten

Prijzen en lopende kosten voor de bestuurder; in 2.1 ook tarieven op een lader die de kosten zelf berekent.

Meterwaarden

Meterstanden buiten een transactie; tijdens een transactie gaan ze mee in TransactionEvent.

Slim laden

Laadprofielen met vermogens- of stroomlimieten, limieten van buitenaf, en wat het voertuig nodig heeft.

Firmwarebeheer

Firmware bijwerken op een lader, en die publiceren via een lokale controller.

Certificaatbeheer

Certificaten installeren en controleren, ook de contractcertificaten van Plug and Charge.

Diagnostiek

Logs, monitors op het device model, gebeurtenissen, klantgegevens en, in 2.1, periodieke eventstreams.

Displayberichten

Berichten die de backoffice voor een lader instelt om aan bestuurders te tonen.

Gegevensoverdracht

Fabrikantgegevens, voor functies die de standaard niet dekt.

Bidirectionele energieoverdracht

Nieuw in 2.1: laden en ontladen (V2X) aansturen via laadprofielen.

DER-aansturing

Nieuw in 2.1: instellingen voor netondersteuning, voor een lader en auto die samen als decentrale energiebron (DER) werken.

Batterijwissel

Nieuw in 2.1: batterijwisselstations.

Het device model van OCPP 2.0.1

In OCPP 1.6 heeft een lader een platte lijst configuratiesleutels. In 2.0.1 en 2.1 beschrijft hij zichzelf als componenten, zoals het charging station, een EVSE, een connector of een controller als OCPPCommCtrlr, en elke component heeft variabelen. Een variabele kan vier waarden hebben: Actual, Target, MinSet en MaxSet. Wat vroeger een configuratiesleutel was, is nu een variabele van een controllercomponent.

Zo werk je ermee

  • GetVariables en SetVariablesLees of zet meerdere variabelen in één bericht. De lader antwoordt per variabele.
  • GetBaseReport en GetReportVraag het hele device model op, of een deel ervan. De lader stuurt het terug in NotifyReport-berichten.
  • MonitorsSetVariableMonitoring bewaakt een variabele op een drempel, een wijziging of een vast interval, en de lader meldt via NotifyEvent.
  • Enabled, per functieDe controller van een optionele functie, zoals AuthCacheCtrlr of ReservationCtrlr, heeft een variabele Enabled die die functie aan- of uitzet.

De antwoorden op SetVariables

Accepted
De waarde is ingesteld.
Rejected
De variabele bestaat, maar de waarde is geweigerd.
UnknownComponent
De lader heeft zo'n component niet.
UnknownVariable
De component heeft zo'n variabele niet.
NotSupportedAttributeType
De variabele heeft geen waarde van dat type, bijvoorbeeld geen Target.
RebootRequired
De waarde is opgeslagen en geldt na een herstart.

Variabelen die de bekendste sleutels van 1.6 hebben vervangen

De specificatie standaardiseert er nog veel meer, in haar bijlagen. Een lader meldt de variabelen die hij heeft in zijn antwoord op GetBaseReport.

Component en variabeleTypeWat het insteltIn OCPP 1.6
OCPPCommCtrlr.HeartbeatIntervalinteger in secondenSeconden zonder andere berichten waarna de lader een Heartbeat stuurt.HeartbeatInterval
OCPPCommCtrlr.MessageAttemptsInstantie TransactionEventintegerHoe vaak de lader probeert een TransactionEvent af te leveren dat de backoffice niet kon verwerken.TransactionMessageAttempts
OCPPCommCtrlr.MessageAttemptIntervalInstantie TransactionEventintegerSeconden die de lader wacht voordat hij het opnieuw probeert.TransactionMessageRetryInterval
OCPPCommCtrlr.WebSocketPingIntervalinteger in secondenSeconden tussen WebSocket-pings; 0 zet de eigen pings van de lader uit.WebSocketPingInterval
OCPPCommCtrlr.ResetRetriesintegerHoe vaak de lader een mislukte herstart opnieuw probeert.ResetRetries
OCPPCommCtrlr.UnlockOnEVSideDisconnectbooleanOntgrendel de kabel aan de kant van de lader als hij aan de kant van de auto wordt losgekoppeld.UnlockConnectorOnEVSideDisconnect
SampledDataCtrlr.TxUpdatedMeasurandslistWat de lader tijdens een transactie meet, verstuurd in TransactionEvent met eventType Updated.MeterValuesSampledData
SampledDataCtrlr.TxUpdatedIntervalinteger in secondenSeconden tussen die metingen; 0 stuurt er tijdens de transactie geen.MeterValueSampleInterval
SampledDataCtrlr.TxEndedMeasurandslistWat er in de TransactionEvent komt die de transactie afsluit.StopTxnSampledData
AlignedDataCtrlr.Intervalinteger in secondenSeconden tussen metingen op vaste kloktijden.ClockAlignedDataInterval
AlignedDataCtrlr.MeasurandslistWat de metingen op vaste kloktijden bevatten.MeterValuesAlignedData
AlignedDataCtrlr.TxEndedMeasurandslistMetingen op vaste kloktijden die in de TransactionEvent komen die de transactie afsluit.StopTxnAlignedData
TxCtrlr.EVConnectionTimeOutinteger in secondenSeconden die een bestuurder heeft om de stekker in te steken nadat de transactie is gestart, voordat die wordt geannuleerd.ConnectionTimeOut
TxCtrlr.StopTxOnEVSideDisconnectbooleanBeëindig de transactie als de kabel aan de kant van de auto wordt losgekoppeld.StopTransactionOnEVSideDisconnect
TxCtrlr.StopTxOnInvalidIdbooleanStop een lopende transactie als het ID-token niet geaccepteerd blijkt.StopTransactionOnInvalidId
TxCtrlr.MaxEnergyOnInvalidIdintegerEnergie in Wh die de lader nog mag leveren nadat de backoffice het ID-token heeft geweigerd.MaxEnergyOnInvalidId
TxCtrlr.TxStartPointlistWanneer een transactie begint: bij autorisatie, bij het insteken van de stekker, zodra er energie stroomt, enzovoort.Nieuw in 2.0.1
TxCtrlr.TxStopPointlistWanneer een transactie eindigt, gekozen uit dezelfde lijst.Nieuw in 2.0.1
AuthCtrlr.AuthorizeRemoteStartbooleanOf de lader het ID-token van een start op afstand eerst met een Authorize controleert.AuthorizeRemoteTxRequests
AuthCtrlr.LocalAuthorizeOfflinebooleanStart offline transacties voor ID-tokens die hij al kent.LocalAuthorizeOffline
AuthCtrlr.LocalPreAuthorizebooleanStart voor ID-tokens die hij al kent zonder op de backoffice te wachten.LocalPreAuthorize
AuthCtrlr.OfflineTxForUnknownIdEnabledbooleanStart offline transacties voor onbekende ID-tokens.AllowOfflineTxForUnknownId
AuthCacheCtrlr.EnabledbooleanGebruik de autorisatiecache.AuthorizationCacheEnabled
LocalAuthListCtrlr.EnabledbooleanGebruik de lokale autorisatielijst.LocalAuthListEnabled
LocalAuthListCtrlr.ItemsPerMessageInstantie SendLocalListintegerMaximaal aantal ID-tokens in één SendLocalList.SendLocalListMaxLength
SmartChargingCtrlr.ProfileStackLevelintegerHoogste stackniveau dat een laadprofiel mag hebben.ChargeProfileMaxStackLevel
SmartChargingCtrlr.RateUnitlistOf schema's in ampère, in watt of in beide kunnen.ChargingScheduleAllowedChargingRateUnit
SmartChargingCtrlr.PeriodsPerScheduleintegerMaximaal aantal periodes in één laadschema.ChargingScheduleMaxPeriods
SmartChargingCtrlr.Phases3to1booleanOf de lader tijdens een transactie van drie fasen naar één kan wisselen.ConnectorSwitch3to1PhaseSupported
ReservationCtrlr.NonEvseSpecificbooleanOf een reservering voor de lader als geheel kan gelden in plaats van voor één EVSE.ReserveConnectorZeroSupported

Beveiligingsprofielen van OCPP 2.0.1 en 2.1

Beide versies kennen drie beveiligingsprofielen. Een lader en zijn backoffice gebruiken er één tegelijk, en dat profiel ligt vast vóór het eerste OCPP-bericht. De backoffice stelt het per verbindingsslot in met SetNetworkProfile, en de lader meldt het profiel dat hij gebruikt in SecurityCtrlr.SecurityProfile.

ProfielHoe de lader bewijst wie hij isHoe de backoffice bewijst wie hij isDe verbinding
1. Onbeveiligd transport met basisauthenticatieHTTP Basic-authenticatie, met een wachtwoordDat doet hij nietNiet versleuteld. Alleen voor vertrouwde netwerken, zoals een VPN tussen de lader en de backoffice.
2. TLS met basisauthenticatieHTTP Basic-authenticatie, met een wachtwoordZijn TLS-servercertificaatTLS 1.2 of hoger
3. TLS met clientcertificatenZijn eigen TLS-clientcertificaatZijn TLS-servercertificaatTLS 1.2 of hoger
  • TerugschakelenEen lader mag alleen van profiel 3 naar profiel 2, en alleen als AllowSecurityProfileDowngrade op true staat. Via OCPP gaat hij nooit terug naar profiel 1.
  • Wachtwoorden en certificatenHet wachtwoord is SecurityCtrlr.BasicAuthPassword. De lader vraagt een nieuw certificaat aan met SignCertificate, en de backoffice levert het met CertificateSigned.
  • BeveiligingsgebeurtenissenDe lader meldt met SecurityEventNotification wat er gebeurde, zoals een herstart, een firmware-update of inloggegevens die de backoffice weigerde.

Van OCPP 1.6 naar 2.0.1, bericht voor bericht

OCPP 2.0.1 hield veel berichtnamen van 1.6 aan, en hernoemde of voegde andere samen. Een link opent het bericht in deze naslag of in de 1.6J-naslag.

OCPP 1.6OCPP 2.0.1 en 2.1Wat er veranderde
StartTransaction, StopTransactionTransactionEventEén bericht met eventType Started, Updated of Ended. De lader bepaalt het transactie-ID, een string.
MeterValuesTransactionEvent, MeterValuesMetingen tijdens een transactie gaan in TransactionEvent; MeterValues bevat metingen daarbuiten.
StatusNotificationStatusNotification, NotifyEventStatusNotification meldt alleen de status van de connector, met evseId en connectorId. Foutcodes gaan in NotifyEvent, en 2.1 geeft ook voor beschikbaarheid de voorkeur aan NotifyEvent.
RemoteStartTransactionRequestStartTransactionBevat een idToken-object en een remoteStartId, dat terugkomt in de TransactionEvent die de transactie start.
RemoteStopTransactionRequestStopTransactionStopt een transactie op haar ID, dat nu een string is.
ChangeConfigurationSetVariablesZet meerdere variabelen van het device model in één bericht.
GetConfigurationGetVariables, GetBaseReport, GetReportLeest gekozen variabelen, of vraagt een rapport op dat binnenkomt in NotifyReport-berichten.
GetDiagnosticsGetLogVraagt een diagnostieklog of een beveiligingslog op.
DiagnosticsStatusNotificationLogStatusNotificationMeldt de voortgang van die upload.
ResetResetImmediate of OnIdle in plaats van Hard of Soft, en hij kan één EVSE herstarten.
ChangeAvailabilityChangeAvailabilityRicht zich via het veld evse op de lader, een EVSE of een connector.
AuthorizeAuthorizeEen idToken-object met een type, in plaats van de idTag-string.
BootNotificationBootNotificationVoegt de reden van het opstarten toe; de gegevens van de lader staan in een chargingStation-object.
Heartbeat, UnlockConnector, ClearCache, DataTransfer, ReserveNow, CancelReservation, SendLocalList, GetLocalListVersion, SetChargingProfile, ClearChargingProfile, GetCompositeSchedule, TriggerMessage, UpdateFirmware, FirmwareStatusNotificationDezelfde namenDezelfde berichten, met velden voor EVSE's en de nieuwere datatypes.

Vragen over OCPP 2.0.1 en 2.1

Versie 2.0.1 van het Open Charge Point Protocol, in 2020 gepubliceerd door de Open Charge Alliance. Het verving OCPP 2.0, en voegt ten opzichte van 1.6 het device model, beveiligingsprofielen, ondersteuning voor ISO 15118 en TransactionEvent toe. Het is niet achterwaarts compatibel met 1.6.

OCPP 2.1 verscheen in januari 2025 en is ook de norm IEC 63584-210. Het voegt 27 berichten toe en schrapt er geen: bidirectioneel laden (V2X) en DER-aansturing, ISO 15118-20, tarieven op een lader die de kosten zelf berekent, betalen bij de lader met een betaalterminal of een QR-code, laden met voorrang, dynamische laadprofielen, periodieke eventstreams en batterijwissel. Kies Nieuw in 2.1 boven de berichten om ze te zien.

De schema's van 2.1 zijn die van 2.0.1 met extra optionele velden, en volgens de Open Charge Alliance blijft logica die voor 2.0.1 is geschreven werken, met twee kleine wijzigingen: SignCertificate kan een requestId meesturen dat CertificateSigned daarna herhaalt, en NotifyMonitoringReport heeft één nieuw verplicht veld. De versie wordt nog steeds per verbinding afgesproken: bij de WebSocket-handshake biedt de lader bijvoorbeeld ocpp2.1, ocpp2.0.1 en ocpp1.6 aan, en de backoffice kiest er een.

2.0.1 heeft een eigen set berichten: een device model in plaats van configuratiesleutels, beveiligingsprofielen, TransactionEvent in plaats van StartTransaction en StopTransaction, de EVSE als laag tussen de lader en zijn connectors, en berichten voor ISO 15118. Een lader en zijn backoffice spreken één versie af als de verbinding opent. De tabel hierboven zet de berichten naast elkaar, en de OCPP 1.6J-naslag bevat elk bericht van 1.6.

Nadat OCPP 2.0 was verschenen, kwamen er problemen aan het licht die alleen op te lossen waren door de schema's van de berichten te wijzigen, en daarin kon een implementatie van 2.0 niet meegaan. De Open Charge Alliance gaf de verbeterde versie een eigen nummer, 2.0.1, en raadt aan alleen 2.0.1 te implementeren. In de specificatie betekent OCPP 2.0 de versie 2.0.1, tenzij er iets anders staat.

De Open Charge Alliance publiceert beide gratis op haar website, met een JSON-schema voor elk bericht en een errata-overzicht. Deze naslag volgt de JSON-schema's en deel 2 van de specificatie. Waar de twee verschillen, hebben de specificatie en haar errata gelijk.

Zoek hem op in de laderdatabase: 102 laders daarin vermelden OCPP 2.0.1 en 4 vermelden 2.1. De datasheet zegt het meestal ook. Een lader die meerdere versies ondersteunt, biedt ze allemaal aan als hij verbinding maakt, en de backoffice kiest er een.

OCPP 1.6J op Plugchoice

Plugchoice verbindt vandaag OCPP 1.6J-laders, afhankelijk van model, firmware en configuratie.