跳到正文

OCPP 2.0.1 和 2.1 协议参考。

OCPP 2.0.1 和 2.1 的全部 91 条消息,附字段和示例,并标明哪些是 2.1 新增的;另有取代 1.6 配置键的设备模型,以及三种安全配置文件。

消息设备模型安全配置文件从 1.6 迁移常见问题

什么是 OCPP 2.0.1 和 2.1?

它们是开放充电点协议(Open Charge Point Protocol)的较新版本。这项开放标准由开放充电联盟(Open Charge Alliance)制定,规定充电桩如何与管理它的软件通信:这个软件在规范中称为 CSMS,在市场上称为后台。与 1.6J 一样,充电桩向后台建立一条 WebSocket 连接,双方通过它发送 JSON 消息。

OCPP 2.0.1 不向后兼容 1.6。它把充电桩描述为由组件和变量构成的设备模型,内置三种安全配置文件,用一条消息 TransactionEvent 报告交易,并支持 ISO 15118,用于 Plug and Charge 以及结合车辆输入的智能充电。

OCPP 2.1 以 2.0.1 为基础。它的 schema 就是在 2.0.1 的 schema 上增加了可选字段,并新增 27 条消息,涵盖双向充电、DER 控制、由充电桩自行计算费用的费率、在充电桩上支付、周期性事件流和换电。充电桩与其后台在 WebSocket 建立时商定使用一个版本。

  • 开放标准可免费实现,由开放充电联盟维护。OCPP 2.1 也以 IEC 63584-210 发布。
  • WebSocket 和 JSON由充电桩保持打开的一条连接。2.1 新增 SEND,一种不需要应答的消息。
  • 91 条消息2.0.1 中有 64 条,2.1 又新增 27 条,分属 19 个功能块。
  • 双向充电桩和后台各自发起自己的消息。

OCPP 2.0.1 和 2.1 全部 91 条消息

每条消息都是一方发出的请求和另一方给出的响应,二者通过消息 ID 对应。唯一的例外是 NotifyPeriodicEventStream:它是 2.1 中的 SEND 消息,不需要应答。

安全

充电桩和后台的证书,以及充电桩报告的安全事件。

配置与注册

启动、向后台注册、读取和设置设备模型,以及重置。

授权

充电前检查 ID 令牌、授权缓存,以及 2.1 中的临时支付。

本地授权列表

后台存储在充电桩上的 ID 令牌列表,让充电桩可以自行授权。

交易

每笔交易的开始、更新和结束都用同一条消息 TransactionEvent 报告。

远程控制

从后台启动和停止交易、解锁充电接口,以及触发消息。

可用性

每个充电接口的状态、心跳,以及让充电桩或 EVSE 停止服务。

预约

为某个 ID 令牌预约 EVSE,以及取消该预约。

费率和费用

面向驾驶员的价格和实时费用;在 2.1 中还包括由充电桩自行计算费用的费率。

电表数值

交易之外的电表读数;交易期间的读数通过 TransactionEvent 传送。

智能充电

带功率或电流限值的充电配置文件、来自外部的限值,以及车辆的需求。

固件管理

更新充电桩固件,以及通过本地控制器发布固件。

证书管理

安装和检查证书,包括 Plug and Charge 的合同证书。

诊断

日志、设备模型上的监控项、事件、客户数据,以及 2.1 中的周期性事件流。

显示消息

后台为充电桩设置的、向驾驶员显示的消息。

数据传输

厂商数据,用于标准未涵盖的功能。

双向能量传输

2.1 新增:通过充电配置文件控制充电和放电(V2X)。

DER 控制

2.1 新增:为作为分布式能源(DER)运行的充电桩和车辆设置电网支撑参数。

换电

2.1 新增:换电站。

OCPP 2.0.1 设备模型

在 OCPP 1.6 中,充电桩有一个扁平的配置键列表。在 2.0.1 和 2.1 中,充电桩用组件来描述自己,例如充电站、EVSE、充电接口,或 OCPPCommCtrlr 这样的控制器,每个组件都有变量。一个变量可以有四个值:Actual、Target、MinSet 和 MaxSet。过去的配置键,现在是某个控制器组件的变量。

如何使用

  • GetVariables 和 SetVariables在一条消息中读取或设置多个变量。充电桩对每个变量分别应答。
  • GetBaseReport 和 GetReport请求整个设备模型或其中一部分。充电桩通过 NotifyReport 消息返回。
  • 监控项SetVariableMonitoring 按阈值、变化或固定间隔监控某个变量,充电桩通过 NotifyEvent 报告。
  • 按功能启用可选功能的控制器(例如 AuthCacheCtrlr 或 ReservationCtrlr)有一个 Enabled 变量,用来开启或关闭该功能。

SetVariables 的应答

Accepted
值已设置。
Rejected
变量存在,但值被拒绝。
UnknownComponent
充电桩没有这个组件。
UnknownVariable
该组件没有这个变量。
NotSupportedAttributeType
该变量没有这种类型的值,例如没有 Target。
RebootRequired
值已保存,重启后生效。

取代最常用 1.6 配置键的变量

规范标准化了更多变量,列在其附录中。充电桩会在应答 GetBaseReport 时报告自己具有的变量。

组件和变量类型设置内容OCPP 1.6 中
OCPPCommCtrlr.HeartbeatIntervalinteger(秒)没有其他消息时,充电桩在经过多少秒后发送 Heartbeat。HeartbeatInterval
OCPPCommCtrlr.MessageAttempts实例 TransactionEventinteger后台未能处理某条 TransactionEvent 时,充电桩尝试发送该消息的次数。TransactionMessageAttempts
OCPPCommCtrlr.MessageAttemptInterval实例 TransactionEventinteger充电桩重试前等待的秒数。TransactionMessageRetryInterval
OCPPCommCtrlr.WebSocketPingIntervalinteger(秒)WebSocket ping 之间的秒数;设为 0 时关闭充电桩自己发出的 ping。WebSocketPingInterval
OCPPCommCtrlr.ResetRetriesinteger重置失败时充电桩重试的次数。ResetRetries
OCPPCommCtrlr.UnlockOnEVSideDisconnectboolean在车辆一侧拔下线缆时,解锁充电桩一侧的线缆。UnlockConnectorOnEVSideDisconnect
SampledDataCtrlr.TxUpdatedMeasurands列表充电桩在交易期间测量的内容,通过 eventType 为 Updated 的 TransactionEvent 发送。MeterValuesSampledData
SampledDataCtrlr.TxUpdatedIntervalinteger(秒)这些读数之间的秒数;设为 0 时交易期间不发送读数。MeterValueSampleInterval
SampledDataCtrlr.TxEndedMeasurands列表放入结束交易的 TransactionEvent 中的内容。StopTxnSampledData
AlignedDataCtrlr.Intervalinteger(秒)按时钟对齐的读数之间的秒数。ClockAlignedDataInterval
AlignedDataCtrlr.Measurands列表按时钟对齐的读数所包含的内容。MeterValuesAlignedData
AlignedDataCtrlr.TxEndedMeasurands列表放入结束交易的 TransactionEvent 中的按时钟对齐的读数。StopTxnAlignedData
TxCtrlr.EVConnectionTimeOutinteger(秒)交易开始后,驾驶员需要在多少秒内插上充电枪,否则交易会被取消。ConnectionTimeOut
TxCtrlr.StopTxOnEVSideDisconnectboolean在车辆一侧拔下线缆时结束交易。StopTransactionOnEVSideDisconnect
TxCtrlr.StopTxOnInvalidIdboolean当正在进行的交易的 ID 令牌最终未被接受时,停止该交易。StopTransactionOnInvalidId
TxCtrlr.MaxEnergyOnInvalidIdinteger后台拒绝 ID 令牌后,充电桩仍可输出的电量(Wh)。MaxEnergyOnInvalidId
TxCtrlr.TxStartPoint列表交易何时开始:授权时、插上充电枪时、开始输电时等。2.0.1 新增
TxCtrlr.TxStopPoint列表交易何时结束,从同一列表中选择。2.0.1 新增
AuthCtrlr.AuthorizeRemoteStartboolean充电桩是否先用 Authorize 检查远程启动的 ID 令牌。AuthorizeRemoteTxRequests
AuthCtrlr.LocalAuthorizeOfflineboolean离线时为已知的 ID 令牌启动交易。LocalAuthorizeOffline
AuthCtrlr.LocalPreAuthorizeboolean为已知的 ID 令牌启动交易,不等待后台。LocalPreAuthorize
AuthCtrlr.OfflineTxForUnknownIdEnabledboolean离线时为未知的 ID 令牌启动交易。AllowOfflineTxForUnknownId
AuthCacheCtrlr.Enabledboolean使用授权缓存。AuthorizationCacheEnabled
LocalAuthListCtrlr.Enabledboolean使用本地授权列表。LocalAuthListEnabled
LocalAuthListCtrlr.ItemsPerMessage实例 SendLocalListinteger一条 SendLocalList 中 ID 令牌的最大数量。SendLocalListMaxLength
SmartChargingCtrlr.ProfileStackLevelinteger充电配置文件可以使用的最高堆栈级别。ChargeProfileMaxStackLevel
SmartChargingCtrlr.RateUnit列表充电计划可以使用安培、瓦特还是两者均可。ChargingScheduleAllowedChargingRateUnit
SmartChargingCtrlr.PeriodsPerScheduleinteger一个充电计划中时段的最大数量。ChargingScheduleMaxPeriods
SmartChargingCtrlr.Phases3to1boolean充电桩能否在交易期间从三相切换到单相。ConnectorSwitch3to1PhaseSupported
ReservationCtrlr.NonEvseSpecificboolean预约能否针对整台充电桩,而不是某一个 EVSE。ReserveConnectorZeroSupported

OCPP 2.0.1 和 2.1 安全配置文件

两个版本都定义了三种安全配置文件。充电桩与其后台每次只使用其中一种,并在第一条 OCPP 消息之前确定。后台通过 SetNetworkProfile 为每个连接槽位设置安全配置文件,充电桩在 SecurityCtrlr.SecurityProfile 中报告正在使用的那一种。

配置文件充电桩如何证明身份后台如何证明身份连接
1. 不加密传输,使用基本身份验证HTTP 基本身份验证,使用密码不证明不加密。仅适用于可信网络,例如充电桩与后台之间的 VPN。
2. TLS,使用基本身份验证HTTP 基本身份验证,使用密码其 TLS 服务器证书TLS 1.2 或更高版本
3. TLS,使用客户端证书其自己的 TLS 客户端证书其 TLS 服务器证书TLS 1.2 或更高版本
  • 降级充电桩只能从配置文件 3 降到配置文件 2,而且仅当 AllowSecurityProfileDowngrade 设为 true 时才可以。它绝不会通过 OCPP 降到配置文件 1。
  • 密码和证书密码为 SecurityCtrlr.BasicAuthPassword。充电桩通过 SignCertificate 申请新证书,后台通过 CertificateSigned 交付证书。
  • 安全事件充电桩通过 SecurityEventNotification 报告发生的事件,例如重置、固件更新或被后台拒绝的凭据。

从 OCPP 1.6 到 2.0.1,逐条对照消息

OCPP 2.0.1 保留了许多 1.6 的消息名称,也重命名或合并了其他消息。点击链接可在本参考或 1.6J 参考中打开该消息。

OCPP 1.6OCPP 2.0.1 和 2.1变化
StartTransaction、StopTransactionTransactionEvent一条消息,eventType 为 Started、Updated 或 Ended。交易 ID 由充电桩设定,类型为字符串。
MeterValuesTransactionEvent、MeterValues交易期间的读数放在 TransactionEvent 中;MeterValues 传送交易之外的读数。
StatusNotificationStatusNotification、NotifyEventStatusNotification 只报告充电接口状态,附 evseId 和 connectorId。错误代码放在 NotifyEvent 中,2.1 也倾向于用 NotifyEvent 报告可用性。
RemoteStartTransactionRequestStartTransaction携带一个 idToken 对象和一个 remoteStartId,后者会在启动交易的 TransactionEvent 中返回。
RemoteStopTransactionRequestStopTransaction按交易 ID 停止交易,该 ID 现在是字符串。
ChangeConfigurationSetVariables在一条消息中设置设备模型的多个变量。
GetConfigurationGetVariables、GetBaseReport、GetReport读取所选变量,或请求一份通过 NotifyReport 消息送达的报告。
GetDiagnosticsGetLog请求诊断日志或安全日志。
DiagnosticsStatusNotificationLogStatusNotification报告该上传的进度。
ResetReset用 Immediate 或 OnIdle 取代 Hard 或 Soft,并且可以只重置一个 EVSE。
ChangeAvailabilityChangeAvailability通过 evse 字段指定充电桩、某个 EVSE 或某个充电接口。
AuthorizeAuthorize用带类型的 idToken 对象取代 idTag 字符串。
BootNotificationBootNotification增加了启动原因;充电桩的信息放在 chargingStation 对象中。
Heartbeat、UnlockConnector、ClearCache、DataTransfer、ReserveNow、CancelReservation、SendLocalList、GetLocalListVersion、SetChargingProfile、ClearChargingProfile、GetCompositeSchedule、TriggerMessage、UpdateFirmware、FirmwareStatusNotification名称不变消息相同,增加了 EVSE 字段和较新的数据类型。

关于 OCPP 2.0.1 和 2.1 的问题

开放充电点协议的 2.0.1 版本,由开放充电联盟于 2020 年发布。它取代了 OCPP 2.0;与 1.6 相比,它增加了设备模型、安全配置文件、ISO 15118 支持和 TransactionEvent。它不向后兼容 1.6。

OCPP 2.1 于 2025 年 1 月发布,同时也是 IEC 63584-210 标准。它新增 27 条消息,没有删除任何消息,涵盖:双向充电(V2X)和 DER 控制、ISO 15118-20、由充电桩自行计算费用的费率、通过刷卡终端或二维码在充电桩上支付、优先充电、动态充电配置文件、周期性事件流和换电。在消息列表上方选择“2.1 新增”即可查看。

2.1 的 schema 就是在 2.0.1 的 schema 上增加了可选字段。据开放充电联盟介绍,为 2.0.1 编写的逻辑只需两处小改动即可继续使用:SignCertificate 可以携带一个 requestId,随后由 CertificateSigned 重复返回;NotifyMonitoringReport 新增了一个必填字段。版本仍按连接商定:在 WebSocket 握手时,充电桩提供例如 ocpp2.1、ocpp2.0.1 和 ocpp1.6,由后台选择其中一个。

2.0.1 有自己的一套消息:用设备模型取代配置键,增加安全配置文件,用 TransactionEvent 取代 StartTransaction 和 StopTransaction,在充电桩与其充电接口之间增加 EVSE 这一层级,并提供用于 ISO 15118 的消息。充电桩与其后台在建立连接时商定使用一个版本。上方的表格对照了两个版本的消息,OCPP 1.6J 参考收录了全部 1.6 消息。

OCPP 2.0 发布后,出现了一些只能通过修改消息 schema 才能解决的问题,而 2.0 的实现无法跟进这些修改。开放充电联盟为修正后的版本单独编号为 2.0.1,并建议只实现 2.0.1。在规范中,除非另有说明,OCPP 2.0 即指 2.0.1。

开放充电联盟在其网站上免费发布这两个版本,附有每条消息的 JSON schema 和勘误表。本参考依据 JSON schema 和规范第 2 部分编写。两者不一致时,以规范及其勘误为准。

在充电桩数据库中查一查:其中 102 款充电桩列有 OCPP 2.0.1,4 款列有 2.1。数据手册通常也会注明。支持多个版本的充电桩在连接时会提供全部版本,由后台选择其中一个。

Plugchoice 上的 OCPP 1.6J

Plugchoice 目前可连接 OCPP 1.6J 充电桩,具体取决于型号、固件和配置。