OCPP1.6
OCPP 1.6 资料汇总
更新时间:2026-06-30
一、OCPP 协议概述
OCPP(Open Charge Point Protocol,开放充电点协议)是充电桩(Charge Point)与中央管理系统(Central System / CSMS)之间的开放通信协议,由荷兰 OCPP-Forum 于 2009 年开发,现由 Open Charge Alliance(OCA) 维护和推广。
- 官网:https://openchargealliance.org
- 定位:全球 EV 充电基础设施互联互通的事实标准
- 当前存在三个活跃版本:OCPP 1.6(2015)、OCPP 2.0.1(2020,已成为 IEC 标准 IEC63584)、OCPP 2.1(2025)
二、OCPP 1.6 核心信息
2.1 版本概况
| 项目 | 详情 |
|---|---|
| 发布时间 | 2015 年 |
| 传输方式 | SOAP(基于 HTTP/XML)和 JSON(基于 WebSocket) |
| 前身 | OCPP 1.5 |
| 与 2.0.1 兼容性 | 不兼容,是独立协议版本 |
| 当前状态 | 仍被广泛部署,但行业正在向 OCPP 2.x 迁移 |
2.2 功能特性(相比 OCPP 1.5 新增/改进)
- 同时支持 SOAP 和 JSON 两种消息格式
- Smart Charging(智能充电):支持负载均衡和充电曲线(Charge Profile)管理
- 本地列表管理(Local Auth List Management):支持充电桩本地白名单/黑名单
- 额外的充电桩状态上报
- 消息发送请求(如请求 CP 时间或状态)
- 多项规范细节改进和勘误
2.3 功能配置文件(Functional Profiles)
OCPP 1.6 定义了以下功能配置文件,实现方按需支持:
| Profile | 中文 | 说明 |
|---|---|---|
| Core | 核心配置 | 基本充电操作、授权、事务管理、心跳 |
| Firmware Management | 固件管理 | 远程固件升级 |
| Local Auth List Management | 本地授权列表管理 | 管理充电桩本地的白名单/黑名单 |
| Remote Trigger | 远程触发 | 中央系统请求充电桩主动上报信息 |
| Reservation | 预约 | 充电桩预约功能 |
| Smart Charging | 智能充电 | 充电曲线管理和负载均衡 |
2.4 Core Profile 核心消息列表
充电桩 → 中央系统(上行)
| 消息名 | 用途 |
|---|---|
| Authorize | 授权请求(刷卡/扫码后) |
| BootNotification | 充电桩启动通知 |
| DataTransfer | 自定义数据透传 |
| DiagnosticsStatusNotification | 诊断文件上传状态通知 |
| FirmwareStatusNotification | 固件升级状态通知 |
| Heartbeat | 心跳 |
| MeterValues | 电表数据上报 |
| StartTransaction | 开始充电事务 |
| StatusNotification | 状态变更通知(如连接器状态变化) |
| StopTransaction | 停止充电事务 |
中央系统 → 充电桩(下行)
| 消息名 | 用途 |
|---|---|
| CancelReservation | 取消预约 |
| ChangeAvailability | 变更充电桩可用状态 |
| ChangeConfiguration | 修改配置参数 |
| ClearCache | 清除本地授权缓存 |
| ClearChargingProfile | 清除充电曲线 |
| GetCompositeSchedule | 获取组合充电计划 |
| GetConfiguration | 读取配置参数 |
| GetDiagnostics | 请求上传诊断文件 |
| GetLocalListVersion | 获取本地列表版本 |
| RemoteStartTransaction | 远程启动充电 |
| RemoteStopTransaction | 远程停止充电 |
| ReserveNow | 预约充电桩 |
| Reset | 复位(软复位/硬复位) |
| SendLocalList | 发送本地授权列表 |
| SetChargingProfile | 设置充电曲线 |
| TriggerMessage | 触发消息(请求充电桩上报指定消息) |
| UnlockConnector | 解锁连接器 |
| UpdateFirmware | 固件更新 |
2.5 OCPP 1.6-J 与安全增强
OCPP 1.6 Security Whitepaper(安全白皮书,第4版,2026年2月更新)描述了如何在 OCPP 1.6-J(基于JSON的OCPP 1.6)之上以标准化方式使用 OCPP 2.0 引入的安全增强:
- 安全连接建立(Secure connection setup)
- 安全事件与日志(Security events/logging)
- 安全固件更新(Secure firmware update)
白皮书下载:https://openchargealliance.org/wp-content/uploads/2025/08/OCPP-1.6-security-whitepaper-edition-4.zip
三、官方资源入口
3.1 规范下载
OCPP 1.6 官方规范(含 Edition 2 及勘误)可通过 OCA 官网下载:
- 下载页:https://openchargealliance.org/download-ocpp/
- 支持注册账号(免费)或无需账号直接下载
- 直接下载入口:https://openchargealliance.org/my-oca/ocpp/
3.2 认证与测试工具
- OCPP 1.6 认证:https://openchargealliance.org/certification/certification-ocpp-1-6/
- OCPP 测试工具(OCA官方):https://openchargealliance.org/test-tool/
3.3 白皮书(与 OCPP 1.6 相关的重点白皮书)
| 白皮书 | 日期 | 说明 |
|---|---|---|
| OCPP 1.6 Security Whitepaper (4th Edition) | 2026-02 | 基于 OCPP 1.6-J 的安全增强 |
| Using ISO 15118 Plug & Charge with OCPP 1.6 | 2020-09 | OCPP 1.6 上的 Plug & Charge |
| Multiple Connectors per EVSE (v1.2) | 2024-03 | 多连接器实现指南 |
| Signed Meter Values (Eichrecht) | 2025-02 | 签字电表值(德国计量法) |
| Customizing OCPP Implementations (v1.1) | 2020-06 | 自定义扩展指南 |
| OCPP & California Pricing Requirements (v3.1) | 2024-09 | 加州定价合规 |
白皮书总览页:https://openchargealliance.org/whitepapers/
四、开源实现
4.1 Python — mobilityhouse/ocpp ⭐推荐
| 项目 | 详情 |
|---|---|
| 仓库 | https://github.com/mobilityhouse/ocpp |
| 语言 | Python(≥3.7) |
| 支持版本 | OCPP 1.6 (errata v4), OCPP 2.0.1 (Edition 2 & 3) |
| 传输 | JSON / WebSocket |
| 安装 | pip install ocpp + pip install websockets |
| 文档 | https://ocpp.readthedocs.io/en/latest/ |
| 许可证 | MIT |
| 维护方 | The Mobility House |
| 定位 | 协议层基础组件,非开箱即用的完整产品。提供序列化、反序列化、消息路由、格式校验等基础能力,开发者需自行实现数据库、Web UI、并发管理等上层业务逻辑 |
4.1.1 官方文档结构(共 5 个页面)
ocpp 文档
├── Installation ← pip install ocpp + websockets,Python ≥ 3.7
├── Basic Usage ← 概述:双端协议组件定位
│ ├── Server Side ← CSMS 服务端编写指南(含完整示例)
│ └── Client Side ← 充电桩客户端编写指南(含完整示例)
└── Debugging ← 日志调试配置
4.1.2 核心设计理念
- 双端统一基类:Server 端和 Client 端都继承同一个
ocpp.v16.ChargePoint基类 - 装饰器路由:用
@on(Action.xxx)装饰器注册消息处理器,自动路由消息到对应方法 - 自动命名转换:JSON 中的
camelCase与 Python 的snake_case自动互转 - 消息校验内置:自动验证收发的 Payload 是否符 OCPP 规范
- call() 协程:
self.call(request)发送消息并阻塞等待响应,返回类型安全的call_result对象
4.1.3 Server 端代码模式
# 继承 ChargePoint 基类
# 用 @on(Action.xxx) 注册消息处理器
# 每个处理器返回对应的 call_result 对象
class MyChargePoint(cp):
@on(Action.boot_notification)
async def on_boot_notification(self, charge_point_vendor,
charge_point_model, **kwargs):
return call_result.BootNotification(
current_time=datetime.now(tz=timezone.utc).isoformat(),
interval=10,
status=RegistrationStatus.accepted,
)
# 对每个 WebSocket 连接创建 ChargePoint 实例
# charge_point_id 从 URL path 的末尾段提取
async def on_connect(connection):
charge_point_id = connection.request.path.split("/")[-1]
charge_point = MyChargePoint(charge_point_id, connection)
await charge_point.start()
# 启动 WebSocket 服务器,指定 OCPP 子协议
server = await websockets.serve(
on_connect, '0.0.0.0', 9000,
subprotocols=['ocpp1.6'], # 可同时支持多版本: ['ocpp1.6', 'ocpp2.0.1']
)
4.1.4 Client 端代码模式(充电桩模拟器)
class ChargePoint(cp):
async def send_boot_notification(self):
# 构建请求对象(call.py 中的 dataclass)
request = call.BootNotification(
charge_point_model="Wallbox XYZ",
charge_point_vendor="acme",
)
# call() 发送并等待响应,返回类型安全的 call_result 对象
response = await self.call(request)
if response.status == RegistrationStatus.accepted:
print("Connected to central system.")
async def main():
# 连接到 CSMS,URL path 末尾的 CP_1 是充电桩标识
async with websockets.connect(
"ws://localhost:9000/CP_1",
subprotocols=["ocpp1.6"]
) as ws:
charge_point = ChargePoint("CP_1", ws)
# start() 监听服务端下发的消息
# send_boot_notification() 发送 BootNotification
await asyncio.gather(
charge_point.start(),
charge_point.send_boot_notification(),
)
4.1.5 消息代码位置速查
| 文件 | 内容 |
|---|---|
ocpp/v16/enums.py |
所有枚举定义(Action, RegistrationStatus, AuthorizationStatus 等) |
ocpp/v16/call.py |
请求消息 dataclass(发送用) |
ocpp/v16/call_result.py |
响应消息 dataclass(handler 返回值用) |
ocpp/v16/__init__.py |
ChargePoint 基类(包含 call(), start(), 消息路由逻辑) |
ocpp/routing.py |
@on() 和 @after() 装饰器 |
4.1.6 调试日志
import logging
# 只看 ocpp 库的 DEBUG 日志,不影响其他依赖
logging.getLogger('ocpp').setLevel(logging.DEBUG)
logging.getLogger('ocpp').addHandler(logging.StreamHandler())
4.2 Java — SteVe(RWTH Aachen University)⭐完整的 CSMS 参考
| 项目 | 详情 |
|---|---|
| 仓库 | https://github.com/steve-community/steve |
| 语言 | Java(JDK 21+) |
| 构建工具 | Maven |
| 数据库 | MySQL / MariaDB |
| 部署 | 支持 JAR 直接运行、Docker Compose、Kubernetes |
| 许可证 | GPL |
| 起源 | 2013 年德国亚琛工业大学,名称源自 "Steckdosenverwaltung"(插座管理) |
| 定位 | 完整的 CSMS 实现,开箱即用,带 Web 管理界面 |
支持的 OCPP 版本:
- OCPP 1.2S / 1.2J
- OCPP 1.5S / 1.5J
- OCPP 1.6S / 1.6J(含 Security Extensions)
OCPP 1.6J Security 实现(Security Whitepaper Edition 3):
- Security Profile 0-3:从无安全到 mTLS 全部支持
- 证书管理:签发、安装、删除
- 安全事件:实时日志与监控
- 签名固件更新:加密签名 + 证书验证
- 安全诊断日志
Web 管理界面功能:
- 充电桩管理(注册、状态监控)
- OCPP Tag(RFID 卡)管理
- 用户管理
- 充电曲线(Charging Profiles)管理
- 预约(Reservations)管理
- 交易记录(Transactions)查询
- OCPP 操作台(按版本分开的远程命令下发界面)
- REST API(含 OpenAPI spec)
安装概要:
# Docker 一键部署
docker compose up -d
# 访问 http://localhost:8180/steve/manager
# 或手动构建
./mvnw package -Pprod,mysql
java -jar target/steve.war
充电桩连接地址(注册充电桩后使用):
- SOAP:
http://<ip>:<port>/steve/services/CentralSystemService - WebSocket/JSON:
ws://<ip>:<port>/steve/websocket/CentralSystemService
SteVe 的商业化版本为 Powerfill( https://powerfill.io/ ),提供企业级功能。
4.3 其他开源项目
| 项目 | 语言/平台 | 说明 |
|---|---|---|
| scriptable-ocpp-chargepoint-simulator | JavaScript/Node.js | 可编写脚本的 OCPP 1.6J 充电桩模拟器,支持 REST API + HTML 前端,适合批量测试 |
| OCPP-Documentation(Gitee) | 中文翻译 | https://gitee.com/leven9/OCPP-Documentation |
| OCA 官方测试工具 | Web | https://openchargealliance.org/test-tool/ |
注:C++ / Go / Rust 等语言的 OCPP 实现分散在社区中,需按需进一步搜索确认。
五、中文技术文章推荐
| 文章 | 来源 | 说明 |
|---|---|---|
| OCPP协议终极指南:一步到位精通OCPP 1.6并实现… | CSDN专栏 | 协议概述、核心概念、技术细节、编程实战 |
| 什么是OCPP协议 (OCPP1.6、OCPP2.0.1) | CSDN | 协议对比、版本差异 |
| OCPP Documentation | 博客园(夜雨沧神) | 官方文档指引 + 中文翻译仓库地址 |
| 米尔OCPP协议实战开发指南 | 博客园 | 嵌入式平台下的 OCPP 开发指南 |
| 充电桩 OCPP 充电通讯协议介绍 | 知乎 | 入门级概述 |
| OCPP(开放充电协议) | 知乎 | 行业背景与互联互通 |
六、协议架构简述
┌──────────────┐ OCPP (JSON/WebSocket 或 SOAP/XML) ┌──────────────┐
│ │ ◄══════════════════════════════════════════════► │ │
│ Charge Point│ │Central System│
│ (充电桩) │ │ (中央管理系统)│
│ │ │ (CSMS) │
└──────────────┘ └──────────────┘
- 通信模型:充电桩作为 WebSocket 客户端主动连接到 CSMS;在 SOAP 模式下则通过 HTTP POST 双向通信
- 消息格式:JSON 版本使用
[MessageTypeId, UniqueId, Action, Payload]的数组格式(CALL/CALLRESULT/CALLERROR) - 连接维护:通过 Heartbeat 消息维持连接活性
- 事务模型:由 StartTransaction → MeterValues → StopTransaction 构成完整充电事务
七、与周边协议的关系
| 相关协议 | 关系 |
|---|---|
| ISO 15118 | 车桩通信协议,通过 OCPP 2.0.1 的 ISO 15118 支持可联动;OCPP 1.6 通过白皮书方式支持 Plug & Charge |
| OCPP 2.0.1 | 下一代版本,增加安全、设备管理、智能充电、ISO 15118 支持,已成为 IEC 标准(IEC63584) |
| OCPP 2.1 | 最新版本(2025),增加双向充电(V2X)、DER控制、电池更换等 |
| OpenADR | 需求响应协议,与 OCPP 可互补使用 |
| IEC 61850 | 变电站自动化标准,OCA 有专门白皮书讨论与 OCPP 的协同 |
| CHAdeMO | 日本直流快充标准,OCA 有白皮书说明 OCPP 与 CHAdeMO 的配合方式 |
八、Monta 公司速览
Monta 是一家丹麦哥本哈根的 EV 充电软件平台公司,成立于 2020 年。核心产品是 SaaS 化的 CSMS(充电站管理系统),即 OCPP 协议中 Central System 端的商业化实现。
| 项目 | 详情 |
|---|---|
| 官网 | https://monta.com |
| 总部 | 哥本哈根,丹麦 |
| 定位 | B2B 充电软件平台,欧洲领先的 EV 充电平台 |
| OCPP 支持 | OCPP 1.6 / 2.0.1,覆盖 600+ 硬件型号 |
| 漫游网络 | 110 万+ 充电点,覆盖 26 个欧洲国家(2026.06 数据) |
| 服务商 | 支持 40+ eMobility 服务商 |
| 漫游协议 | 通过 OCPI 与 Plugsurfing 等实现跨平台漫游 |
| 核心功能 | 充电桩管理、计费支付、智能充电/负载均衡、车队管理、住宅充电 |
最新动态(2026-06-30):与 Plugsurfing 合作扩展漫游网络,覆盖欧洲 80% 充电桩。
九、下一步建议
9.1 学习路线
- 阅读
mobilityhouse/ocpp官方文档(仅 5 页,1 小时内可通读):- 安装 → Server 端示例 → Client 端示例 → 调试方法
- 获取官方规范 PDF:从 OCA 官网下载 OCPP 1.6 Edition 2 完整规范(含勘误),作为协议细节的权威参考
- 参考 SteVe 源码:即使是 Python 技术栈,SteVe 的数据库设计、UI 结构、消息处理流程都是绝佳的架构参考
- 阅读安全白皮书:OCPP 1.6 Security Whitepaper 第4版
9.2 动手实践路线
- 第一步:
pip install ocpp websockets,跑通文档中的 Server + Client 示例(BootNotification 握手) - 第二步:扩展 Server 端,实现 Core Profile 全部消息处理器
- 第三步:编写充电桩模拟器脚本,走通完整的充电事务流程
- 第四步:加入数据库和简单 Web UI
- 第五步:与真实充电桩联调,或用 SteVe 做交叉验证
9.3 对比研究
- OCPP 1.6 vs 2.0.1:理解协议演进方向(安全、设备管理、ISO 15118)
- OCPP 1.6(桩对云)vs GB/T 27930(车对桩):主公熟悉的国标充电协议,两套协议处于充电通信的不同层级,设计思路的对比很有价值
- Monta vs SteVe vs 自建:理解商业 CSMS 和开源 CSMS 的功能边界
浙公网安备 33010602011771号