轻量实现 OCPP 1.6 JSON 协议(欧洲版)的充电桩调试平台

1 项目概览

1.1 目标与适用场景

1.1.1 简介

本文介绍的开源项目 ocpp_charge,是一个 自研轻量实现 OCPP 1.6 JSON 协议(欧洲版) 的充电桩调试平台。

它没有依赖官方 OCPP 1.6J 库,而是从零实现协议解析与会话管理,适合快速验证桩与平台的互通。

1.1.1.1 读者对象
  • 充电桩厂商研发人员:快速验证桩侧 OCPP 报文是否符合标准。
  • 平台开发人员:快速接入调试桩,便于协议联调。
  • 二次开发工程师:在现有轻量框架上扩展更多业务逻辑。

2 快速上手(教程)

2.1 环境与依赖

2.1.1 基本要求

  • Java JDK 1.8
  • Maven 3.6+
  • 建议内存 ≥ 512MB
2.1.1.1 获取仓库(示例)
bash 复制代码
git clone https://github.com/qyhua0/ocpp_charge.git
cd ocpp_charge

2.1.2 构建与运行

2.1.2.1 构建
bash 复制代码
mvn clean package -DskipTests
2.1.2.2 启动
bash 复制代码
java -jar target/ocpp-server-1.0.0.jar
  • 默认端口:8080

  • WebSocket 地址:

    复制代码
    ws://<server-ip>:8080/ocpp/{chargePointId}

2.2 使用 Web 管理界面

2.2.1 访问

浏览器打开:

复制代码
http://<server-ip>:8080/web

即可查看当前接入的桩、实时报文日志,并能点击按钮启动/停止充电。

2.2.1.1 REST API 示例
  • 远程启动充电:
bash 复制代码
curl "http://<server-ip>:8080/api/ocpp/remoteStart/{cpId}?idTag=ID123&connectorId=1"
  • 远程停止充电:
bash 复制代码
curl "http://<server-ip>:8080/api/ocpp/remoteStop/{cpId}?transactionId=1001"
  • 查询连接状态:
bash 复制代码
curl "http://<server-ip>:8080/api/ocpp/connections"

3 OCPP 报文与调试

3.1 BootNotification 报文示例

3.1.1 桩上报的 BootNotification

json 复制代码
[2, "uuid", "BootNotification", {
  "chargePointVendor": "XQ",
  "chargePointModel": "ocpp_ac_7kw",
  "chargePointSerialNumber": "ks0117100000008",
  "firmwareVersion": "250722"
}]
3.1.1.1 字段说明
  • chargePointVendor 厂商标识
  • chargePointModel 型号
  • serialNumber 桩序列号
  • firmwareVersion 固件版本

3.2 使用 Node.js 模拟桩连接

3.2.1 示例代码

javascript 复制代码
const WebSocket = require('ws');
const ws = new WebSocket('ws://127.0.0.1:8080/ocpp/CP_TEST');

ws.on('open', () => {
  const boot = [2, "req-1", "BootNotification", {
    chargePointVendor: "XQ",
    chargePointModel: "ocpp_ac_7kw"
  }];
  ws.send(JSON.stringify(boot));
  console.log('BootNotification sent');
});

ws.on('message', (msg) => {
  console.log('recv:', msg.toString());
});

3.3 常见交互流程

  1. 建立 WebSocket 连接
  2. 桩发送 BootNotification
  3. 桩周期性发送 Heartbeat / MeterValues
  4. 平台下发 RemoteStart / RemoteStop
  5. 所有报文在 Web 界面实时显示

4 二次开发实战

4.1 项目结构速览

4.1.1 核心包

复制代码
src/main/java
 ├── ws      # WebSocket 服务
 ├── service # 报文处理
 ├── model   # 设备/会话对象
 ├── api     # REST 控制器
 └── util    # 报文工具
4.1.1.1 特点
  • 框架简单,逻辑清晰
  • 支持快速扩展自定义 Action

4.2 新增自定义 Action

4.2.1 修改 OcppService

OcppService.handleCall 中新增分支:

java 复制代码
case "MyCustomAction":
    JSONObject result = new JSONObject();
    result.put("status", "Accepted");
    String resp = OcppMessageUtil.buildCallResult(requestId, result);
    session.sendMessage(resp);
    break;
4.2.1.1 调试建议
  • 利用 Web UI 日志观察报文
  • 使用 Node.js 或 Python 客户端模拟桩
  • 保证自定义字段符合 JSON 规范

5 部署与运维

5.1 测试到生产

5.1.1 建议

  • 使用 WSS + HTTPS
  • 增加认证/鉴权
  • 使用 Redis 管理会话,便于扩展
5.1.1.1 日志与监控
  • 建议接入 ELK 或 Prometheus
  • 对交易相关报文做好幂等校验

6 常见问题

6.1 无法建立 WebSocket

  • 确认 URL 正确:/ocpp/{chargePointId}
  • 检查端口是否开放

6.2 远程命令无响应

  • 确认桩在线
  • 查看报文日志是否下发成功

6.3 BootNotification 解析失败

  • 检查字段拼写是否符合协议

7 结语与贡献

7.1 许可与参与

本项目采用 MIT License ,欢迎提交 Issue 与 PR。

项目地址:https://github.com/qyhua0/ocpp_charge

相关推荐
初次攀爬者21 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺21 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart1 天前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
Nyarlathotep01131 天前
SpringBoot Starter的用法以及原理
java·spring boot
dkbnull2 天前
深入理解Spring两大特性:IoC和AOP
spring boot
洋洋技术笔记2 天前
Spring Boot条件注解详解
java·spring boot
洋洋技术笔记3 天前
Spring Boot配置管理最佳实践
spring boot
用户8307196840824 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
大道至简Edward4 天前
Spring Boot 2.7 + JDK 8 升级到 Spring Boot 3.x + JDK 17 完整指南
spring boot·后端
洋洋技术笔记4 天前
Spring Boot启动流程解析
spring boot·后端