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.
Geen bericht gevonden.
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.
- Unknown
Component - De lader heeft zo'n component niet.
- Unknown
Variable - De component heeft zo'n variabele niet.
- NotSupported
AttributeType - 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 variabele | Type | Wat het instelt | In OCPP 1.6 |
|---|---|---|---|
| OCPPCommCtrlr | integer in seconden | Seconden zonder andere berichten waarna de lader een Heartbeat stuurt. | Heartbeat |
| OCPPCommCtrlr | integer | Hoe vaak de lader probeert een TransactionEvent af te leveren dat de backoffice niet kon verwerken. | Transaction |
| OCPPCommCtrlr | integer | Seconden die de lader wacht voordat hij het opnieuw probeert. | Transaction |
| OCPPCommCtrlr | integer in seconden | Seconden tussen WebSocket-pings; 0 zet de eigen pings van de lader uit. | Web |
| OCPPCommCtrlr | integer | Hoe vaak de lader een mislukte herstart opnieuw probeert. | Reset |
| OCPPCommCtrlr | boolean | Ontgrendel de kabel aan de kant van de lader als hij aan de kant van de auto wordt losgekoppeld. | Unlock |
| SampledDataCtrlr | list | Wat de lader tijdens een transactie meet, verstuurd in TransactionEvent met eventType Updated. | Meter |
| SampledDataCtrlr | integer in seconden | Seconden tussen die metingen; 0 stuurt er tijdens de transactie geen. | Meter |
| SampledDataCtrlr | list | Wat er in de TransactionEvent komt die de transactie afsluit. | Stop |
| AlignedDataCtrlr | integer in seconden | Seconden tussen metingen op vaste kloktijden. | Clock |
| AlignedDataCtrlr | list | Wat de metingen op vaste kloktijden bevatten. | Meter |
| AlignedDataCtrlr | list | Metingen op vaste kloktijden die in de TransactionEvent komen die de transactie afsluit. | Stop |
| TxCtrlr | integer in seconden | Seconden die een bestuurder heeft om de stekker in te steken nadat de transactie is gestart, voordat die wordt geannuleerd. | Connection |
| TxCtrlr | boolean | Beëindig de transactie als de kabel aan de kant van de auto wordt losgekoppeld. | Stop |
| TxCtrlr | boolean | Stop een lopende transactie als het ID-token niet geaccepteerd blijkt. | Stop |
| TxCtrlr | integer | Energie in Wh die de lader nog mag leveren nadat de backoffice het ID-token heeft geweigerd. | Max |
| TxCtrlr | list | Wanneer een transactie begint: bij autorisatie, bij het insteken van de stekker, zodra er energie stroomt, enzovoort. | Nieuw in 2.0.1 |
| TxCtrlr | list | Wanneer een transactie eindigt, gekozen uit dezelfde lijst. | Nieuw in 2.0.1 |
| AuthCtrlr | boolean | Of de lader het ID-token van een start op afstand eerst met een Authorize controleert. | Authorize |
| AuthCtrlr | boolean | Start offline transacties voor ID-tokens die hij al kent. | Local |
| AuthCtrlr | boolean | Start voor ID-tokens die hij al kent zonder op de backoffice te wachten. | Local |
| AuthCtrlr | boolean | Start offline transacties voor onbekende ID-tokens. | Allow |
| AuthCacheCtrlr | boolean | Gebruik de autorisatiecache. | Authorization |
| LocalAuthListCtrlr | boolean | Gebruik de lokale autorisatielijst. | Local |
| LocalAuthListCtrlr | integer | Maximaal aantal ID-tokens in één SendLocalList. | Send |
| SmartChargingCtrlr | integer | Hoogste stackniveau dat een laadprofiel mag hebben. | Charge |
| SmartChargingCtrlr | list | Of schema's in ampère, in watt of in beide kunnen. | Charging |
| SmartChargingCtrlr | integer | Maximaal aantal periodes in één laadschema. | Charging |
| SmartChargingCtrlr | boolean | Of de lader tijdens een transactie van drie fasen naar één kan wisselen. | Connector |
| ReservationCtrlr | boolean | Of een reservering voor de lader als geheel kan gelden in plaats van voor één EVSE. | Reserve |
Geen variabele gevonden.
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.
| Profiel | Hoe de lader bewijst wie hij is | Hoe de backoffice bewijst wie hij is | De verbinding |
|---|---|---|---|
| 1. Onbeveiligd transport met basisauthenticatie | HTTP Basic-authenticatie, met een wachtwoord | Dat doet hij niet | Niet versleuteld. Alleen voor vertrouwde netwerken, zoals een VPN tussen de lader en de backoffice. |
| 2. TLS met basisauthenticatie | HTTP Basic-authenticatie, met een wachtwoord | Zijn TLS-servercertificaat | TLS 1.2 of hoger |
| 3. TLS met clientcertificaten | Zijn eigen TLS-clientcertificaat | Zijn TLS-servercertificaat | TLS 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.6 | OCPP 2.0.1 en 2.1 | Wat er veranderde |
|---|---|---|
| StartTransaction, StopTransaction | TransactionEvent | Eén bericht met eventType Started, Updated of Ended. De lader bepaalt het transactie-ID, een string. |
| MeterValues | TransactionEvent, MeterValues | Metingen tijdens een transactie gaan in TransactionEvent; MeterValues bevat metingen daarbuiten. |
| StatusNotification | StatusNotification, NotifyEvent | StatusNotification 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. |
| RemoteStartTransaction | RequestStartTransaction | Bevat een idToken-object en een remoteStartId, dat terugkomt in de TransactionEvent die de transactie start. |
| RemoteStopTransaction | RequestStopTransaction | Stopt een transactie op haar ID, dat nu een string is. |
| ChangeConfiguration | SetVariables | Zet meerdere variabelen van het device model in één bericht. |
| GetConfiguration | GetVariables, GetBaseReport, GetReport | Leest gekozen variabelen, of vraagt een rapport op dat binnenkomt in NotifyReport-berichten. |
| GetDiagnostics | GetLog | Vraagt een diagnostieklog of een beveiligingslog op. |
| DiagnosticsStatusNotification | LogStatusNotification | Meldt de voortgang van die upload. |
| Reset | Reset | Immediate of OnIdle in plaats van Hard of Soft, en hij kan één EVSE herstarten. |
| ChangeAvailability | ChangeAvailability | Richt zich via het veld evse op de lader, een EVSE of een connector. |
| Authorize | Authorize | Een idToken-object met een type, in plaats van de idTag-string. |
| BootNotification | BootNotification | Voegt 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, FirmwareStatusNotification | Dezelfde namen | Dezelfde 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.