OCPP 1.6J
Salia-Ladestationen verbinden sich mit OCPP 1.6J mit einem Backend (Central System), also OCPP 1.6 über WebSocket mit JSON. Diese Seite beschreibt, welche Teile des Protokolls die Ladestation umsetzt und wo sie von dem abweicht, was ein Backend erwarten könnte. Die Fehlercodes, die die Ladestation sendet, stehen unter OCPP-Fehlercodes.
Gilt ab Firmware 2.5.0 für alle Ladestationen mit Salia-Controller. Jede
Ladestation hat einen Connector (Connector 1); Connector 0 steht für die
Ladestation als Ganzes.
Verbindung
| Thema | Verhalten |
|---|---|
| Protokoll | OCPP 1.6J, WebSocket-Subprotokoll ocpp1.6. SOAP und OCPP 2.0.1 werden nicht unterstützt. |
| Backend-URL | ws:// oder wss://. Die URL wird genau so verwendet, wie sie eingetragen ist; sie muss also die Charge-Point-ID enthalten, zum Beispiel wss://backend.example.com/ocpp/CP-0001. Eine geänderte CentralSystemURI wird nach einem Neustart wirksam. |
| TLS | wss:// verwendet TLS 1.2. Das Serverzertifikat wird einschließlich Hostname nur geprüft, wenn in den OCPP-Einstellungen der Weboberfläche Zertifikatsprüfung aktiviert ist. Die Option ist im Werkszustand aus; ohne sie wird jedes Serverzertifikat akzeptiert. |
| Authentifizierung | HTTP Basic Auth mit Benutzername und Passwort. Die Zugangsdaten werden in der Weboberfläche der Ladestation eingetragen; über OCPP lassen sie sich nicht ändern (AuthorizationKey wird nicht unterstützt). Client-Zertifikate werden nicht unterstützt. |
| Antwortzeit | Das Backend muss jede Anfrage innerhalb von 60 Sekunden beantworten. Andernfalls schließt die Ladestation die Verbindung und verbindet sich neu. |
| Uhrzeit | Die Ladestation übernimmt die Uhrzeit aus BootNotification und Heartbeat (und NTP, falls eingerichtet). Eichrechtskonforme Ladestationen lehnen Transaktionen ab, bis die Uhr gestellt ist. Andere Ladestationen starten Transaktionen auch mit ungestellter Uhr (allowTxWithInvalidTime); deren Zeitstempel sind dann falsch. |
| BootNotification | chargePointVendor und chargePointModel (je bis 20 Zeichen), chargePointSerialNumber und chargeBoxSerialNumber (falls gesetzt; je bis 25 Zeichen), firmwareVersion, meterType, meterSerialNumber; iccid und imsi bei Ladestationen mit Mobilfunkmodem. |
| Registrierung | Die Ladestation startet Transaktionen, online wie offline, erst, nachdem das Backend aus CentralSystemURI mindestens einmal eine BootNotification mit Accepted beantwortet hat. Eine Änderung von CentralSystemURI verwirft Transaktionen, die noch nicht an das bisherige Backend gesendet wurden. |
Feature-Profile
Der Konfigurationsschlüssel SupportedFeatureProfiles meldet
Core,FirmwareManagement,LocalAuthListManagement.
| Profil | Unterstützung |
|---|---|
| Core | Unterstützt, Grenzen siehe unten. |
| Firmware Management | Unterstützt. |
| Local Auth List Management | Unterstützt, nur vollständige Aktualisierungen. |
| Reservation | Nicht unterstützt. ReserveNow wird mit Rejected beantwortet. |
| Smart Charging | Nicht gemeldet. SetChargingProfile wird in eingeschränkter Form angenommen, siehe unten. |
| Remote Trigger | Nicht gemeldet. TriggerMessage funktioniert für einige Nachrichten, siehe unten. |
Die Erweiterungen des OCPP 1.6 Security Whitepaper (signiertes
Firmware-Update, Zertifikatsverwaltung, Security Events, GetLog) sind
nicht umgesetzt.
Solange ein Neustart ansteht (nach Reset oder einer
Firmware-Installation), beantwortet die Ladestation die meisten Anfragen mit
einem CALLERROR GenericError.
Nachrichten
Core
| Nachricht | Richtung | Hinweise |
|---|---|---|
Authorize | Ladestation → Backend | Wird für lokal nicht autorisierte Karten gesendet, solange die Ladestation online ist. |
BootNotification | Ladestation → Backend | Nach Pending oder Rejected wiederholt die Ladestation nach dem interval aus der Antwort. |
ChangeAvailability | Backend → Ladestation | Connector 0 und 1. Inoperative, während der Connector Preparing, Charging oder Finishing ist, wird mit Scheduled beantwortet und wirksam, sobald das Fahrzeug abgesteckt ist. Bleibt über einen Neustart erhalten. |
ChangeConfiguration | Backend → Ladestation | Schlüssel siehe Konfigurationsschlüssel. Unbekannte Schlüssel: NotSupported; schreibgeschützte Schlüssel: Rejected. |
ClearCache | Backend → Ladestation | Accepted, wenn der Autorisierungscache aktiviert ist, sonst Rejected (Werkszustand). |
DataTransfer | Beide | Herstellerspezifisch. Ein DataTransfer vom Backend mit unbekannter vendorId wird mit UnknownMessageId beantwortet. Eichrechtskonforme Ladestationen senden nach BootNotification den öffentlichen Schlüssel des Zählers (vendorId generalConfiguration, messageId setMeterConfiguration); abschaltbar mit sendMeterPublicKeyOnBootNotification. |
GetConfiguration | Backend → Ladestation | Alle oder die angefragten Schlüssel; unbekannte Schlüssel in unknownKey. |
Heartbeat | Ladestation → Backend | Wenn HeartbeatInterval Sekunden lang keine andere Nachricht gesendet wurde. |
MeterValues | Ladestation → Backend | Nur während einer Transaktion, immer mit transactionId. Werden offline nicht gespeichert. |
RemoteStartTransaction | Backend → Ladestation | Connector 1. Ein chargingProfile in der Anfrage wird ignoriert. Das Fahrzeug muss innerhalb von ConnectionTimeOut angesteckt werden. Rejected, wenn die Ladestation nicht registriert ist, der Connector nicht Available, Preparing oder Finishing ist (zum Beispiel Faulted), der Zähler nicht bereit ist, ein Speicherfehler ansteht, 336 Transaktionen auf das Senden warten, eine andere Autorisierung läuft oder bei einer eichrechtskonformen Ladestation die Uhr nicht gestellt ist. |
RemoteStopTransaction | Backend → Ladestation | Beendet mit reason = Remote. Rejected, wenn die transactionId unbekannt ist oder Ladestation bzw. Connector Unavailable sind. |
Reset | Backend → Ladestation | Soft und Hard beenden beide eine laufende Transaktion und starten nach etwa 10 Sekunden die gesamte Ladestation neu. Rejected während eines Firmware-Updates. |
StartTransaction | Ladestation → Backend | Wird vor dem Senden auf der Ladestation gespeichert und nach einem Verbindungsabbruch erneut gesendet. |
StatusNotification | Ladestation → Backend | Available, Preparing, Charging, Finishing, Unavailable, Faulted. SuspendedEV und SuspendedEVSE werden nicht verwendet: Ein pausierter Ladevorgang bleibt Charging. Meldungen für Connector 0 und 1 werden gemeinsam höchstens einmal alle 10 Sekunden gesendet und enthalten den Status zu diesem Zeitpunkt; ein kürzerer Status kann daher übersprungen werden. Gleiche Meldungen werden nicht wiederholt, außer nach einer Neuverbindung. |
StopTransaction | Ladestation → Backend | Gründe EmergencyStop, EVDisconnected, HardReset, SoftReset, Local, PowerLoss, Remote, UnlockCommand, DeAuthorized, Other. idTag wird nicht gesendet. |
UnlockConnector | Backend → Ladestation | Nur Varianten mit Steckdose; bei fest angeschlagenem Kabel lautet die Antwort NotSupported. Eine laufende Transaktion wird beendet (reason = UnlockCommand). Die Antwort kommt, sobald die Verriegelung offen ist (Unlocked), oder nach 20 Sekunden (UnlockFailed); das Antwort-Timeout des Backends muss länger als 20 Sekunden sein. |
Firmware Management
| Nachricht | Richtung | Hinweise |
|---|---|---|
UpdateFirmware | Backend → Ladestation | location (HTTP- oder HTTPS-URL der Firmware-Datei), retrieveDate, retries und retryInterval. Der Download beginnt zum retrieveDate, sofern die Ladestation verbunden ist. Die Ladestation installiert die Datei und startet neu. Ein zweites UpdateFirmware während eines laufenden Updates wird bestätigt und ignoriert. |
FirmwareStatusNotification | Ladestation → Backend | Downloading, Downloaded, DownloadFailed, Installing, InstallationFailed, Installed (nach dem Neustart). |
GetDiagnostics | Backend → Ladestation | Lädt ein Log-Archiv (.tar.gz) per FTP, FTPS, HTTP oder HTTPS hoch. Bei HTTP(S) wird die Datei per POST an <location>/<fileName> gesendet. startTime und stopTime werden ignoriert. |
DiagnosticsStatusNotification | Ladestation → Backend | Uploading, Uploaded, UploadFailed. |
Local Auth List Management
| Nachricht | Richtung | Hinweise |
|---|---|---|
GetLocalListVersion | Backend → Ladestation | -1, solange LocalAuthListEnabled false ist. |
SendLocalList | Backend → Ladestation | Nur updateType Full; Differential wird mit NotSupported beantwortet, ebenso jede Aktualisierung, solange LocalAuthListEnabled false ist. Bis zu 10.000 Einträge. |
Smart Charging (eingeschränkt, nicht gemeldet)
| Nachricht | Richtung | Hinweise |
|---|---|---|
SetChargingProfile | Backend → Ladestation | Wird nur angenommen mit chargingProfilePurpose ChargePointMaxProfile (Connector 0) oder TxProfile, chargingProfileKind Relative, chargingRateUnit A, stackLevel 0 und genau einer Periode mit startPeriod 0, ohne duration und minChargingRate. Andere Profile werden mit NotSupported beantwortet. Mit Rejected beantwortet werden ein ChargePointMaxProfile für Connector 1 und ein TxProfile für eine andere als die laufende transactionId. ChargePointMaxProfile bleibt über einen Neustart erhalten; TxProfile endet mit der Transaktion. |
ClearChargingProfile | Backend → Ladestation | Nach Connector, Profil-ID oder Zweck. Unknown, wenn kein Profil passt. |
GetCompositeSchedule | Backend → Ladestation | Nicht unterstützt (Rejected). |
Remote Trigger (teilweise, nicht gemeldet)
TriggerMessage wird für BootNotification, Heartbeat und
StatusNotification angenommen. MeterValues,
DiagnosticsStatusNotification und FirmwareStatusNotification werden mit
NotImplemented beantwortet.
Konfigurationsschlüssel
Die Spalte Werkszustand zeigt die Werte einer Ladestation mit Firmware
2.5.0 bei Auslieferung. Mit Neustart gekennzeichnete Schlüssel werden
sofort gespeichert und mit RebootRequired beantwortet; sie werden nach dem
nächsten Neustart wirksam.
Ein Firmware-Update setzt MeterValuesSampledData auf die Werksliste
zurück. Das Speichern der Einstellungen in der Weboberfläche setzt
LocalAuthListEnabled und LocalAuthorizeOffline beide auf den Wert der
Option Offline Authentifizierung, auch wenn das Backend sie anders
gesetzt hat. Ladestationen, die von älterer Firmware aktualisiert wurden,
behalten ihre bisherigen Werte.
| Schlüssel | Zugriff | Werkszustand | Wirksam |
|---|---|---|---|
AllowOfflineTxForUnknownId | lesen/schreiben | false | sofort |
AuthorizationCacheEnabled | lesen/schreiben | false | Neustart |
AuthorizeRemoteTxRequests | lesen/schreiben | false | sofort |
ClockAlignedDataInterval | lesen/schreiben | 0 | Neustart |
ConnectionTimeOut | lesen/schreiben | 60 | sofort |
HeartbeatInterval | lesen/schreiben | aus BootNotification (vorher 600) | sofort, nicht gespeichert; Werte bis 2 werden abgelehnt |
LocalAuthListEnabled | lesen/schreiben | false | Neustart |
LocalAuthorizeOffline | lesen/schreiben | false | sofort |
LocalPreAuthorize | lesen/schreiben | false | sofort |
MeterValuesAlignedData | lesen/schreiben | leer | Neustart |
MeterValuesSampledData | lesen/schreiben | Energy.Active.Import.Register, Power.Active.Import, Power.Active.Import.L1–L3, Current.Import.L1–L3, Voltage.L1-N–L3-N | nächste Transaktion |
MeterValueSampleInterval | lesen/schreiben | 60 | nächste Transaktion |
StopTransactionOnInvalidId | lesen/schreiben | true | sofort |
StopTxnAlignedData | lesen/schreiben | leer | nächste Transaktion |
StopTxnSampledData | lesen/schreiben | leer | nächste Transaktion |
TransactionMessageAttempts | lesen/schreiben | 3 | Neustart |
TransactionMessageRetryInterval | lesen/schreiben | 30 | Neustart |
WebSocketPingInterval | lesen/schreiben | 10 | sofort |
CentralSystemURI | lesen/schreiben | wie konfiguriert | Neustart; während einer Transaktion abgelehnt |
ChargeProfileMaxStackLevel | nur lesen | 0 | |
ChargingScheduleAllowedChargingRateUnit | nur lesen | Current | |
ChargingScheduleMaxPeriods | nur lesen | 1 | |
ConnectorPhaseRotation | nur lesen | Unknown | |
GetConfigurationMaxKeys | nur lesen | 10 | |
LocalAuthListMaxLength | nur lesen | 10000 | |
MaxChargingProfilesInstalled | nur lesen | 2 | |
MeterValuesAlignedDataMaxLength | nur lesen | 27 | |
MeterValuesSampledDataMaxLength | nur lesen | 27 | |
NumberOfConnectors | nur lesen | 1 | |
ResetRetries | nur lesen | 0 | |
SendLocalListMaxLength | nur lesen | 10000 | |
StopTransactionOnEVSideDisconnect | nur lesen | true | |
StopTxnAlignedDataMaxLength | nur lesen | 27 | |
StopTxnSampledDataMaxLength | nur lesen | 27 | |
SupportedFeatureProfiles | nur lesen | siehe oben | |
SupportedFileTransferProtocols | nur lesen | FTP,FTPS,HTTP,HTTPS | |
UnlockConnectorOnEVSideDisconnect | nur lesen | true |
Herstellerspezifische Schlüssel:
| Schlüssel | Zugriff | Werkszustand | Bedeutung |
|---|---|---|---|
rfidStopTransaction | lesen/schreiben | false | true: Die Karte, die einen Ladevorgang gestartet hat, kann ihn an der Ladestation beenden. Wirksam nach einem Neustart. |
rfidRequiresEvPresent | lesen/schreiben | true | true: Karten werden nur gelesen, während ein Fahrzeug angesteckt ist. Wirksam nach einem Neustart. |
useAsTimeSource | lesen/schreiben | true | Uhrzeit aus BootNotification und Heartbeat übernehmen. |
allowTxWithInvalidTime | lesen/schreiben | true | Transaktionen erlauben, bevor die Uhr gestellt ist (nie bei eichrechtskonformen Ladestationen). |
allowLocalChargingAlways | lesen/schreiben | false | true: Jede Karte wird lokal angenommen, die Antwort auf StartTransaction wird ignoriert und RemoteStartTransaction immer mit Rejected beantwortet. |
bootNotificationOnReconnect | lesen/schreiben | false | Nach jedem Verbindungsaufbau BootNotification senden. |
webSocketPingTimeout | lesen/schreiben | 120 | Sekunden ohne WebSocket-Pong, nach denen die Verbindung neu aufgebaut wird. |
forwardCredentials | lesen/schreiben | leer | Host, für den die Basic-Auth-Zugangsdaten auch bei Firmware- und Diagnose-URLs verwendet werden. |
ftpTryTLSUpgrade | lesen/schreiben | false | Für Diagnose-Uploads explizites FTPS versuchen. |
calibrationLawFormat | lesen/schreiben | leer | Format der signierten Messwerte: leer, OCMF,plain oder OCMF,hex. |
sendMeterPublicKeyOnBootNotification | lesen/schreiben | true | Öffentlichen Schlüssel des Zählers nach BootNotification per DataTransfer senden. |
StopTransactionSignatureFormat | nur lesen | MR | Signierte Messwerte: Start und Ende in einem OCMF-Datensatz. |
Meter1PublicKey | nur lesen | vom Zähler | Öffentlicher Schlüssel des eichrechtskonformen Zählers. |
vendorId | nur lesen | com.in-tech.smartcharging | vendorId der Ladestation für DataTransfer und StatusNotification. |
Autorisierung
- Online starten lokal bekannte Karten (Autorisierungscache oder lokale
Liste) den Ladevorgang sofort, wenn
LocalPreAuthorizetrueist; alle anderen Karten werden mitAuthorizegeprüft. - Offline werden Karten aus Cache oder lokaler Liste nur angenommen, wenn
LocalAuthorizeOfflinetrueist. Ist esfalse, gilt jede Karte als unbekannt, und unbekannte Karten werden nur angenommen, wennAllowOfflineTxForUnknownIdtrueist. - Eine Karte beendet einen laufenden Ladevorgang an der Ladestation nur,
wenn
rfidStopTransactiontrueist, und nur die Karte, die ihn gestartet hat. - Beantwortet das Backend
StartTransactionmit einem anderen Status alsAcceptedoder mit einem abgelaufenenexpiryDate, beendet die Ladestation den Ladevorgang (reason=DeAuthorized).StopTransactionOnInvalidIdauftruelassen: Mitfalsewird das Laden ebenfalls beendet, aber keinStopTransactiongesendet; die Transaktion bleibt im Backend offen.
Verbindungs- und Stromausfall
- Verbindungsausfall. Der Ladevorgang läuft weiter.
StartTransactionundStopTransactionwerden auf der Ladestation gespeichert und gesendet, sobald die Verbindung wieder steht; eine offline gestartete Transaktion erhält dann ihretransactionId. Bis zu 336 Transaktionen werden gespeichert; warten so viele, startet keine neue Transaktion, bis die Verbindung wieder steht.MeterValues,StatusNotification,Heartbeatund die Statusmeldungen zu Firmware und Diagnose werden nicht gespeichert. Nach dem Wiederverbinden sendet die Ladestation den aktuellen Status von Connector 0 und 1. - Stromausfall. Eine Transaktion, die beim Stromausfall lief, wird nach
dem Neustart mit
reason=PowerLossbeendet;meterStopundtimestampwerden nach dem Neustart erfasst. Das Fahrzeug muss neu autorisiert werden. Dasselbe gilt für jeden Neustart, der nicht perResetangefordert wurde. - Firmware-Update. Nach erfolgreicher Installation startet die
Ladestation sofort neu; eine laufende Transaktion wird dann mit
reason=PowerLossbeendet. Updates außerhalb von Ladevorgängen einplanen.
Signierte Messwerte
Bei eichrechtskonformen Ladestationen enthält StopTransaction die
signierten Messwerte in transactionData: einen Messwert mit Kontext
Transaction.End und Format SignedData, der den OCMF-Datensatz mit Start
und Ende der Transaktion enthält. Der öffentliche Schlüssel des Zählers
steht in Meter1PublicKey.
Produkte
Die OCPP-Umsetzung ist auf allen Ladestationen mit Salia-Controller gleich.

