Die Protokollreferenz für OCPP 1.6J.
Was eine Ladestation und ihr Backoffice einander sagen: alle 28 Nachrichten mit ihren Feldern und einem Beispiel, die 43 Konfigurationsschlüssel, was eine Ladestation messen kann und was in der Praxis schiefgeht.
Was ist OCPP 1.6J?
OCPP, das Open Charge Point Protocol, ist ein freier und offener Standard der Open Charge Alliance. Er legt fest, wie eine Ladestation mit der Software spricht, die sie verwaltet: in der Spezifikation das Central System, im Markt das Backoffice.
In Version 1.6J öffnet die Ladestation einen WebSocket zum Backoffice, und beide Seiten senden darüber JSON-Nachrichten. Die Ladestation meldet ihren Status, ihre Zählerwerte und ihre Ladevorgänge. Das Backoffice startet und stoppt Ladevorgänge, ändert Einstellungen und setzt Ladegrenzen.
Weil der Standard offen ist, kann sich eine Ladestation, die ihn spricht, auch mit anderen Backoffices verbinden, die ihn sprechen, abhängig von Modell, Firmware und Konfiguration. Deshalb können Sie an einem Standort Marken mischen und eine Ladestation zu einem anderen Backoffice umziehen. Um eine Ladestation gleichzeitig mit mehreren Backoffices zu betreiben, nutzen Sie den OCPP Proxy.
- Ein offener StandardFrei implementierbar, gepflegt von der Open Charge Alliance.
- WebSocket und JSONEine Verbindung, die offen bleibt, mit strukturierten Nachrichten.
- 28 NachrichtenIn sechs Feature-Profilen, von Core bis Remote Trigger.
- Beide RichtungenDie Ladestation und das Backoffice starten jeweils eigene Nachrichten.
Alle 28 Nachrichten von OCPP 1.6
Jede Nachricht ist eine Anfrage der einen Seite und eine Antwort der anderen, einander zugeordnet über eine eindeutige Nachrichten-ID.
Core
Erforderlich. Grundlegende Ladestationsoperationen: Autorisierung, Transaktionen, Statusmeldungen, Konfiguration und grundlegende Fernsteuerung.
Fragt die Autorisierung für einen idTag an, bevor das Laden erlaubt wird.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| idTag | string | Pflichtfeld | Die zu autorisierende Kennung. Höchstens 20 Zeichen. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| idTagInfo | object | Pflichtfeld | Autorisierungsinformationen zum idTag. |
| status | string | Pflichtfeld | Autorisierungsstatus. Einer der Werte Accepted, Blocked, Expired, Invalid, ConcurrentTx. |
| expiryDate | string | Optional | Zeitpunkt, nach dem der idTag als abgelaufen gilt. Datum und Uhrzeit. |
| parentIdTag | string | Optional | Übergeordneter idTag für die Gruppenautorisierung. Höchstens 20 Zeichen. |
Beispiel
[2, "7f83df9c", "Authorize", {
"idTag": "04A2B3C4D5E6F7"
}][3, "7f83df9c", {
"idTagInfo": {
"status": "Accepted"
}
}]In OCPP 2.0.1: Authorize
Wird nach dem Start gesendet, um sich beim Backoffice anzumelden.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| chargePointVendor | string | Pflichtfeld | Hersteller der Ladestation. Höchstens 20 Zeichen. |
| chargePointModel | string | Pflichtfeld | Modell der Ladestation. Höchstens 20 Zeichen. |
| chargePointSerialNumber | string | Optional | Seriennummer der Ladestation. Höchstens 25 Zeichen. |
| chargeBoxSerialNumber | string | Optional | Seriennummer der Charge Box. Höchstens 25 Zeichen. |
| firmwareVersion | string | Optional | Firmwareversion der Ladestation. Höchstens 50 Zeichen. |
| iccid | string | Optional | ICCID der SIM-Karte. Höchstens 20 Zeichen. |
| imsi | string | Optional | IMSI der SIM-Karte. Höchstens 20 Zeichen. |
| meterType | string | Optional | Typ des Energiezählers. Höchstens 25 Zeichen. |
| meterSerialNumber | string | Optional | Seriennummer des Energiezählers. Höchstens 25 Zeichen. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Registrierungsstatus. Einer der Werte Accepted, Pending, Rejected. |
| currentTime | string | Pflichtfeld | Aktuelle Zeit des Central System. Datum und Uhrzeit. |
| interval | integer | Pflichtfeld | Heartbeat-Intervall in Sekunden. |
Beispiel
[2, "392b5b40", "BootNotification", {
"chargePointVendor": "ExampleVendor",
"chargePointModel": "ExampleModel",
"firmwareVersion": "1.4.2"
}][3, "392b5b40", {
"status": "Accepted",
"currentTime": "2026-10-06T09:30:00Z",
"interval": 300
}]In OCPP 2.0.1: BootNotification
Ändert die Verfügbarkeit eines Ladepunkts.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| connectorId | integer | Pflichtfeld | ID des Ladepunkts (0 = die gesamte Ladestation). |
| type | string | Pflichtfeld | Gewünschte Änderung der Verfügbarkeit. Einer der Werte Inoperative, Operative. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ergebnis der Anfrage zur Verfügbarkeitsänderung. Einer der Werte Accepted, Rejected, Scheduled. |
Beispiel
[2, "be3dcf2e", "ChangeAvailability", {
"connectorId": 1,
"type": "Operative"
}][3, "be3dcf2e", {
"status": "Accepted"
}]In OCPP 2.0.1: ChangeAvailability
Ändert einen Konfigurationsschlüssel auf der Ladestation.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| key | string | Pflichtfeld | Zu ändernder Konfigurationsschlüssel. Höchstens 50 Zeichen. |
| value | string | Pflichtfeld | Neuer Wert für den Konfigurationsschlüssel. Höchstens 500 Zeichen. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ergebnis der Konfigurationsänderung. Einer der Werte Accepted, Rejected, RebootRequired, NotSupported. |
Beispiel
[2, "6fdf2255", "ChangeConfiguration", {
"key": "MeterValueSampleInterval",
"value": "60"
}][3, "6fdf2255", {
"status": "Accepted"
}]In OCPP 2.0.1: SetVariables
Leert den Autorisierungs-Cache auf der Ladestation.
Request
Keine Felder: Die Anfrage ist leer.
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ergebnis der Anfrage zum Leeren des Cache. Einer der Werte Accepted, Rejected. |
Beispiel
[2, "e993e844", "ClearCache", {}][3, "e993e844", {
"status": "Accepted"
}]In OCPP 2.0.1: ClearCache
Herstellerspezifischer Datenaustausch.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| vendorId | string | Pflichtfeld | Kennzeichnet den Hersteller. Höchstens 255 Zeichen. |
| messageId | string | Optional | Zusätzliche Kennung der Nachricht. Höchstens 50 Zeichen. |
| data | string | Optional | Herstellerspezifische Daten. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ergebnis der Datenübertragung. Einer der Werte Accepted, Rejected, UnknownMessageId, UnknownVendorId. |
| data | string | Optional | Herstellerspezifische Antwortdaten. |
Beispiel
[2, "e1a403d5", "DataTransfer", {
"vendorId": "com.example"
}][3, "e1a403d5", {
"status": "Accepted"
}]In OCPP 2.0.1: DataTransfer
Liest Konfigurationsschlüssel aus der Ladestation aus.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| key | array | Optional | Liste der abzufragenden Konfigurationsschlüssel. Je Eintrag höchstens 50 Zeichen. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| configurationKey | array | Optional | Liste der bekannten Konfigurationsschlüssel. |
| key | string | Pflichtfeld | Name des Konfigurationsschlüssels. Höchstens 50 Zeichen. |
| readonly | boolean | Pflichtfeld | Ob der Schlüssel schreibgeschützt ist. |
| value | string | Optional | Aktueller Wert des Schlüssels. Höchstens 500 Zeichen. |
| unknownKey | array | Optional | Liste der angefragten Schlüssel, die unbekannt sind. Je Eintrag höchstens 50 Zeichen. |
Beispiel
[2, "02bd00f5", "GetConfiguration", {
"key": [
"MeterValueSampleInterval"
]
}][3, "02bd00f5", {
"configurationKey": [
{
"key": "MeterValueSampleInterval",
"readonly": false,
"value": "60"
}
]
}]In OCPP 2.0.1: GetBaseReport und GetVariables
Regelmäßiges Lebenszeichen, damit das Backoffice weiß, dass die Ladestation online ist.
Request
Keine Felder: Die Anfrage ist leer.
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| currentTime | string | Pflichtfeld | Aktuelle Zeit des Central System. Datum und Uhrzeit. |
Beispiel
[2, "83622997", "Heartbeat", {}][3, "83622997", {
"currentTime": "2026-10-06T09:30:00Z"
}]In OCPP 2.0.1: Heartbeat
Sendet regelmäßige oder angeforderte Zählerstände.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| connectorId | integer | Pflichtfeld | ID des Ladepunkts (0 = Hauptzähler). |
| meterValue | array | Pflichtfeld | Ein oder mehrere Zählerwerte mit Zeitstempel. |
| timestamp | string | Pflichtfeld | Zeitstempel des Zählerwerts. Datum und Uhrzeit. |
| sampledValue | array | Pflichtfeld | Ein oder mehrere Messwerte. |
| value | string | Pflichtfeld | Der gemessene Wert. |
| context | string | Optional | Kontext der Messung. Einer der Werte Interruption.Begin, Interruption.End, Sample.Clock, Sample.Periodic, Transaction.Begin, Transaction.End, Trigger, Other. |
| format | string | Optional | Format des Werts. Einer der Werte Raw, SignedData. |
| measurand | string | Optional | Art der Messung. Einer der Werte Energy.Active.Export.Register, Energy.Active.Import.Register, Energy.Reactive.Export.Register, Energy.Reactive.Import.Register, Energy.Active.Export.Interval, Energy.Active.Import.Interval, Energy.Reactive.Export.Interval, Energy.Reactive.Import.Interval, Power.Active.Export, Power.Active.Import, Power.Offered, Power.Reactive.Export, Power.Reactive.Import, Power.Factor, Current.Import, Current.Export, Current.Offered, Voltage, Frequency, Temperature, SoC, RPM. |
| phase | string | Optional | Phase, auf die sich die Messung bezieht. Einer der Werte L1, L2, L3, N, L1-N, L2-N, L3-N, L1-L2, L2-L3, L3-L1. |
| location | string | Optional | Ort der Messung. Einer der Werte Cable, EV, Inlet, Outlet, Body. |
| unit | string | Optional | Maßeinheit. Einer der Werte Wh, kWh, varh, kvarh, W, kW, VA, kVA, var, kvar, A, V, K, Celcius, Celsius, Fahrenheit, Percent. |
| transactionId | integer | Optional | Transaktion, zu der diese Zählerwerte gehören. |
Response
Keine Felder: Die Antwort ist leer.
Beispiel
[2, "80a15023", "MeterValues", {
"connectorId": 1,
"meterValue": [
{
"timestamp": "2026-10-06T09:30:00Z",
"sampledValue": [
{
"value": "19840",
"measurand": "Energy.Active.Import.Register",
"unit": "Wh"
}
]
}
],
"transactionId": 4521
}][3, "80a15023", {}]In OCPP 2.0.1: MeterValues
Startet einen Ladevorgang aus der Ferne.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| idTag | string | Pflichtfeld | Die Kennung für diesen Ladevorgang. Höchstens 20 Zeichen. |
| connectorId | integer | Optional | Ladepunkt, an dem gestartet wird. |
| chargingProfile | object | Optional | Ladeprofil, das für diesen Ladevorgang gilt. |
| chargingProfileId | integer | Pflichtfeld | Eindeutige Kennung dieses Ladeprofils. |
| stackLevel | integer | Pflichtfeld | Prioritätsstufe des Profils (höher = höhere Priorität). |
| chargingProfilePurpose | string | Pflichtfeld | Zweck des Ladeprofils. Einer der Werte ChargePointMaxProfile, TxDefaultProfile, TxProfile. |
| chargingProfileKind | string | Pflichtfeld | Art des Ladeplans. Einer der Werte Absolute, Recurring, Relative. |
| chargingSchedule | object | Pflichtfeld | Der Ladeplan. |
| chargingRateUnit | string | Pflichtfeld | Einheit der Laderate (Ampere oder Watt). Einer der Werte A, W. |
| chargingSchedulePeriod | array | Pflichtfeld | Liste der Zeitabschnitte des Plans. |
| startPeriod | integer | Pflichtfeld | Beginn des Abschnitts in Sekunden ab Planbeginn. |
| limit | number | Pflichtfeld | Leistungs- oder Stromgrenze in diesem Abschnitt. In Schritten von 0,1. |
| numberPhases | integer | Optional | Anzahl der Phasen, mit denen geladen wird. |
| duration | integer | Optional | Dauer des Plans in Sekunden. |
| startSchedule | string | Optional | Beginn des Plans. Datum und Uhrzeit. |
| minChargingRate | number | Optional | Unterstützte minimale Laderate. In Schritten von 0,1. |
| transactionId | integer | Optional | Transaktion, für die dieses Profil gilt. |
| recurrencyKind | string | Optional | Wiederholungsrhythmus für wiederkehrende Profile. Einer der Werte Daily, Weekly. |
| validFrom | string | Optional | Zeitpunkt, ab dem das Profil gilt. Datum und Uhrzeit. |
| validTo | string | Optional | Zeitpunkt, nach dem das Profil nicht mehr gilt. Datum und Uhrzeit. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ob die Ladestation die Anfrage angenommen hat. Einer der Werte Accepted, Rejected. |
Beispiel
[2, "b7e2ef8a", "RemoteStartTransaction", {
"idTag": "04A2B3C4D5E6F7",
"connectorId": 1
}][3, "b7e2ef8a", {
"status": "Accepted"
}]In OCPP 2.0.1: RequestStartTransaction
Beendet einen Ladevorgang aus der Ferne.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| transactionId | integer | Pflichtfeld | ID der zu beendenden Transaktion. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ob die Ladestation die Anfrage angenommen hat. Einer der Werte Accepted, Rejected. |
Beispiel
[2, "7fb0afb2", "RemoteStopTransaction", {
"transactionId": 4521
}][3, "7fb0afb2", {
"status": "Accepted"
}]In OCPP 2.0.1: RequestStopTransaction
Setzt die Ladestation zurück (hart oder weich).
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| type | string | Pflichtfeld | Art des durchzuführenden Resets. Einer der Werte Hard, Soft. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ob die Ladestation den Reset angenommen hat. Einer der Werte Accepted, Rejected. |
Beispiel
[2, "526d688f", "Reset", {
"type": "Soft"
}][3, "526d688f", {
"status": "Accepted"
}]In OCPP 2.0.1: Reset
Meldet dem Backoffice, dass ein Ladevorgang begonnen hat.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| connectorId | integer | Pflichtfeld | Ladepunkt, an dem die Transaktion begann. |
| idTag | string | Pflichtfeld | Kennung, mit der die Transaktion gestartet wurde. Höchstens 20 Zeichen. |
| meterStart | integer | Pflichtfeld | Zählerstand zu Beginn der Transaktion (Wh). |
| timestamp | string | Pflichtfeld | Zeitstempel des Transaktionsbeginns. Datum und Uhrzeit. |
| reservationId | integer | Optional | ID der genutzten Reservierung. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| idTagInfo | object | Pflichtfeld | Autorisierungsinformationen zum idTag. |
| status | string | Pflichtfeld | Autorisierungsstatus. Einer der Werte Accepted, Blocked, Expired, Invalid, ConcurrentTx. |
| expiryDate | string | Optional | Zeitpunkt, nach dem der idTag als abgelaufen gilt. Datum und Uhrzeit. |
| parentIdTag | string | Optional | Übergeordneter idTag für die Gruppenautorisierung. Höchstens 20 Zeichen. |
| transactionId | integer | Pflichtfeld | Transaktions-ID, vergeben vom Central System. |
Beispiel
[2, "2410a6a5", "StartTransaction", {
"connectorId": 1,
"idTag": "04A2B3C4D5E6F7",
"meterStart": 12500,
"timestamp": "2026-10-06T09:30:00Z"
}][3, "2410a6a5", {
"idTagInfo": {
"status": "Accepted"
},
"transactionId": 4521
}]In OCPP 2.0.1: TransactionEvent
Meldet den aktuellen Status und etwaige Fehler eines Ladepunkts.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| connectorId | integer | Pflichtfeld | Ladepunkt, für den der Status gemeldet wird. |
| errorCode | string | Pflichtfeld | Fehlercode (NoError, wenn kein Fehler vorliegt). Einer der Werte ConnectorLockFailure, EVCommunicationError, GroundFailure, HighTemperature, InternalError, LocalListConflict, NoError, OtherError, OverCurrentFailure, PowerMeterFailure, PowerSwitchFailure, ReaderFailure, ResetFailure, UnderVoltage, OverVoltage, WeakSignal. |
| status | string | Pflichtfeld | Aktueller Status des Ladepunkts. Einer der Werte Available, Preparing, Charging, SuspendedEVSE, SuspendedEV, Finishing, Reserved, Unavailable, Faulted. |
| info | string | Optional | Zusätzliche Freitextinformation zum Status. Höchstens 50 Zeichen. |
| timestamp | string | Optional | Zeitstempel der Statusänderung. Datum und Uhrzeit. |
| vendorId | string | Optional | Herstellerspezifische Kennung. Höchstens 255 Zeichen. |
| vendorErrorCode | string | Optional | Herstellerspezifischer Fehlercode. Höchstens 50 Zeichen. |
Response
Keine Felder: Die Antwort ist leer.
Beispiel
[2, "d9b0420e", "StatusNotification", {
"connectorId": 1,
"errorCode": "NoError",
"status": "Available"
}][3, "d9b0420e", {}]In OCPP 2.0.1: StatusNotification
Meldet dem Backoffice, dass ein Ladevorgang beendet wurde.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| transactionId | integer | Pflichtfeld | ID der Transaktion, die beendet wird. |
| timestamp | string | Pflichtfeld | Zeitstempel des Transaktionsendes. Datum und Uhrzeit. |
| meterStop | integer | Pflichtfeld | Zählerstand am Ende der Transaktion (Wh). |
| idTag | string | Optional | Kennung, die das Beenden angefordert hat. Höchstens 20 Zeichen. |
| reason | string | Optional | Grund für das Beenden der Transaktion. Einer der Werte EmergencyStop, EVDisconnected, HardReset, Local, Other, PowerLoss, Reboot, Remote, SoftReset, UnlockCommand, DeAuthorized. |
| transactionData | array | Optional | Array von MeterValue-Objekten (gleiche Struktur wie MeterValues.meterValue). |
| timestamp | string | Pflichtfeld | Zeitstempel des Zählerwerts. Datum und Uhrzeit. |
| sampledValue | array | Pflichtfeld | Ein oder mehrere Messwerte. |
| value | string | Pflichtfeld | Der gemessene Wert. |
| context | string | Optional | Kontext der Messung. Einer der Werte Interruption.Begin, Interruption.End, Sample.Clock, Sample.Periodic, Transaction.Begin, Transaction.End, Trigger, Other. |
| format | string | Optional | Format des Werts. Einer der Werte Raw, SignedData. |
| measurand | string | Optional | Art der Messung. Einer der Werte Energy.Active.Export.Register, Energy.Active.Import.Register, Energy.Reactive.Export.Register, Energy.Reactive.Import.Register, Energy.Active.Export.Interval, Energy.Active.Import.Interval, Energy.Reactive.Export.Interval, Energy.Reactive.Import.Interval, Power.Active.Export, Power.Active.Import, Power.Offered, Power.Reactive.Export, Power.Reactive.Import, Power.Factor, Current.Import, Current.Export, Current.Offered, Voltage, Frequency, Temperature, SoC, RPM. |
| phase | string | Optional | Phase, auf die sich die Messung bezieht. Einer der Werte L1, L2, L3, N, L1-N, L2-N, L3-N, L1-L2, L2-L3, L3-L1. |
| location | string | Optional | Ort der Messung. Einer der Werte Cable, EV, Inlet, Outlet, Body. |
| unit | string | Optional | Maßeinheit. Einer der Werte Wh, kWh, varh, kvarh, W, kW, VA, kVA, var, kvar, A, V, K, Celcius, Celsius, Fahrenheit, Percent. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| idTagInfo | object | Optional | Autorisierungsinformationen zum idTag. |
| status | string | Pflichtfeld | Autorisierungsstatus. Einer der Werte Accepted, Blocked, Expired, Invalid, ConcurrentTx. |
| expiryDate | string | Optional | Zeitpunkt, nach dem der idTag als abgelaufen gilt. Datum und Uhrzeit. |
| parentIdTag | string | Optional | Übergeordneter idTag für die Gruppenautorisierung. Höchstens 20 Zeichen. |
Beispiel
[2, "b380dc07", "StopTransaction", {
"transactionId": 4521,
"timestamp": "2026-10-06T09:30:00Z",
"meterStop": 19840,
"idTag": "04A2B3C4D5E6F7"
}][3, "b380dc07", {
"idTagInfo": {
"status": "Accepted"
}
}]In OCPP 2.0.1: TransactionEvent
Entriegelt einen Ladepunkt aus der Ferne.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| connectorId | integer | Pflichtfeld | Zu entriegelnder Ladepunkt. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ergebnis der Entriegelungsanfrage. Einer der Werte Unlocked, UnlockFailed, NotSupported. |
Beispiel
[2, "882ccab0", "UnlockConnector", {
"connectorId": 1
}][3, "882ccab0", {
"status": "Unlocked"
}]In OCPP 2.0.1: UnlockConnector
Firmware-Management
Firmware-Updates und Diagnose-Upload für die Remote-Wartung von Ladestationen.
Fordert die Ladestation auf, Diagnoseprotokolle hochzuladen.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| location | string | Pflichtfeld | URI, an die die Diagnosedaten hochgeladen werden sollen. Eine Adresse (URI). |
| retries | integer | Optional | Anzahl der Wiederholungsversuche beim Hochladen. |
| retryInterval | integer | Optional | Sekunden zwischen den Wiederholungsversuchen. |
| startTime | string | Optional | Beginn des Zeitraums für die Protokollerfassung. Datum und Uhrzeit. |
| stopTime | string | Optional | Ende des Zeitraums für die Protokollerfassung. Datum und Uhrzeit. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| fileName | string | Optional | Name der Diagnosedatei. Höchstens 255 Zeichen. |
Beispiel
[2, "da7920cd", "GetDiagnostics", {
"location": "ftp://files.example.com/diagnostics/"
}][3, "da7920cd", {}]In OCPP 2.0.1: GetLog
Meldet den Status eines Diagnose-Uploads.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Aktueller Status des Diagnose-Uploads. Einer der Werte Idle, Uploaded, UploadFailed, Uploading. |
Response
Keine Felder: Die Antwort ist leer.
Beispiel
[2, "d1c853b4", "DiagnosticsStatusNotification", {
"status": "Uploaded"
}][3, "d1c853b4", {}]In OCPP 2.0.1: LogStatusNotification
Meldet den Status eines Firmware-Updates.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Aktueller Status des Firmware-Updates. Einer der Werte Downloaded, DownloadFailed, Downloading, Idle, InstallationFailed, Installing, Installed. |
Response
Keine Felder: Die Antwort ist leer.
Beispiel
[2, "dc9afcb2", "FirmwareStatusNotification", {
"status": "Installed"
}][3, "dc9afcb2", {}]In OCPP 2.0.1: FirmwareStatusNotification
Weist die Ladestation an, neue Firmware herunterzuladen und zu installieren.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| location | string | Pflichtfeld | URI, unter der die Firmware heruntergeladen werden kann. Eine Adresse (URI). |
| retrieveDate | string | Pflichtfeld | Zeitpunkt, ab dem die Ladestation die Firmware abrufen soll. Datum und Uhrzeit. |
| retries | integer | Optional | Anzahl der Wiederholungsversuche beim Herunterladen. |
| retryInterval | integer | Optional | Sekunden zwischen den Wiederholungsversuchen. |
Response
Keine Felder: Die Antwort ist leer.
Beispiel
[2, "a57cc6a2", "UpdateFirmware", {
"location": "ftp://files.example.com/fw-1.4.3.bin",
"retrieveDate": "2026-10-07T02:00:00Z"
}][3, "a57cc6a2", {}]In OCPP 2.0.1: UpdateFirmware
Lokale Autorisierungsliste
Verwaltung einer lokalen Autorisierungsliste auf der Ladestation für die Offline-Authentifizierung.
Liest die Versionsnummer der lokalen Autorisierungsliste aus.
Request
Keine Felder: Die Anfrage ist leer.
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| listVersion | integer | Pflichtfeld | Aktuelle Versionsnummer der lokalen Autorisierungsliste. |
Beispiel
[2, "ccf23a29", "GetLocalListVersion", {}][3, "ccf23a29", {
"listVersion": 1
}]In OCPP 2.0.1: GetLocalListVersion
Sendet eine vollständige oder teilweise Aktualisierung der lokalen Autorisierungsliste.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| listVersion | integer | Pflichtfeld | Versionsnummer dieser Listenaktualisierung. |
| updateType | string | Pflichtfeld | Ob es ein vollständiger Ersatz oder eine differenzielle Aktualisierung ist. Einer der Werte Differential, Full. |
| localAuthorizationList | array | Optional | Liste der Autorisierungseinträge. |
| idTag | string | Pflichtfeld | Die zu autorisierende Kennung. Höchstens 20 Zeichen. |
| idTagInfo | object | Optional | Autorisierungsinformationen zum idTag. |
| status | string | Pflichtfeld | Autorisierungsstatus. Einer der Werte Accepted, Blocked, Expired, Invalid, ConcurrentTx. |
| expiryDate | string | Optional | Zeitpunkt, nach dem der idTag als abgelaufen gilt. Datum und Uhrzeit. |
| parentIdTag | string | Optional | Übergeordneter idTag für die Gruppenautorisierung. Höchstens 20 Zeichen. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ergebnis der Aktualisierung der lokalen Liste. Einer der Werte Accepted, Failed, NotSupported, VersionMismatch. |
Beispiel
[2, "a23c9563", "SendLocalList", {
"listVersion": 1,
"updateType": "Full",
"localAuthorizationList": [
{
"idTag": "04A2B3C4D5E6F7",
"idTagInfo": {
"status": "Accepted"
}
}
]
}][3, "a23c9563", {
"status": "Accepted"
}]In OCPP 2.0.1: SendLocalList
Reservierung
Einen Ladepunkt für einen bestimmten Nutzer im Voraus reservieren.
Storniert eine bestehende Reservierung.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| reservationId | integer | Pflichtfeld | ID der zu stornierenden Reservierung. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ob die Reservierung storniert wurde. Einer der Werte Accepted, Rejected. |
Beispiel
[2, "63258356", "CancelReservation", {
"reservationId": 7
}][3, "63258356", {
"status": "Accepted"
}]In OCPP 2.0.1: CancelReservation
Legt eine Reservierung für einen bestimmten Ladepunkt an.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| connectorId | integer | Pflichtfeld | Zu reservierender Ladepunkt (0 = kein bestimmter Ladepunkt). |
| expiryDate | string | Pflichtfeld | Zeitpunkt, zu dem die Reservierung abläuft. Datum und Uhrzeit. |
| idTag | string | Pflichtfeld | Kennung, für die die Reservierung gilt. Höchstens 20 Zeichen. |
| reservationId | integer | Pflichtfeld | Eindeutige ID dieser Reservierung. |
| parentIdTag | string | Optional | Übergeordneter idTag für die Gruppenreservierung. Höchstens 20 Zeichen. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ergebnis der Reservierungsanfrage. Einer der Werte Accepted, Faulted, Occupied, Rejected, Unavailable. |
Beispiel
[2, "62a25d78", "ReserveNow", {
"connectorId": 1,
"expiryDate": "2026-10-06T10:00:00Z",
"idTag": "04A2B3C4D5E6F7",
"reservationId": 7
}][3, "62a25d78", {
"status": "Accepted"
}]In OCPP 2.0.1: ReserveNow
Intelligentes Laden
Ladeprofile für Lastmanagement, Solarintegration und geplantes Laden einrichten und verwalten.
Entfernt ein oder mehrere Ladeprofile von der Ladestation.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| id | integer | Optional | ID des zu entfernenden Ladeprofils. |
| connectorId | integer | Optional | Ladepunkt, für den Profile entfernt werden. |
| chargingProfilePurpose | string | Optional | Zweck der zu entfernenden Profile. Einer der Werte ChargePointMaxProfile, TxDefaultProfile, TxProfile. |
| stackLevel | integer | Optional | Stack-Level der zu entfernenden Profile. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ob Profile entfernt wurden. Einer der Werte Accepted, Unknown. |
Beispiel
[2, "2c436739", "ClearChargingProfile", {}][3, "2c436739", {
"status": "Accepted"
}]In OCPP 2.0.1: ClearChargingProfile
Fragt den kombinierten Ladeplan für einen Ladepunkt an.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| connectorId | integer | Pflichtfeld | Ladepunkt, für den der Plan abgefragt wird. |
| duration | integer | Pflichtfeld | Dauer des angefragten Plans in Sekunden. |
| chargingRateUnit | string | Optional | Bevorzugte Einheit für den Plan. Einer der Werte A, W. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ob die Ladestation den Plan liefern kann. Einer der Werte Accepted, Rejected. |
| connectorId | integer | Optional | Ladepunkt, für den der Plan gilt. |
| scheduleStart | string | Optional | Beginn des kombinierten Plans. Datum und Uhrzeit. |
| chargingSchedule | object | Optional | Der kombinierte Ladeplan. |
| chargingRateUnit | string | Pflichtfeld | Einheit der Laderate (Ampere oder Watt). Einer der Werte A, W. |
| chargingSchedulePeriod | array | Pflichtfeld | Liste der Zeitabschnitte des Plans. |
| startPeriod | integer | Pflichtfeld | Beginn des Abschnitts in Sekunden ab Planbeginn. |
| limit | number | Pflichtfeld | Leistungs- oder Stromgrenze in diesem Abschnitt. In Schritten von 0,1. |
| numberPhases | integer | Optional | Anzahl der Phasen, mit denen geladen wird. |
| duration | integer | Optional | Dauer des Plans in Sekunden. |
| startSchedule | string | Optional | Beginn des Plans. Datum und Uhrzeit. |
| minChargingRate | number | Optional | Unterstützte minimale Laderate. In Schritten von 0,1. |
Beispiel
[2, "50bc203f", "GetCompositeSchedule", {
"connectorId": 1,
"duration": 3600
}][3, "50bc203f", {
"status": "Accepted"
}]In OCPP 2.0.1: GetCompositeSchedule
Sendet ein Ladeprofil an die Ladestation.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| connectorId | integer | Pflichtfeld | Ladepunkt, für den das Profil gilt. |
| csChargingProfiles | object | Pflichtfeld | Das zu installierende Ladeprofil. |
| chargingProfileId | integer | Pflichtfeld | Eindeutige Kennung dieses Ladeprofils. |
| stackLevel | integer | Pflichtfeld | Prioritätsstufe des Profils (höher = höhere Priorität). |
| chargingProfilePurpose | string | Pflichtfeld | Zweck des Ladeprofils. Einer der Werte ChargePointMaxProfile, TxDefaultProfile, TxProfile. |
| chargingProfileKind | string | Pflichtfeld | Art des Ladeplans. Einer der Werte Absolute, Recurring, Relative. |
| chargingSchedule | object | Pflichtfeld | Der Ladeplan. |
| chargingRateUnit | string | Pflichtfeld | Einheit der Laderate (Ampere oder Watt). Einer der Werte A, W. |
| chargingSchedulePeriod | array | Pflichtfeld | Liste der Zeitabschnitte des Plans. |
| startPeriod | integer | Pflichtfeld | Beginn des Abschnitts in Sekunden ab Planbeginn. |
| limit | number | Pflichtfeld | Leistungs- oder Stromgrenze in diesem Abschnitt. In Schritten von 0,1. |
| numberPhases | integer | Optional | Anzahl der Phasen, mit denen geladen wird. |
| duration | integer | Optional | Dauer des Plans in Sekunden. |
| startSchedule | string | Optional | Beginn des Plans. Datum und Uhrzeit. |
| minChargingRate | number | Optional | Unterstützte minimale Laderate. In Schritten von 0,1. |
| transactionId | integer | Optional | Transaktion, für die dieses Profil gilt. |
| recurrencyKind | string | Optional | Wiederholungsrhythmus für wiederkehrende Profile. Einer der Werte Daily, Weekly. |
| validFrom | string | Optional | Zeitpunkt, ab dem das Profil gilt. Datum und Uhrzeit. |
| validTo | string | Optional | Zeitpunkt, nach dem das Profil nicht mehr gilt. Datum und Uhrzeit. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ob das Profil angenommen wurde. Einer der Werte Accepted, Rejected, NotSupported. |
Beispiel
[2, "01be9b20", "SetChargingProfile", {
"connectorId": 1,
"csChargingProfiles": {
"chargingProfileId": 10,
"stackLevel": 0,
"chargingProfilePurpose": "TxDefaultProfile",
"chargingProfileKind": "Relative",
"chargingSchedule": {
"chargingRateUnit": "A",
"chargingSchedulePeriod": [
{
"startPeriod": 0,
"limit": 16.0
}
]
}
}
}][3, "01be9b20", {
"status": "Accepted"
}]In OCPP 2.0.1: SetChargingProfile
Remote Trigger
Die Ladestation auffordern, eine bestimmte Nachricht auf Anfrage zu senden.
Fordert die Ladestation auf, eine bestimmte Nachricht sofort zu senden.
Request
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| requestedMessage | string | Pflichtfeld | Die Nachricht, die die Ladestation senden soll. Einer der Werte BootNotification, DiagnosticsStatusNotification, FirmwareStatusNotification, Heartbeat, MeterValues, StatusNotification. |
| connectorId | integer | Optional | Ladepunkt, für den die Nachricht gesendet werden soll. |
Response
| Feld | Typ | Verwendung | Inhalt |
|---|---|---|---|
| status | string | Pflichtfeld | Ob die Ladestation die Nachricht senden wird. Einer der Werte Accepted, Rejected, NotImplemented. |
Beispiel
[2, "4c736efd", "TriggerMessage", {
"requestedMessage": "StatusNotification"
}][3, "4c736efd", {
"status": "Accepted"
}]In OCPP 2.0.1: TriggerMessage
Keine Nachricht passt zu dieser Suche.
Konfigurationsschlüssel von OCPP 1.6
ChangeConfiguration setzt jeweils einen Schlüssel auf einer Ladestation, und GetConfiguration liest sie aus. Hier entscheidet sich das meiste Verhalten einer Ladestation im Praxisbetrieb: wie oft Zählerwerte ankommen, was sie enthalten, ob ein Ladevorgang einen Netzwerkausfall übersteht, wie ein Kabel entriegelt.
Wie sich der Aufruf verhält
- Jeder Wert ist ein StringAuch Zahlen und Booleans: "60", "true". Eine JSON-Zahl verletzt das Schema der Nachricht, und eine Ladestation, die das Schema prüft, antwortet mit einem CallError.
- Schreiben Sie Schlüsselnamen wie in der SpezifikationLaut Spezifikation spielt Groß- und Kleinschreibung bei Schlüsselnamen keine Rolle, doch nicht jede Ladestation hält sich daran. Schreiben Sie also MeterValuesSampledData und nicht metervaluessampleddata.
- Manche Schlüssel brauchen einen NeustartDie Ladestation antwortet mit RebootRequired, und dann liegt es an Ihnen, einen Reset zu senden.
- Hersteller ergänzen eigene SchlüsselGetConfiguration mit leerer Schlüsselliste liefert alle Schlüssel, die eine Ladestation unterstützt, auch die des Herstellers. Schlüssel, die Sie namentlich abfragen und die die Ladestation nicht kennt, kommen in unknownKey zurück.
Die vier Antworten
- Accepted
- Der Schlüssel ist gesetzt und jetzt aktiv.
- Rejected
- Der Schlüssel existiert, aber der Wert wurde abgelehnt: außerhalb des Wertebereichs, falsches Format oder auf dieser Ladestation schreibgeschützt.
- RebootRequired
- Der Wert ist gespeichert, gilt aber erst nach einem Neustart der Ladestation.
- NotSupported
- Die Ladestation implementiert diesen Schlüssel überhaupt nicht.
Alle 43 Schlüssel, nach Feature-Profil
| Schlüssel | Typ | Zugriff | Was er bewirkt |
|---|---|---|---|
| Core34 | |||
| AllowOfflineTxForUnknownIdOptional laut Spezifikation | boolean | Lesen und Schreiben | Ob die Ladestation offline eine Transaktion für einen unbekannten idTag startet.Mit true lädt ein Standort auch bei einem Netzwerkausfall weiter, mit dem Risiko von Ladevorgängen, die Sie womöglich niemandem in Rechnung stellen können. |
| AuthorizationCacheEnabledOptional laut Spezifikation | boolean | Lesen und Schreiben | Ob die Ladestation das Ergebnis früherer Authorize-Aufrufe zwischenspeichert.Nicht dasselbe wie die Local Auth List: Der Cache füllt sich aus echten Autorisierungen, die Liste schickt das Backend. |
| AuthorizeRemoteTxRequests | boolean | Lesen | Ob die Ladestation den idTag in einer RemoteStartTransaction vor dem Start autorisiert.Bei true braucht auch ein Fernstart aus der App einen Authorize-Durchlauf, ein ungültiger idTag lässt den Start also scheitern. |
| BlinkRepeatOptional laut Spezifikation | integer | Lesen und Schreiben | Wie oft die Ladestation die Lampe während einer Blinksequenz blinken lässt. |
| ClockAlignedDataInterval | integer | Lesen und Schreiben | Intervall für uhrzeitsynchrone Zählerwerte, gemessen ab Mitternacht. 0 schaltet sie ab.900 ergibt einen Wert zu jeder Viertelstunde. Dieser Schlüssel speist MeterValuesAlignedData, und er läuft unabhängig davon, ob ein Auto angeschlossen ist. |
| ConnectionTimeOut | integer | Lesen und Schreiben | Wie lange die Ladestation nach der Autorisierung darauf wartet, dass der Fahrer einsteckt, bevor sie den Ladepunkt wieder freigibt. |
| ConnectorPhaseRotation | CSL | Lesen und Schreiben | Phasenfolge pro Ladepunkt, in der Notation connectorId.RST, zum Beispiel 0.RST, 1.RST, 2.RTS.Ein Fehler hier bedeutet falsche Zählerwerte pro Phase und falsches einphasiges Lastmanagement. Prüfen Sie das an jedem dreiphasigen Standort. |
| ConnectorPhaseRotationMaxLengthOptional laut Spezifikation | integer | Lesen | Maximale Anzahl der Einträge in ConnectorPhaseRotation. |
| GetConfigurationMaxKeys | integer | Lesen | Maximale Anzahl der Schlüssel, die eine einzelne GetConfiguration-Anfrage abfragen darf.Fragen Sie mehr ab, antwortet die Ladestation womöglich mit einem Fehler. Senden Sie GetConfiguration ganz ohne Schlüssel, um alles zu erhalten, was sie unterstützt. |
| HeartbeatInterval | integer | Lesen und Schreiben | Wie oft die Ladestation einen Heartbeat sendet, wenn sonst nichts passiert.Die Antwort auf BootNotification kann diesen Wert überschreiben. Auf einer SIM mit Volumentarif ist ein kurzer Heartbeat ein stiller Datenverbrauch, der sich summiert. |
| LightIntensityOptional laut Spezifikation | integer | Lesen und Schreiben | Helligkeit der Beleuchtung der Ladestation, in Prozent. |
| LocalAuthorizeOffline | boolean | Lesen und Schreiben | Ob die Ladestation offline über ihre lokale Liste oder ihren Cache autorisiert. |
| LocalPreAuthorize | boolean | Lesen und Schreiben | Ob die Ladestation online eine Transaktion aus der lokalen Liste oder dem Cache startet, ohne auf das Backend zu warten.Verkürzt die Wartezeit an der Ladestation, dafür hat das Backend nicht bei jedem Start das letzte Wort. |
| MaxEnergyOnInvalidIdOptional laut Spezifikation | integer | Lesen und Schreiben | Energie, die die Ladestation noch liefert, nachdem sich eine Autorisierung als ungültig herausstellt. |
| MeterValuesAlignedData | CSL | Lesen und Schreiben | Messgrößen, die in den uhrzeitsynchronen MeterValues im Takt von ClockAlignedDataInterval gesendet werden.Dasselbe Vokabular an Messgrößen wie MeterValuesSampledData, anderer Auslöser: die Uhr, nicht der Ladevorgang. |
| MeterValuesAlignedDataMaxLengthOptional laut Spezifikation | integer | Lesen | Maximale Anzahl der Messgrößen in MeterValuesAlignedData. |
| MeterValuesSampledData | CSL | Lesen und Schreiben | Messgrößen, die während einer Transaktion erfasst und im Takt von MeterValueSampleInterval in MeterValues gesendet werden.Der nützlichste Schlüssel auf dieser Seite. Die ausführliche Betrachtung steht weiter unten. |
| MeterValuesSampledDataMaxLengthOptional laut Spezifikation | integer | Lesen | Maximale Anzahl der Messgrößen in MeterValuesSampledData.Lesen Sie diesen Wert, bevor Sie eine lange Liste aufbauen: Wird er überschritten, lehnt die Ladestation die ganze Liste ab. |
| MeterValueSampleInterval | integer | Lesen und Schreiben | Wie oft die Ladestation während einer Transaktion MeterValuesSampledData erfasst. 0 schaltet die Erfassung ab.60 ist ein vernünftiger Standard. Unter 30 erzeugen Sie mit einer langen Liste von Messgrößen viel Datenverkehr für sehr wenig zusätzliche Erkenntnis. |
| MinimumStatusDurationOptional laut Spezifikation | integer | Lesen und Schreiben | Mindestdauer, die die Ladestation in einem Status bleibt, bevor sie den nächsten meldet.Hilft gegen flatternde Statusmeldungen bei Ladestationen, die zwischen Preparing und Available hin- und herspringen. |
| NumberOfConnectors | integer | Lesen | Anzahl der physischen Ladepunkte an dieser Ladestation. |
| ResetRetries | integer | Lesen und Schreiben | Wie oft die Ladestation einen fehlgeschlagenen Reset wiederholt. |
| StopTransactionOnEVSideDisconnect | boolean | Lesen und Schreiben | Ob das Ausstecken auf der Fahrzeugseite die laufende Transaktion beendet.Bei false bleibt der Ladevorgang offen, nachdem das Kabel gezogen wurde, und so entstehen Ladevorgänge, die nie enden. |
| StopTransactionOnInvalidId | boolean | Lesen und Schreiben | Ob die Ladestation die Transaktion beendet, wenn das Backend den idTag ablehnt. |
| StopTxnAlignedData | CSL | Lesen und Schreiben | Uhrzeitsynchrone Messgrößen, die den transactionData von StopTransaction hinzugefügt werden. |
| StopTxnAlignedDataMaxLengthOptional laut Spezifikation | integer | Lesen | Maximale Anzahl der Messgrößen in StopTxnAlignedData. |
| StopTxnSampledData | CSL | Lesen und Schreiben | Erfasste Messgrößen, die den transactionData von StopTransaction hinzugefügt werden.Halten Sie diese Liste kurz. Alles darin wird für jede Messung des gesamten Ladevorgangs in einer einzigen StopTransaction-Payload wiederholt, und so erzeugen Ladestationen Stop-Nachrichten im Megabyte-Bereich, die Backends ablehnen. |
| StopTxnSampledDataMaxLengthOptional laut Spezifikation | integer | Lesen | Maximale Anzahl der Messgrößen in StopTxnSampledData. |
| SupportedFeatureProfiles | CSL | Lesen | Feature-Profile, die diese Ladestation implementiert, zum Beispiel Core, FirmwareManagement, SmartCharging.Die ehrliche Antwort darauf, was eine Ladestation kann. Lesen Sie sie, bevor Sie einem Kunden intelligentes Laden zusagen. |
| SupportedFeatureProfilesMaxLengthOptional laut Spezifikation | integer | Lesen | Maximale Anzahl der Einträge in SupportedFeatureProfiles. |
| TransactionMessageAttempts | integer | Lesen und Schreiben | Wie oft die Ladestation eine Transaktionsnachricht erneut sendet, die das Backend nicht bestätigt hat. |
| TransactionMessageRetryInterval | integer | Lesen und Schreiben | Grundwartezeit zwischen diesen Wiederholungen. Die Ladestation multipliziert sie mit der Nummer des Versuchs. |
| UnlockConnectorOnEVSideDisconnect | boolean | Lesen und Schreiben | Ob das Kabel an der Ladestation entriegelt, wenn es am Auto ausgesteckt wird. |
| WebSocketPingIntervalOptional laut Spezifikation | integer | Lesen und Schreiben | Intervall für WebSocket-Ping-Frames auf der OCPP-J-Verbindung.Die unauffällige Lösung für Ladestationen, die hinter einem NAT oder einer Firewall, die inaktive Verbindungen schließt, immer wieder offline gehen. |
| Lokale Autorisierungsliste3 | |||
| LocalAuthListEnabled | boolean | Lesen und Schreiben | Ob die lokale Autorisierungsliste genutzt wird. |
| LocalAuthListMaxLength | integer | Lesen | Wie viele Einträge die lokale Autorisierungsliste fasst. |
| SendLocalListMaxLength | integer | Lesen | Wie viele Einträge in eine einzelne SendLocalList-Nachricht passen.Eine größere Liste muss in mehreren differenziellen Aktualisierungen gesendet werden. |
| Reservierung1 | |||
| ReserveConnectorZeroSupportedOptional laut Spezifikation | boolean | Lesen | Ob die Ladestation eine Reservierung für Ladepunkt 0 annimmt, also für einen beliebigen Ladepunkt. |
| Intelligentes Laden5 | |||
| ChargeProfileMaxStackLevel | integer | Lesen | Höchstes Stack-Level, das die Ladestation bei einem Ladeprofil annimmt. Höhere Level haben Vorrang. |
| ChargingScheduleAllowedChargingRateUnit | CSL | Lesen | Welche Einheiten die Ladestation in einem Ladeplan annimmt: Strom (A), Leistung (W) oder beide.Senden Sie ein Profil in Watt an eine Ladestation, die nur Ampere annimmt, wird es abgelehnt. Dieser Schlüssel sagt Ihnen, welche Einheit Sie verwenden. |
| ChargingScheduleMaxPeriods | integer | Lesen | Maximale Anzahl der Zeitabschnitte in einem Ladeplan. |
| ConnectorSwitch3to1PhaseSupportedOptional laut Spezifikation | boolean | Lesen | Ob die Ladestation zwischen dreiphasigem und einphasigem Laden umschalten kann.Entscheidet, ob Sie unter das dreiphasige Minimum drosseln können, statt ganz zu pausieren. |
| MaxChargingProfilesInstalled | integer | Lesen | Wie viele Ladeprofile gleichzeitig installiert sein können. |
Kein Schlüssel passt zu dieser Suche.
MeterValuesSampledData: was eine Ladestation misst
Ein einziger Schlüssel, MeterValuesSampledData, entscheidet, welche Telemetrie Sie aus einem Ladevorgang erhalten. Er ist eine kommagetrennte Liste von Messgrößen, und die Ladestation erfasst jeden Eintrag im Intervall, das MeterValueSampleInterval festlegt, und sendet sie dann in einer MeterValues-Nachricht. Belassen Sie ihn beim Standardwert, erhalten Sie einen kumulativen Energiewert, genug für die Abrechnung, und sonst nichts: keine Leistungskurve, keinen Strom pro Phase, keine Spannung, keine Möglichkeit zu sehen, ob ein Limit für intelligentes Laden angekommen ist.
Er wirkt nie allein. MeterValueSampleInterval legt fest, wie oft er auslöst, MeterValuesSampledDataMaxLength begrenzt, wie viele Messgrößen Sie auflisten dürfen, StopTxnSampledData entscheidet, welche davon in StopTransaction wiederholt werden, und MeterValuesAlignedData nutzt dasselbe Vokabular nach Uhrzeit statt pro Ladevorgang.
Die Messgrößen
Jede dieser Größen darf in der Liste stehen. Welche eine Ladestation unterstützt, hängt von ihrer Hardware ab: Eine AC-Ladestation meldet den Ladezustand meist nicht, und eine einfache Ladestation hat womöglich nur das Energieregister.
| Messgröße | Einheit | Üblich bei | Was sie Ihnen liefert |
|---|---|---|---|
| Energy.Active.Import.Register | Wh | AC und DC | Kumulative aus dem Netz bezogene Energie, direkt vom Zählerregister abgelesen. Der Standard, wenn MeterValuesSampledData leer ist, und der Wert, auf dem fast jede Abrechnung aufbaut. |
| Energy.Active.Export.Register | Wh | V2G-fähig | Kumulative zurückgespeiste Energie, für bidirektionale Installationen. |
| Energy.Active.Import.Interval | Wh | AC und DC | Seit der vorigen Messung bezogene Energie statt eines laufenden Gesamtwerts. |
| Energy.Reactive.Import.Register | varh | Abhängig vom Zähler | Kumulative bezogene Blindenergie. |
| Power.Active.Import | W | AC und DC | Momentane Wirkleistung. Daraus zeichnen Sie eine Ladekurve, und darauf reagiert das Lastmanagement. |
| Power.Offered | W | AC und DC | Leistung, die die Ladestation dem Auto gerade anbietet. Vergleichen Sie sie mit Power.Active.Import, um zu sehen, ob ein Limit tatsächlich angewendet wird. |
| Power.Reactive.Import | var | Abhängig vom Zähler | Momentane Blindleistung. |
| Power.Factor | Verhältnis | Abhängig vom Zähler | Verhältnis von Wirkleistung zu Scheinleistung. |
| Current.Import | A | AC und DC | Bezogener Strom. Meist pro Phase gemeldet, sodass diese eine Messgröße drei Werte pro Messung ergeben kann. |
| Current.Offered | A | AC und DC | Stromgrenze, die die Ladestation dem Auto signalisiert. Die direkte Anzeige, ob Ihr Profil für intelligentes Laden angekommen ist. |
| Current.Export | A | V2G-fähig | Zurückgespeister Strom, für bidirektionale Installationen. |
| Voltage | V | AC und DC | Netzspannung, bei dreiphasigen Ladestationen pro Phase. Nützlich, um eine ausgefallene Phase oder eine schlechte Verbindung zu erkennen. |
| Frequency | Hz | Abhängig vom Zähler | Netzfrequenz. Die Spezifikation sieht dafür kein Feld unit vor. |
| Temperature | Celsius | Abhängig von der Ladestation | Temperatur an der Ladestation oder am Ladepunkt. Erklärt eine Leistungsreduzierung an einem heißen Tag, bevor jemand sie für eine Störung hält. |
| SoC | % | DC, oder ISO 15118 bei AC | Ladezustand der Batterie des Autos. Nur vorhanden, wenn das Auto ihn tatsächlich meldet, was es beim einfachen AC-Laden meist nicht tut. |
| RPM | rpm | Selten | Lüfterdrehzahl, bei Ladestationen, die sie melden. |
Keine Messgröße passt zu dieser Suche.
Listen, die funktionieren
Kopieren Sie eine davon in den Wert eines ChangeConfiguration-Aufrufs. Beginnen Sie mit wenigen Messgrößen und ergänzen Sie weitere, sobald die Ladestation sie annimmt.
- Nur Abrechnung
Das Minimum, das noch eine korrekte Rechnung ergibt. Der Standard auf den meisten Ladestationen.
Energy.Active.Import.Register - Standard-Telemetrie
Sinnvoller Standard für einen verwalteten AC-Standort: eine Leistungskurve, Strom pro Phase und Spannung für die Diagnose.
Energy.Active.Import.Register, Power.Active.Import, Current.Import, Voltage - Intelligentes Laden
Ergänzt die angebotenen Werte, damit Sie sehen, ob ein Profil tatsächlich angewendet wird, statt es anzunehmen.
Energy.Active.Import.Register, Power.Active.Import, Power.Offered, Current.Import, Current.Offered, Voltage - DC-Schnellladen
Ergänzt Ladezustand und Temperatur, die DC-Ladestationen melden und die die meisten Leistungsreduzierungen erklären.
Energy.Active.Import.Register, Power.Active.Import, Current.Import, Voltage, SoC, Temperature
Was schiefgeht
- Eine ungültige Messgröße führt zur Ablehnung der ganzen Liste
Ladestationen prüfen die Liste als Ganzes. Wird ein einzelner Eintrag nicht unterstützt, erhalten Sie Rejected oder NotSupported für alles, ohne Hinweis darauf, welcher fehlgeschlagen ist. Setzen Sie die Liste Messgröße für Messgröße, um den Verursacher zu finden, oder lesen Sie zuerst MeterValuesSampledDataMaxLength und die Herstellerdokumentation.
- Eine Messgröße kann drei Werte sein
Current.Import und Voltage werden pro Phase gemeldet, auf einer dreiphasigen Ladestation kommen sie also als je drei sampledValue-Einträge an, gekennzeichnet mit L1, L2, L3 oder L1-N und so weiter. Eine Liste mit sechs Messgrößen ergibt leicht ein Dutzend Werte pro Messung. Die Payload wächst schneller, als die Länge der Liste vermuten lässt.
- Wh oder kWh
Das Energieregister ist standardmäßig in Wh, aber das Feld unit kann kWh angeben, und manche Firmware tut das auch. Lesen Sie die Einheit aus, statt sie anzunehmen, sonst erhalten Sie eine Rechnung, die um den Faktor tausend danebenliegt.
- Ein kurzes Intervall hat seinen Preis
MeterValueSampleInterval auf 10 Sekunden mit einer langen Liste bedeutet Hunderte Nachrichten pro Ladevorgang. Auf einer SIM mit Volumentarif kostet das echtes Geld, und an einem großen Standort ist es echte Last für das Backend. 60 Sekunden sind ein guter Standard, 300 für Standorte, an denen Sie nur den Verlauf der Kurve brauchen.
- StopTxnSampledData ist die Payload-Falle
Alles, was dort steht, wird für jede Messung des gesamten Ladevorgangs in einer einzigen StopTransaction-Nachricht wiederholt. Eine lange Liste bei einem langen Ladevorgang erzeugt eine Payload, die groß genug ist, dass Backends sie ablehnen oder abschneiden, und die Transaktion wird dann nicht sauber abgeschlossen. Beschränken Sie sie auf das Energieregister, sofern Sie keinen bestimmten Grund haben.
- Ohne Energieregister funktioniert die Abrechnung nicht
Steht Energy.Active.Import.Register nicht in der Liste, enthalten die periodischen Zählerwerte keinen kumulativen Gesamtwert. Die meisten Backends greifen dann auf meterStart und meterStop aus den Transaktionsnachrichten zurück, und jeder Ladevorgang, bei dem StopTransaction fehlt, lässt sich nicht abrechnen. Lassen Sie ihn immer in der Liste.
- SoC ist bei AC meist nicht verfügbar
Der Ladezustand kommt vom Auto, über ISO 15118 oder das DC-Ladeprotokoll. An einer einfachen AC-Ladestation ohne Plug and Charge meldet das Auto ihn nicht, eine Anfrage nach SoC wird also abgelehnt oder liefert nichts Brauchbares.
- Lesen Sie das Feld context
Jeder sampledValue hat einen context: Sample.Periodic, Transaction.Begin, Transaction.End, Sample.Clock oder Trigger. Ein Wert bei Transaction.Begin ist ein Anfangsstand des Registers, kein Verbrauch. Wer jede Messung als periodisch behandelt, zählt Ladevorgänge doppelt.
Fragen zu OCPP 1.6J
OCPP 1.6J ist Version 1.6 des Open Charge Point Protocol in der JSON-Variante. Die Ladestation öffnet einen WebSocket zu ihrem Backoffice, und beide Seiten senden darüber JSON-Nachrichten. Die Open Charge Alliance hat Version 1.6 im Jahr 2015 veröffentlicht, und die meisten Ladestationen unterstützen sie noch: In unserer Ladestationsdatenbank unterstützen 483 der 495 Ladestationen mit bekannter OCPP-Version 1.6.
Sie übertragen dieselben Nachrichten auf unterschiedliche Weise. 1.6J sendet JSON über einen WebSocket, den die Ladestation offen hält, die Ladestation braucht also nur eine ausgehende Verbindung. 1.6S sendet SOAP über HTTP, und dann muss auch das Backoffice die Ladestation erreichen können.
2.0.1 ist eine neuere Version mit eigenen Nachrichten. Sie beschreibt die Einstellungen einer Ladestation in einem Gerätemodell, hat Sicherheitsprofile eingebaut, ersetzt StartTransaction und StopTransaction durch TransactionEvent und ergänzt Nachrichten für Plug and Charge (ISO 15118). Die beiden lassen sich nicht mischen: Eine Ladestation und ihr Backoffice einigen sich beim Aufbau der Verbindung auf eine Version. In unserer Ladestationsdatenbank nennen 102 Ladestationen 2.0.1 zusätzlich zu 1.6 oder stattdessen. Jede Nachricht von 2.0.1 und 2.1 steht in der Referenz zu OCPP 2.0.1 und 2.1.
Die Open Charge Alliance veröffentlicht sie kostenlos auf ihrer Website, mit einem JSON-Schema für jede Nachricht. Diese Referenz folgt der Spezifikation. Wo beide voneinander abweichen, gilt die Spezifikation.
Über das Feature-Profil Smart Charging. Das Backoffice sendet SetChargingProfile mit einem Plan aus Grenzwerten in Ampere oder Watt. Ein ChargePointMaxProfile begrenzt die ganze Ladestation, ein TxDefaultProfile gilt für jeden neuen Ladevorgang und ein TxProfile für einen laufenden Ladevorgang. Überschneiden sich zwei Profile mit demselben Zweck, hat das mit dem höheren stackLevel Vorrang. Wie Plugchoice das nutzt, steht auf der Seite zu intelligentem Laden.
Sehen Sie in der Ladestationsdatenbank nach: 775 Ladestationen, mit den OCPP-Versionen, die wir kennen, und der Quelle jeder Angabe. Meist steht es auch im Datenblatt der Ladestation, oft als OCPP 1.6J oder OCPP 1.6 JSON.
Geben Sie in den Einstellungen der Ladestation, oft in der Installateur-App oder auf ihrer lokalen Webseite, die WebSocket-URL des Backoffice ein (sie beginnt mit ws:// oder wss://) und die ID der Ladestation, die Charge Point Identity. Die Ladestation baut die Verbindung auf und sendet eine BootNotification. Sobald das Backoffice mit Accepted antwortet, ist die Ladestation online und sendet für jeden Ladepunkt eine StatusNotification.
Plugchoice und OCPP
- Ein kostenloses BackofficeVerbinden Sie eine OCPP-1.6J-Ladestation und verwalten Sie sie im Webportal.
- Die AppEigentümer und Installateure steuern dieselbe Ladestation vom Smartphone aus.
- Der OCPP ProxyEine Ladestation gleichzeitig an mehreren Backoffices.
- BackofficesDie Backoffices, die Sie aus einer Liste wählen, wenn Sie eine Ladestation verbinden.
Weiterführende Lektüre
Diese Seite für KI-Assistenten
Die ganze Referenz, jede Nachricht und jeder Konfigurationsschlüssel, als eine Textdatei, die ein Assistent in einem Zug lesen kann.
Betreiben Sie Ihre OCPP-Ladestationen mit Plugchoice
Verbinden Sie Ihre OCPP-1.6J-Ladestationen kostenlos mit Plugchoice und verwalten Sie sie im Webportal, in der App und über die API.