littlejazzcat

导航

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 新增/改进)

  1. 同时支持 SOAPJSON 两种消息格式
  2. Smart Charging(智能充电):支持负载均衡和充电曲线(Charge Profile)管理
  3. 本地列表管理(Local Auth List Management):支持充电桩本地白名单/黑名单
  4. 额外的充电桩状态上报
  5. 消息发送请求(如请求 CP 时间或状态)
  6. 多项规范细节改进和勘误

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 引入的安全增强:

  1. 安全连接建立(Secure connection setup)
  2. 安全事件与日志(Security events/logging)
  3. 安全固件更新(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 官网下载:

3.2 认证与测试工具

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 的商业化版本为 Powerfillhttps://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 学习路线

  1. 阅读 mobilityhouse/ocpp 官方文档(仅 5 页,1 小时内可通读):
    • 安装 → Server 端示例 → Client 端示例 → 调试方法
  2. 获取官方规范 PDF:从 OCA 官网下载 OCPP 1.6 Edition 2 完整规范(含勘误),作为协议细节的权威参考
  3. 参考 SteVe 源码:即使是 Python 技术栈,SteVe 的数据库设计、UI 结构、消息处理流程都是绝佳的架构参考
  4. 阅读安全白皮书:OCPP 1.6 Security Whitepaper 第4版

9.2 动手实践路线

  1. 第一步pip install ocpp websockets,跑通文档中的 Server + Client 示例(BootNotification 握手)
  2. 第二步:扩展 Server 端,实现 Core Profile 全部消息处理器
  3. 第三步:编写充电桩模拟器脚本,走通完整的充电事务流程
  4. 第四步:加入数据库和简单 Web UI
  5. 第五步:与真实充电桩联调,或用 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 的功能边界

posted on 2026-07-09 17:35  jzcat  阅读(18)  评论(0)    收藏  举报