ChangeAvailability

RemoteControl CSMS->CS OCPP 2.0.1

Sent by the CSMS to change the operational status of an EVSE or connector. Supports setting it Operative or Inoperative.

Quick Reference

Required Fields

operationalStatus OperationalStatusEnumType

Operative or Inoperative

evse EVSEType

Target EVSE - object with id. If id is 0, applies to the entire Charging Station

evse.id integer

EVSE ID. Use 0 to target the entire Charging Station

Optional Fields

evse.connectorId integer

If provided, targets a specific connector on the EVSE

Example Payload

{
  "operationalStatus": "Inoperative",
  "evse": {
    "id": 1
  }
}

Example Full Frame

[
  2,
  "msg-001",
  "ChangeAvailability",
  {
    "operationalStatus": "Inoperative",
    "evse": {
      "id": 1
    }
  }
]

Format: [MessageType, MessageId, Action, Payload]

Overview

ChangeAvailability lets the CSMS put an EVSE (or the entire Charging Station) in or out of service. The status change is reflected in subsequent StatusNotification messages.

When to Send

  • To take an EVSE out of service for maintenance
  • To re-enable an EVSE after maintenance
  • To disable the entire station during off-hours

Expected Response

  • status: Accepted, Rejected, or Scheduled

Scheduled means the station will apply the change after the current transaction on the affected EVSE completes.

Key Differences from OCPP 1.6J

OCPP 1.6JOCPP 2.0.1
type: "Available"operationalStatus: "Operative"
type: "Inoperative"operationalStatus: "Inoperative"
connectorId flat fieldevse: { id, connectorId } object

Usage Notes

  • evse.id = 0 affects the entire Charging Station
  • If a transaction is active when Inoperative is requested, expect a Scheduled response
  • After processing, the Charging Station sends StatusNotification reflecting the new status

Testing Tips

  • Test setting Inoperative while a session is active (expect Scheduled)
  • Test re-enabling with Operative and verify StatusNotification shows Available
  • Test with evse.id = 0 to affect all EVSEs

Common Errors

TypeConstraintViolation

Cause: operationalStatus uses Available or Unavailable (from 1.6J)

Solution: OCPP 2.0.1 uses Operative and Inoperative instead of Available/Unavailable

TypeConstraintViolation

Cause: connectorId sent as flat field instead of inside evse object

Solution: In OCPP 2.0.1 the target is evse: { id: 1 } or evse: { id: 1, connectorId: 1 }