OCPP 2.0.1 Edition 4

Display Message Flows - CSMS Developer Guide

Based on OCPP 2.0.1 Edition 4 Specification (Part 2, Section O). This guide covers all display message flows from the CSMS (Charging Station Management System) perspective.

6 Sections
6 Use Cases
O01 - O06

1. Overview

Introduction

The DisplayMessage feature enables a CSO (via the CSMS) to display a message or a cycle of messages on a Charging Station, that is not part of the firmware of the Charging Station. The CSO gets full control over these messages: set, retrieve (get), replace, and clear.

Key Capabilities

Multi-Language Support

Messages can be configured in different languages. The Charging Station selects the correct language when displaying to a user.

Multiple Formats

Supports different formats (ASCII, HTML, URI, UTF8). See DisplayMessageSupportedFormats configuration variable.

Display Control

Each message has parameters to control when and how it is shown: priority, state, start/end time.

Full CRUD Operations

Complete lifecycle management: set (create), get (retrieve), replace (update), and clear (delete) messages on Charging Stations.

Important: It is NOT possible to retrieve/modify messages not configured via SetDisplayMessageRequest. Messages coded in the firmware of a Charging Station cannot be modified via OCPP.

OCPP Message Routing

All Display Message operations use the standard OCPP 2.0.1 JSON-RPC framing:

Frame Type Format
CALL [2, "<messageId>", "<action>", {<payload>}]
CALLRESULT [3, "<messageId>", {<payload>}]
CALLERROR [4, "<messageId>", "<errorCode>", "<errorDescription>", {<errorDetails>}]

Involved Messages

Message Direction Description
SetDisplayMessageRequest CSMS -> CS Set/replace a display message on a Charging Station
SetDisplayMessageResponse CS -> CSMS Response indicating acceptance/rejection
GetDisplayMessagesRequest CSMS -> CS Request stored display messages from a Charging Station
GetDisplayMessagesResponse CS -> CSMS Immediate acknowledgment (messages follow async)
NotifyDisplayMessagesRequest CS -> CSMS Async delivery of requested display messages
NotifyDisplayMessagesResponse CSMS -> CS Acknowledgment of received notification
ClearDisplayMessageRequest CSMS -> CS Remove a specific display message
ClearDisplayMessageResponse CS -> CSMS Response indicating if message was cleared

2. Shared Data Types

Reference

2.1 MessageInfoType

Central data type used in SetDisplayMessageRequest and NotifyDisplayMessagesRequest.

Field Type Required Description
id integer Yes Unique identifier for this message (positive integer >= 0). Assigned by the CSMS.
priority MessagePriorityEnumType Yes Display priority of the message
state MessageStateEnumType No During which Charging Station state to show. If omitted: show in any state.
startDateTime dateTime (RFC 3339) No When to start showing. If omitted: immediately.
endDateTime dateTime (RFC 3339) No When to stop showing. After this time, the CS SHALL remove the message.
transactionId string (max 36) No If set, show only during this transaction. CS removes after transaction ends.
message MessageContentType Yes The actual message content to display
display ComponentType No Target display component (for stations with multiple displays)

2.2 MessageContentType

Field Type Required Description
format MessageFormatEnumType Yes Format of the message content
language string (max 8) No Language code per RFC 5646 (e.g., "en", "nl", "de")
content string (max 512) Yes The actual message text/content

2.3 MessageFormatEnumType

Value Description
ASCII Plain ASCII text
HTML HTML formatted message
URI URI pointing to message content
UTF8 UTF-8 encoded text

2.4 MessagePriorityEnumType

Value Description
AlwaysFront Message should always be shown on the front/main screen. Takes highest priority.
InFront Show in front when the appropriate state is active (higher priority than NormalCycle)
NormalCycle Show in the normal message rotation cycle

2.5 MessageStateEnumType

Value Description
Charging Show only when a transaction is active (charging)
Faulted Show only when the Charging Station is in a faulted state
Idle Show only when the Charging Station is idle (no transaction)
Unavailable Show only when the Charging Station is unavailable

2.6 Response Status Enums

DisplayMessageStatusEnumType (SetDisplayMessage response)

Value Description
Accepted Message was accepted and will be displayed
NotSupportedMessageFormat The message format is not supported by the CS
Rejected Message was rejected (generic rejection)
NotSupportedPriority The requested priority level is not supported
NotSupportedState The requested state is not supported
UnknownTransaction The referenced transactionId is unknown to the CS

GetDisplayMessagesStatusEnumType (GetDisplayMessages response)

Value Description
Accepted Request accepted, matching messages will be sent via NotifyDisplayMessagesRequest
Unknown No messages matching the request criteria are known

ClearMessageStatusEnumType (ClearDisplayMessage response)

Value Description
Accepted Message was successfully removed
Unknown The message id is not known on the Charging Station

2.7 ComponentType & EVSEType

Used for targeting a specific display on Charging Stations with multiple displays.

ComponentType

Field Type Required Description
name string (max 50) Yes Component name (case-insensitive, use CamelCase)
instance string (max 50) No Instance name if component exists as multiple instances
evse EVSEType No EVSE reference if display is EVSE-specific

EVSEType

Field Type Required Description
id integer Yes EVSE identifier (> 0)
connectorId integer No Specific connector on the EVSE

2.8 StatusInfoType

Used in all responses to provide additional information about a status.

StatusInfoType Schema
{
  "reasonCode": "string (max 20)",               // REQUIRED, case-insensitive predefined code
  "additionalInfo": "string (max 512)"           // optional, detailed human-readable information
}

3. OCPP Messages

Protocol

3.1 SetDisplayMessageRequest (CSMS -> CS)

Action: "SetDisplayMessage"

CSMS --> Charging Station
Field Type Required Description
message MessageInfoType Yes The message to display
JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "customData": {
      "$ref": "#/definitions/CustomDataType"
    },
    "message": {
      "$ref": "#/definitions/MessageInfoType"
    }
  },
  "required": ["message"]
}
Example CALL
[2, "msg-001", "SetDisplayMessage", {
  "message": {
    "id": 1,
    "priority": "NormalCycle",
    "state": "Idle",
    "startDateTime": "2025-01-15T08:00:00Z",
    "endDateTime": "2025-01-31T23:59:59Z",
    "message": {
      "format": "UTF8",
      "language": "en",
      "content": "Welcome! Special rate today: $0.25/kWh"
    }
  }
}]

3.2 SetDisplayMessageResponse (CS -> CSMS)

Charging Station --> CSMS
Field Type Required Description
status DisplayMessageStatusEnumType Yes Whether the CS can display the message
statusInfo StatusInfoType No Additional detail about the status
JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "customData": {
      "$ref": "#/definitions/CustomDataType"
    },
    "status": {
      "$ref": "#/definitions/DisplayMessageStatusEnumType"
    },
    "statusInfo": {
      "$ref": "#/definitions/StatusInfoType"
    }
  },
  "required": ["status"]
}
Example CALLRESULT
[3, "msg-001", {
  "status": "Accepted"
}]

3.3 GetDisplayMessagesRequest (CSMS -> CS)

Action: "GetDisplayMessages"

CSMS --> Charging Station
Field Type Required Description
requestId integer Yes Unique request ID for correlating async responses
id array of integer No Filter: specific message IDs to retrieve. Must not exceed NumberOfDisplayMessages.maxLimit.
priority MessagePriorityEnumType No Filter: only return messages with this priority
state MessageStateEnumType No Filter: only return messages with this state
JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "customData": {
      "$ref": "#/definitions/CustomDataType"
    },
    "id": {
      "type": "array",
      "items": { "type": "integer" },
      "minItems": 1
    },
    "requestId": {
      "description": "The Id of this request.",
      "type": "integer"
    },
    "priority": {
      "$ref": "#/definitions/MessagePriorityEnumType"
    },
    "state": {
      "$ref": "#/definitions/MessageStateEnumType"
    }
  },
  "required": ["requestId"]
}
Example CALL (Get All)
[2, "msg-003", "GetDisplayMessages", {
  "requestId": 42
}]

3.4 GetDisplayMessagesResponse (CS -> CSMS)

Charging Station --> CSMS
Field Type Required Description
status GetDisplayMessagesStatusEnumType Yes Whether matching messages exist
statusInfo StatusInfoType No Additional detail
JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "customData": {
      "$ref": "#/definitions/CustomDataType"
    },
    "status": {
      "$ref": "#/definitions/GetDisplayMessagesStatusEnumType"
    },
    "statusInfo": {
      "$ref": "#/definitions/StatusInfoType"
    }
  },
  "required": ["status"]
}
Example CALLRESULT
[3, "msg-003", {
  "status": "Accepted"
}]

3.5 NotifyDisplayMessagesRequest (CS -> CSMS)

Action: "NotifyDisplayMessages" - Async response to a previous GetDisplayMessagesRequest.

Charging Station --> CSMS
Field Type Required Description
requestId integer Yes The requestId from the original GetDisplayMessagesRequest
messageInfo array of MessageInfoType No The display messages matching the request
tbc boolean No "To be continued". true = more parts follow. Default: false.
JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "customData": {
      "$ref": "#/definitions/CustomDataType"
    },
    "messageInfo": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/MessageInfoType"
      },
      "minItems": 1
    },
    "requestId": {
      "description": "The id of the GetDisplayMessagesRequest that requested this message.",
      "type": "integer"
    },
    "tbc": {
      "description": "to be continued indicator. Default value when omitted is false.",
      "type": "boolean",
      "default": false
    }
  },
  "required": ["requestId"]
}
Example CALL (from CS)
[2, "notify-001", "NotifyDisplayMessages", {
  "requestId": 42,
  "tbc": false,
  "messageInfo": [
    {
      "id": 1,
      "priority": "NormalCycle",
      "state": "Idle",
      "message": {
        "format": "UTF8",
        "language": "en",
        "content": "Welcome! Special rate: $0.25/kWh"
      }
    },
    {
      "id": 2,
      "priority": "InFront",
      "state": "Charging",
      "transactionId": "txn-abc-123",
      "message": {
        "format": "UTF8",
        "language": "en",
        "content": "Current cost: $3.50 | Energy: 14.2 kWh"
      }
    }
  ]
}]

3.6 NotifyDisplayMessagesResponse (CSMS -> CS)

CSMS --> Charging Station

The CSMS SHALL always respond with an empty NotifyDisplayMessagesResponse. No fields are defined (besides optional customData).

JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "customData": {
      "$ref": "#/definitions/CustomDataType"
    }
  }
}
Example CALLRESULT
[3, "notify-001", {}]

3.7 ClearDisplayMessageRequest (CSMS -> CS)

Action: "ClearDisplayMessage"

CSMS --> Charging Station
Field Type Required Description
id integer Yes The ID of the message to remove
JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "customData": {
      "$ref": "#/definitions/CustomDataType"
    },
    "id": {
      "description": "Id of the message that SHALL be removed from the Charging Station.",
      "type": "integer"
    }
  },
  "required": ["id"]
}
Example CALL
[2, "msg-008", "ClearDisplayMessage", {
  "id": 1
}]

3.8 ClearDisplayMessageResponse (CS -> CSMS)

Charging Station --> CSMS
Field Type Required Description
status ClearMessageStatusEnumType Yes Whether the message was cleared
statusInfo StatusInfoType No Additional detail
JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "customData": {
      "$ref": "#/definitions/CustomDataType"
    },
    "status": {
      "$ref": "#/definitions/ClearMessageStatusEnumType"
    },
    "statusInfo": {
      "$ref": "#/definitions/StatusInfoType"
    }
  },
  "required": ["status"]
}
Example CALLRESULT
[3, "msg-008", {
  "status": "Accepted"
}]

4. Display Message Flows

Use Cases O01-O06
O01

Set DisplayMessage

The CSMS sends a message to a Charging Station to be displayed (e.g., promotional info, maintenance notice).

Prerequisite: The Charging Station supports the DisplayMessage feature.

Sequence Diagram:

Sequence Diagram
CSO                    CSMS                     Charging Station
 |                      |                            |
 |-- set a message ---->|                            |
 |                      |-- SetDisplayMessageReq --->|
 |                      |     (message)              |
 |                      |<-- SetDisplayMessageRes ---|
 |                      |     (status)               |
 |                      |                            |

CSMS Actions:

  1. Receive trigger from CSO/operator to display a message on a specific Charging Station
  2. Build a SetDisplayMessageRequest with a MessageInfoType payload
  3. Send the request to the Charging Station via the WebSocket connection
  4. Handle the SetDisplayMessageResponse

Response handling:

Status Action
Accepted Store the message ID in CSMS database for future reference (get/clear/replace)
NotSupportedMessageFormat The format used is not supported; retry with a different format
NotSupportedPriority The priority is not supported; retry with a different priority
NotSupportedState The state filter is not supported; retry without state or different state
UnknownTransaction The transactionId does not exist on the CS
Rejected Generic rejection; log and inform operator

Requirements:

ID Precondition CSMS Requirement
O01.FR.01 CSMS wants to set a display message CSMS SHALL send a SetDisplayMessageRequest with a MessageInfoType containing the message.
O01.FR.02 CS accepts the request CS responds with SetDisplayMessageResponse with status Accepted.
O01.FR.03 CS does not support the message format CS responds with status NotSupportedMessageFormat.
O01.FR.04 CS does not support the requested priority CS responds with status NotSupportedPriority.
O01.FR.05 CS does not support the requested state CS responds with status NotSupportedState.
O01.FR.09 Message has a startDateTime in the future CS SHALL store the message and start showing it at the specified time.
O01.FR.10 Message has an endDateTime CS SHALL stop showing and remove the message after the specified time.
O01.FR.11 CSMS sets a message with a display component The message is targeted at a specific display on the CS.
Example - Set a promotional message
[2, "msg-001", "SetDisplayMessage", {
  "message": {
    "id": 1,
    "priority": "NormalCycle",
    "state": "Idle",
    "startDateTime": "2025-01-15T08:00:00Z",
    "endDateTime": "2025-01-31T23:59:59Z",
    "message": {
      "format": "UTF8",
      "language": "en",
      "content": "Welcome! Special rate today: $0.25/kWh"
    }
  }
}]
O02

Set DisplayMessage for Transaction

The CSMS sends a message to be displayed during a specific (ongoing) transaction. The message is automatically removed when the transaction ends.

Prerequisite: The Charging Station supports DisplayMessage and there is an ongoing transaction.

Sequence Diagram:

Sequence Diagram
CSO                    CSMS                     Charging Station
 |                      |                            |
 |-- set a message ---->|                            |
 |   for transaction    |                            |
 |                      |-- SetDisplayMessageReq --->|
 |                      |     (message+transId)      |
 |                      |<-- SetDisplayMessageRes ---|
 |                      |     (status)               |
 |                      |                            |

CSMS Actions:

  1. Receive trigger to display a transaction-specific message (e.g., running cost info, charging status)
  2. Build a SetDisplayMessageRequest with transactionId set in the MessageInfoType
  3. Send the request to the Charging Station
  4. Handle the response: Accepted = message shows during the transaction and auto-removes when it ends; UnknownTransaction = verify the transaction is still active; Other statuses = handle as in O01

Requirements:

ID Precondition CSMS Requirement
O02.FR.01 CSMS wants to set a message for a specific transaction CSMS SHALL send a SetDisplayMessageRequest with transactionId in the MessageInfoType.
O02.FR.02 CS accepts the request CS responds with Accepted. Message is shown during the transaction.
O02.FR.03 The referenced transactionId is unknown to the CS CS responds with UnknownTransaction.
O02.FR.07 Transaction ends CS SHALL automatically remove the message.
Example - Transaction-specific message
[2, "msg-002", "SetDisplayMessage", {
  "message": {
    "id": 2,
    "priority": "InFront",
    "state": "Charging",
    "transactionId": "txn-abc-123",
    "message": {
      "format": "UTF8",
      "language": "en",
      "content": "Current cost: $3.50 | Energy: 14.2 kWh"
    }
  }
}]
O03

Get All DisplayMessages

The CSMS requests all display messages currently configured on a Charging Station. The CS responds with an immediate acknowledgment, then asynchronously sends all messages.

Prerequisite: The Charging Station supports the DisplayMessage feature.

Sequence Diagram:

Sequence Diagram
CSO                    CSMS                     Charging Station
 |                      |                            |
 |-- get all messages ->|                            |
 |                      |-- GetDisplayMessagesReq -->|
 |                      |     (requestId)            |
 |                      |<-- GetDisplayMessagesRes --|
 |                      |     (status)               |
 |                      |                            |
 |                      |  [If status = Accepted]    |
 |                      |                            |
 |                      |  loop [for each part]      |
 |                      |<- NotifyDisplayMsgsReq ----|
 |                      |    (requestId, msgs, tbc)  |
 |                      |-- NotifyDisplayMsgsRes --->|
 |                      |                            |

CSMS Actions:

  1. Generate a unique requestId (integer) to correlate the request with async responses
  2. Send a GetDisplayMessagesRequest with only the requestId (no filters)
  3. Handle the GetDisplayMessagesResponse: Accepted = messages will follow asynchronously; Unknown = no display messages are configured
  4. Handle incoming NotifyDisplayMessagesRequest messages: match on requestId, check tbc flag (true = more follow, false/omitted = last batch), process the messageInfo array
  5. Always respond with an empty NotifyDisplayMessagesResponse

Requirements:

ID Precondition CSMS Requirement
O03.FR.01 CSMS wants to retrieve all display messages CSMS SHALL send a GetDisplayMessagesRequest with a requestId. No filters.
O03.FR.02 CS has matching display messages CS responds with Accepted, then sends NotifyDisplayMessagesRequest with the messages.
O03.FR.03 CS has no display messages CS responds with Unknown. No NotifyDisplayMessagesRequest will follow.
O03.FR.04 CSMS receives NotifyDisplayMessagesRequest CSMS SHALL respond with an empty NotifyDisplayMessagesResponse.
O03.FR.05 tbc is true in NotifyDisplayMessagesRequest CSMS should expect more NotifyDisplayMessagesRequest messages for this requestId.
Example - Get all messages
[2, "msg-003", "GetDisplayMessages", {
  "requestId": 42
}]
O04

Get Specific DisplayMessages

The CSMS requests specific display messages by ID, or filtered by priority/state. Same message flow as O03 but with filters applied.

Prerequisite: The Charging Station supports the DisplayMessage feature.

Same sequence as O03 but with filter parameters. The CSMS can filter by specific message IDs, priority level, or Charging Station state.

CSMS Actions:

  1. Generate a unique requestId
  2. Send a GetDisplayMessagesRequest with one or more filters: id (array of message IDs), priority (filter by priority level), state (filter by CS state)
  3. Handle the GetDisplayMessagesResponse and subsequent NotifyDisplayMessagesRequest messages (same as O03)

Requirements:

ID Precondition CSMS Requirement
O04.FR.01 CSMS wants specific messages CSMS SHALL send a GetDisplayMessagesRequest with requestId and filter(s): id, priority, and/or state.
O04.FR.02 CS has matching messages CS responds with Accepted, then sends matching messages via NotifyDisplayMessagesRequest.
O04.FR.03 No messages match the filter criteria CS responds with Unknown.
O04.FR.04 id array constraint The id array SHALL NOT contain more ids than NumberOfDisplayMessages.maxLimit.
Example - Filter by specific IDs
[2, "msg-004", "GetDisplayMessages", {
  "requestId": 43,
  "id": [1, 3, 5]
}]
Example - Filter by priority
[2, "msg-005", "GetDisplayMessages", {
  "requestId": 44,
  "priority": "AlwaysFront"
}]
Example - Filter by state
[2, "msg-006", "GetDisplayMessages", {
  "requestId": 45,
  "state": "Idle"
}]
Example - Combined filters
[2, "msg-007", "GetDisplayMessages", {
  "requestId": 46,
  "priority": "NormalCycle",
  "state": "Charging"
}]
O05

Clear a DisplayMessage

The CSMS removes a specific display message from a Charging Station by its ID.

Prerequisite: The Charging Station supports the DisplayMessage feature.

Sequence Diagram:

Sequence Diagram
CSO                    CSMS                     Charging Station
 |                      |                            |
 |-- clear message ---->|                            |
 |                      |-- ClearDisplayMsgReq ----->|
 |                      |     (id)                   |
 |                      |<-- ClearDisplayMsgRes -----|
 |                      |     (status)               |
 |                      |                            |

CSMS Actions:

  1. Identify the message ID to clear (from CSMS database or from a previous GetDisplayMessages result)
  2. Send a ClearDisplayMessageRequest with the message id
  3. Handle the ClearDisplayMessageResponse: Accepted = message was successfully removed, update CSMS database; Unknown = the message ID is not known on the CS (may have already been cleared or expired)

Requirements:

ID Precondition CSMS Requirement
O05.FR.01 CSMS wants to remove a display message CSMS SHALL send a ClearDisplayMessageRequest with the message id.
O05.FR.02 CS has the message with the given id CS responds with Accepted and removes the message.
O05.FR.03 CS does not have a message with the given id CS responds with Unknown.
Example - Clear message
[2, "msg-008", "ClearDisplayMessage", {
  "id": 1
}]
O06

Replace DisplayMessage

The CSMS replaces an existing display message on a Charging Station by sending a new SetDisplayMessageRequest with the same message id.

Prerequisite: The Charging Station supports DisplayMessage and a message with the given id already exists.

Sequence Diagram:

Sequence Diagram
CSO                    CSMS                     Charging Station
 |                      |                            |
 |-- replace message -->|                            |
 |                      |-- SetDisplayMessageReq --->|
 |                      |     (message with          |
 |                      |      existing id)          |
 |                      |<-- SetDisplayMessageRes ---|
 |                      |     (status)               |
 |                      |                            |

CSMS Actions:

  1. Identify the message to replace (using a known message id previously set)
  2. Build a SetDisplayMessageRequest with the same id as the existing message, but with updated content/parameters
  3. Send the request to the Charging Station
  4. Handle the response (same as O01): Accepted = the existing message was replaced with the new content

Requirements:

ID Precondition CSMS Requirement
O06.FR.01 CSMS wants to replace an existing message CSMS SHALL send a SetDisplayMessageRequest with the same id as the message to replace.
O06.FR.02 CS has the message with the given id CS replaces the message and responds with Accepted.
O06.FR.03 CS does not have a message with the given id CS treats it as a new message (same behavior as O01).
Example - Replace message id=1 with new content
[2, "msg-009", "SetDisplayMessage", {
  "message": {
    "id": 1,
    "priority": "NormalCycle",
    "state": "Idle",
    "startDateTime": "2025-02-01T00:00:00Z",
    "endDateTime": "2025-02-28T23:59:59Z",
    "message": {
      "format": "UTF8",
      "language": "en",
      "content": "February Special: Free charging on weekends!"
    }
  }
}]

5. Configuration Variables

Config

The CSMS should query these configuration variables (via GetVariables) to understand the Charging Station's DisplayMessage capabilities.

DisplayMessageCtrlr Configuration

Variable Description
DisplayMessageCtrlr.Available Whether the DisplayMessage feature is available
DisplayMessageCtrlr.Enabled Whether the DisplayMessage feature is enabled
NumberOfDisplayMessages Maximum number of display messages the CS can store. maxLimit constrains the id array in GetDisplayMessagesRequest.
DisplayMessageSupportedFormats Comma-separated list of supported MessageFormatEnumType values (e.g., "ASCII,UTF8,HTML")
DisplayMessageSupportedPriorities Comma-separated list of supported MessagePriorityEnumType values (e.g., "NormalCycle,InFront,AlwaysFront")

6. CSMS Implementation Checklist

Implementation

Database Schema Considerations

The CSMS should maintain a display_messages table to track messages sent to Charging Stations:

Column Description
id (integer) The message ID (unique per Charging Station)
charge_point_id Reference to the Charging Station
priority MessagePriorityEnumType value
state Optional MessageStateEnumType value
start_date_time Optional start time
end_date_time Optional end time
transaction_id Optional transaction reference
message_format MessageFormatEnumType value
message_language Optional language code
message_content The message text (max 512 chars)
display_component Optional target display
status Current status (active, cleared, expired, etc.)
created_at / updated_at Timestamps

Message Handlers to Implement

CSMS-Initiated (Outbound) Messages

Handler Trigger Action
send_set_display_message Operator/API request Build and send SetDisplayMessageRequest, handle response
send_get_display_messages Operator/API request Build and send GetDisplayMessagesRequest, track requestId
send_clear_display_message Operator/API request Build and send ClearDisplayMessageRequest, handle response

CS-Initiated (Inbound) Messages

Handler Incoming Message CSMS Action
handle_notify_display_messages NotifyDisplayMessagesRequest Match requestId, process messageInfo array, check tbc flag, respond with empty NotifyDisplayMessagesResponse

Error Handling

Timeout

If no SetDisplayMessageResponse / ClearDisplayMessageResponse / GetDisplayMessagesResponse is received within the configured message timeout, treat the operation as failed.

Partial NotifyDisplayMessages

If tbc=true is received but no subsequent NotifyDisplayMessagesRequest arrives, implement a reasonable timeout to consider the retrieval incomplete.

ID Management

The CSMS is responsible for assigning and tracking unique message IDs per Charging Station. IDs must be positive integers (>= 0).

Expired Messages

Messages with endDateTime in the past are automatically removed by the CS. The CSMS should also clean up its local database accordingly.

Transaction-bound Messages

Messages with transactionId are automatically removed by the CS when the transaction ends. The CSMS should track this and update its database.

OCPP 2.0.1 Display Message Flows - CSMS Developer Guide. Based on OCPP 2.0.1 Edition 4 Specification (Part 2, Section O).