Ocpp Message¶
IMPORTANT. :class: warning
This message supports only the OCPP messages listed in the table below.
How the envelope is used¶
The ocpp_message envelope is used in three ways. Which one applies depends on the
OCPP message being sent and on who sends it:
A. OEM impersonates the CSMS.
The OEM sends a CSMS-to-CS request on cs/josev. Josev handles it locally, exactly as if
the CSMS had sent it, and answers on josev/cs with the response the CSMS would have
received. Nothing is sent to the CSMS.
B. Josev forwards a CSMS request to the OEM.
The CSMS sends a request that Josev cannot answer itself. Josev forwards it on josev/cs
(or ocpp/smart_charging), the OEM (or smart charging service) answers on the inverted
topic, and Josev relays that answer to the CSMS.
C. OEM sends a CS-to-CSMS message through Josev.
The OEM sends a CS-to-CSMS request on cs/josev. Josev sends it to the CSMS over the
websocket and relays the CSMS response back on josev/cs.
In every case the response carries the request’s id. A failure is returned as a response
with message_type CallError, never as a missing response.
Message |
Usage |
Behaviour |
|---|---|---|
GetVariables |
A |
Josev answers from its device model. |
SetVariables |
A |
Josev applies the change to its device model and answers as the CS would. |
SetNetworkProfile |
A |
Josev stores the connection profile in the given slot. |
RequestStartTransaction |
A |
Josev runs its remote start flow, as for a CSMS remote start. |
GetInstalledCertificateIds |
A or B |
Depends on who manages the certificates. If Josev does (default), the OEM can send
this to get the certificates installed in Josev’s keystore (A). If certificate
management is delegated to the OEM ( |
InstallCertificate |
A or B |
Same as GetInstalledCertificateIds: installed in Josev’s keystore (A), or forwarded to the OEM when certificate management is external (B). |
DeleteCertificate |
A or B |
Same as GetInstalledCertificateIds. |
CertificateSigned |
A or B |
Same as GetInstalledCertificateIds. If |
SetChargingProfile |
B |
Forwarded by Josev on |
ClearChargingProfile |
B |
Same as SetChargingProfile. |
GetChargingProfiles |
B |
Same as SetChargingProfile. |
GetCompositeSchedule |
B |
Same as SetChargingProfile. |
UpdateDynamicSchedule |
B |
Same as SetChargingProfile (OCPP 2.1 only). |
SignCertificate |
C |
Sent to the CSMS; the CSMS response is relayed. The signed certificate arrives later as a CertificateSigned request from the CSMS. |
NotifyEVChargingNeeds |
C |
Sent to the CSMS (OCPP 2.1); the CSMS response is relayed. |
NotifyEvent |
C |
Sent to the CSMS; the CSMS response is relayed. |
SecurityEvent |
C |
Sent to the CSMS as |
ReportChargingProfiles |
C |
Sent to the CSMS; the CSMS response is relayed. |
SetDefaultTariff |
A |
OCPP 2.1. Allowed in the schema; not yet handled by Josev, which answers |
GetTariffs |
A |
OCPP 2.1. Allowed in the schema; not yet handled by Josev, which answers |
NotifySettlement |
C |
OCPP 2.1. Allowed in the schema; not yet handled by Josev, which answers |
OcppMessageRequest¶
Description.
Used to embed OCPP request and response messages, allowing the OEM and Josev to exchange OCPP messages.
OCPP request messages can be sent by OEM or Josev using the MQTT OcppMessageRequest, where the CALL fields “Action” and “Payload” as defined in the OCPP specification (OCPP Ed.3 part 4 section 4.2.1) correspond to the “message_name” and the “payload” fields in the MQTT message.
OcppRequest¶
Topic: cs/josev or josev/cs. Used this message to embed an OCPP request message. |
|||
type |
object |
||
properties |
|||
|
type |
string |
|
format |
uuid |
||
|
const |
ocpp_message |
|
|
const |
request |
|
|
type |
object |
|
properties |
|||
|
type |
string |
|
enum |
ocpp1.6, ocpp2.0.1, ocpp2.1 |
||
|
type |
string |
|
enum |
GetVariables, GetInstalledCertificateIds, SetVariables, InstallCertificate, DeleteCertificate, SetNetworkProfile, CertificateSigned, SignCertificate, NotifyEVChargingNeeds, UpdateDynamicSchedule, SetChargingProfile, NotifyEvent, SecurityEvent, ClearChargingProfile, GetChargingProfiles, GetCompositeSchedule, ReportChargingProfiles, NotifySettlement, SetDefaultTariff, GetTariffs, RequestStartTransaction |
||
|
The payload is the OCPP request message payload. It is an object with the properties defined by the OCPP message schema. |
||
type |
object |
||
Example:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "request",
"data": {
"ocpp_version": "ocpp2.0.1",
"message_name": "GetVariables",
"payload": {
"getVariableData": [
{"component": {"name": "TxCtrlr"}, "variable": {"name": "TxStartPoint"}}
]
}
}
}
OcppMessageResponse¶
Ocpp response messages can be sent by OEM or Josev using the MQTT OcppMessageResponse, where the CALLRESULT field “Payload” as defined in the OCPP specification (OCPP Ed.3 part 4 section 4.2.2) corresponds to the “payload” field in the MQTT message.
OcppResponse¶
Topic: josev/cs or cs/josev. Used this message to embed an OCPP response message. |
|||
type |
object |
||
properties |
|||
|
type |
string |
|
format |
uuid |
||
|
const |
ocpp_message |
|
|
const |
response |
|
|
type |
object |
|
properties |
|||
|
type |
string |
|
enum |
ocpp1.6, ocpp2.0.1, ocpp2.1 |
||
|
type |
string |
|
enum |
CallResult, CallError |
||
|
The payload is the OCPP response message payload. It is an object with the properties defined by the OCPP message schema. |
||
type |
object |
||
|
The field must contain a string from the RPC Framework Error Codes Table. |
||
type |
string |
||
|
The field must contain a string with a human-readable description of the error. |
||
type |
string |
||
maxLength |
255 |
||
|
The field must contain an object with additional information about the error. The object can contain any additional information that can help to understand the error. |
||
type |
object |
||
Example:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallResult", # or "CallError"
"ocpp_version": "ocpp2.0.1",
"payload": {
"getVariableResult":[
{
"attributeStatus":"Accepted",
"component":{"name":"TxCtrlr"},
"variable":{"name":"TxStartPoint"},
"attributeType":"Actual",
"attributeValue":"Authorized,EVConnected"
}
]
}
}
}
If an error is encounter while processing the request, the response will contain a message type CallError as described in the example below.
Example:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallError",
"ocpp_version": "ocpp2.0.1",
"error_code": "FormatViolation",
"error_description": "Payload for Action is syntactically incorrect or structure for Action"
"error_details": {
"details": "An internal error occurred"
}
}
}
OcppMessageRequest message examples:¶
Example GetVariables Multiple Variables:
message = {
"id":"2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name":"ocpp_message",
"type":"request",
"data":{
"ocpp_version":"ocpp2.0.1",
"message_name":"GetVariables",
"payload":{
"getVariableData":[
{
"attributeType":"Actual",
"component":{
"name":"OCPPCommCtrlr"
},
"variable":{
"name":"OfflineThreshold"
}
},
{
"attributeType":"Actual",
"component":{
"name":"AuthCtrlr"
},
"variable":{
"name":"LocalAuthorizeOffline"
}
}
]
}
}
}
Example GetInstalledCertificateIds:
message = {
"id":"2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name":"ocpp_message",
"type":"request",
"data":{
"ocpp_version":"ocpp2.0.1",
"message_name":"GetInstalledCertificateIds",
"payload":{
"certificateType": [
"CSMSRootCertificate"
]
}
}
}
Example SetVariables:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "request",
"data": {
"ocpp_version": "ocpp2.0.1",
"message_name": "SetVariables",
"payload": {
"setVariableData": [
{
"attributeType": "Actual",
"attributeValue": "300",
"component": {
"name": "OCPPCommCtrlr"
},
"variable": {
"name": "OfflineThreshold"
}
},
{
"attributeType": "Actual",
"attributeValue": "true",
"component": {
"name": "AuthCtrlr"
},
"variable": {
"name": "LocalAuthorizeOffline"
}
}
]
}
}
}
Example InstallCertificate:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "request",
"data": {
"ocpp_version": "ocpp2.0.1",
"message_name": "InstallCertificate",
"payload": {
"certificate": "-----BEGIN CERTIFICATE-----\nMIIB6TCCAY+gAwIBAgIBBDAKBggqhkjOPQQDAjBbMRcwFQYDVQQDDA5PQ1RUIFJv\nb3QgQ0EgMjEdMBsGA1UECgwUT3BlbiBDaGFyZ2UgQWxsaWFuY2UxCzAJBgNVBAYT\nAk5MMRQwEgYKCZImiZPyLGQBGRYET0NUVDAgFw0yNDA1MzAxMzE3MjBaGA8yMDY0\nMDUyMDEzMTcyMFowWzEXMBUGA1UEAwwOT0NUVCBSb290IENBIDIxHTAbBgNVBAoM\nFE9wZW4gQ2hhcmdlIEFsbGlhbmNlMQswCQYDVQQGEwJOTDEUMBIGCgmSJomT8ixk\nARkWBE9DVFQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATuV4ikq+qqgURL2m4g\ncWRNHvUffxvZQVf2W66PIMAcIUShWQBGxeoTh4dA50lppIZ9VnCGqqUPuzp9o76K\nZh0jo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E\nFgQUofbdHSg6eZ0gV58pJ9cGYcj9AgEwCgYIKoZIzj0EAwIDSAAwRQIgMxFfJo32\nXJMda8wNqIa5InptZd1uqBT6RUgItUBEi7QCIQDZywzquLFUV2xWPzm4vV2jWUlZ\nyS1DpSC11DclzOkvUw==\n-----END CERTIFICATE-----\n",
"certificateType": "CSMSRootCertificate"
}
}
}
Example DeleteCertificate:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "request",
"data": {
"ocpp_version": "ocpp2.0.1",
"message_name": "DeleteCertificate",
"payload": {
"certificateHashData": {
"hashAlgorithm": "SHA256",
"issuerKeyHash": "6fb6606900c9143982873363e815ae67163667c5792cd919afd37783bbff3095",
"issuerNameHash": "d1c53ae0a9d11dda803bf38fc580dc9869ffb234b561fa624a20e618ce4bb656",
"serialNumber": "4"
}
}
}
}
Example SetNetworkProfile:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "request",
"data": {
"ocpp_version": "ocpp2.0.1",
"message_name": "SetNetworkProfile",
"payload": {
"configurationSlot": 2,
"connectionData": {
"messageTimeout": 75,
"ocppCsmsUrl": "wss://324595e6999a17ae.octt.openchargealliance.org:18603",
"ocppInterface": "Wired0",
"ocppTransport": "JSON",
"ocppVersion": "OCPP20",
"securityProfile": 2
}
}
}
}
Example CertificateSigned:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "request",
"data": {
"ocpp_version": "ocpp2.0.1",
"message_name": "CertificateSigned",
"payload": {
"certificateChain": "-----BEGIN CERTIFICATE-----\nMIIBjzCCATagAwIBAgIBATAKBggqhkjOPQQDAjBZMRUwEwYDVQQDDAxPQ1RUIFJv\nb3QgQ0ExHTAbBgNVBAoMFE9wZW4gQ2hhcmdlIEFsbGlhbmNlMQswCQYDVQQGEwJO\nTDEUMBIGCgmSJomT8ixkARkWBE9DVFQwHhcNMjUwNDAzMTIyNzA5WhcNMjYwNDAz\nMTIyNzA5WjBKMRYwFAYDVQQDDA05NzgzMTYxNDg0MTAwMQ8wDQYDVQQKDAZTd2l0\nY2gxCzAJBgNVBAYTAkdCMRIwEAYKCZImiZPyLGQBGRYCQ1MwWTATBgcqhkjOPQIB\nBggqhkjOPQMBBwNCAARoXZcBZ1c6zGw0aXBYq3vSsFMFYIXe9H8MJRnWXb2ha0Hh\nGW8tzH4VGk3+NFOBZdbvg2FaXzrGSYSsLgTQNObuMAoGCCqGSM49BAMCA0cAMEQC\nIHQLQ5rtbakvDYA43IDhfDR8zU+BT01SFy7ViCLs5++xAiBrRkvMA0ZbtUNS81RA\nrgqq1n32rktoZEUzP2W29xmKkQ==\n-----END CERTIFICATE-----",
"certificateType": "V2GCertificate"
}
}
}
Example SignCertificate:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "request",
"data": {
"ocpp_version": "ocpp2.0.1",
"message_name": "SignCertificate",
"payload": {
"csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIIBNTCB2wIBADBKMRYwFAYDVQQDDA05NzgzMTYxNDg0MTAwMQ8wDQYDVQQKDAZT\nd2l0Y2gxCzAJBgNVBAYTAkdCMRIwEAYKCZImiZPyLGQBGRYCQ1MwWTATBgcqhkjO\nPQIBBggqhkjOPQMBBwNCAARoXZcBZ1c6zGw0aXBYq3vSsFMFYIXe9H8MJRnWXb2h\na0HhGW8tzH4VGk3+NFOBZdbvg2FaXzrGSYSsLgTQNObuoC8wLQYJKoZIhvcNAQkO\nMSAwHjAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAKBggqhkjOPQQDAgNJ\nADBGAiEAsQIGFrb+KkXhpwRHoNA9g/7dp9rKzmhxLvSH81Zwj+MCIQC9RiTISte0\nSnBGle3oydnj7SskFtucdCqA7jeomE0fNw==\n-----END CERTIFICATE REQUEST-----\n",
"certificateType": "ChargingStationCertificate"
}
}
}
Example SetChargingProfile:
message = {
"id":"2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name":"ocpp_message",
"type":"request",
"data":{
"ocpp_version":"ocpp2.0.1",
"message_name":"SetChargingProfile",
"payload":{
"chargingProfile":{
"evseId":1,
"chargingProfile":{
"id":1,
"stackLevel":1,
"chargingProfilePurpose":"TxProfile",
"chargingProfileKind":"Dynamic",
"chargingSchedule":[
{
"id":1,
"chargingRateUnit":"W",
"chargingSchedulePeriod":[
{
"startPeriod":1,
"operationMode":"CentralSetpoint",
"setpoint":5000,
"setpointReactive":0
}
]
}
]
}
}
}
}
}
Example NotifyEVChargingNeeds:
message = {
"id":"2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name":"ocpp_message",
"type":"request",
"data":{
"ocpp_version":"ocpp2.1",
"message_name":"NotifyEVChargingNeeds",
"payload":{
"evseId":1,
"chargingNeeds":{
"requestedEnergyTransfer":"DC_BPT",
"controlMode":"DynamicControl",
"mobilityNeedsMode":"EVCC",
"v2xChargingParameters":{
"minChargePower":500,
"maxChargePower":7000,
"minDischargePower":500,
"maxDischargePower":7000,
"minChargeCurrent":2.2,
"maxChargeCurrent":30,
"minDischargeCurrent":2.2,
"maxDischargeCurrent":30,
"minVoltage":300,
"maxVoltage":450,
"evTargetEnergyRequest":65000,
"evMinEnergyRequest":50000,
"evMaxEnergyRequest":70000,
"targetSoC":80
},
"departureTime":"2025-09-23T10:00:00Z"
}
}
}
}
Example UpdateDynamicSchedule:
message = {
"id":"2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name":"ocpp_message",
"type":"request",
"data":{
"ocpp_version": "ocpp2.1",
"message_name": "UpdateDynamicSchedule",
"payload": {
"chargingProfileId": 1,
"scheduleUpdate": {
"setpoint": 5000,
"setpointReactive": 0
}
}
}
}
Example NotifySettlement:
message = {
"id":"2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name":"ocpp_message",
"type":"request",
"data":{
"ocpp_version":"ocpp2.1",
"message_name":"NotifySettlement",
"payload":{
"transactionId":"b1c2d3e4-5f60-4a7b-8c9d-0e1f2a3b4c5d",
"pspRef":"PSP-2026-000123456",
"status":"Settled",
"settlementAmount":12.45,
"settlementTime":"2026-09-22T14:32:10Z"
}
}
}
Example SetDefaultTariff:
message = {
"id":"2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name":"ocpp_message",
"type":"request",
"data":{
"ocpp_version":"ocpp2.1",
"message_name":"SetDefaultTariff",
"payload":{
"evseId":0,
"tariff":{
"tariffId":"tariff-default-2026-q4",
"currency":"EUR",
"description":[
{
"language":"en",
"content":"0.35 EUR/kWh"
}
],
"energy":{
"prices":[
{"priceKwh":0.35}
],
"taxRates":[
{"type":"VAT","tax":21.0}
]
},
"validFrom":"2026-10-01T00:00:00Z"
}
}
}
}
Example GetTariffs:
message = {
"id":"2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name":"ocpp_message",
"type":"request",
"data":{
"ocpp_version":"ocpp2.1",
"message_name":"GetTariffs",
"payload":{
"evseId":1
}
}
}
Example RequestStartTransaction:
message = {
"id":"2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name":"ocpp_message",
"type":"request",
"data":{
"ocpp_version":"ocpp2.0.1",
"message_name":"RequestStartTransaction",
"payload":{
"remoteStartId":12345,
"evseId":1,
"idToken":{
"idToken":"046DE3A0BA2A80",
"type":"ISO14443"
}
}
}
}
OcppMessageResponse message examples:¶
Example GetInstalledCertificateIds response:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallResult", # or "CallError"
"ocpp_version": "ocpp2.0.1",
"payload": {
"status":"Accepted",
"certificateHashDataChain":[{
"certificateType":
"CSMSRootCertificate",
"certificateHashData":{
"hashAlgorithm":"SHA256",
"issuerNameHash":"de61235ee2958b67c7a47469cccb7ccbf77501d57af72c437ca092467fa00cac",
"issuerKeyHash":"84c8c4dfdec3696e58c124c76ed430f20c6fbcfaec0c4fbbe77b834c54d12e27",
"serialNumber":"2"
}
}]
}
}
}
Example SetVariables response:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallResult", # or "CallError"
"ocpp_version": "ocpp2.0.1",
"payload": {
"setVariableResult": [
{
"attributeStatus": "Accepted",
"component": {
"name": "OCPPCommCtrlr"
},
"variable": {
"name": "OfflineThreshold"
},
"attributeType": "Actual"
},
{
"attributeStatus": "Accepted",
"component": {
"name": "AuthCtrlr"
},
"variable": {
"name": "LocalAuthorizeOffline"
},
"attributeType": "Actual"
}
]
}
}
}
Example CertificateSigned response:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallResult", # or "CallError"
"ocpp_version": "ocpp2.0.1",
"payload": {
"status": "Accepted"
}
}
}
Example CertificateSigned response::
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallResult", # or "CallError"
"ocpp_version": "ocpp2.0.1",
"payload": {
"status": "Accepted"
}
}
Example SetChargingProfile response:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallResult", # or "CallError"
"ocpp_version": "ocpp2.0.1",
"payload": {
"status": "Accepted" # or "Rejected"
}
}
}
Example NotifyEVChargingNeeds response::
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallResult", # or "CallError"
"ocpp_version": "ocpp2.1",
"payload": {
"status": "Accepted" # or "Rejected" or "Processing"
}
}
}
Example UpdateDynamicSchedule response::
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallResult", # or "CallError"
"ocpp_version": "ocpp2.1",
"payload": {
"status": "Accepted" # or "Rejected"
}
}
}
Example RequestStartTransaction response:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallResult", # or "CallError"
"ocpp_version": "ocpp2.0.1",
"payload": {
"status": "Accepted", # or "Rejected"
"transactionId": "b1c2d3e4-5f60-4a7b-8c9d-0e1f2a3b4c5d"
}
}
}
Example GetTariffs response:
message = {
"id": "2b0aa109-21a1-4f2f-bdbd-6cdf139e7bb1",
"name": "ocpp_message",
"type": "response",
"data": {
"message_type": "CallResult", # or "CallError"
"ocpp_version": "ocpp2.1",
"payload": {
"status": "Accepted", # or "Rejected"
"tariff": {
"tariffId": "tariff-default-2026-q4",
"currency": "EUR",
"validFrom": "2026-10-01T00:00:00Z"
}
}
}
}