轻量实现 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

相关推荐
蒋星熠1 天前
Spring Boot 3.x 微服务架构实战指南
人工智能·spring boot·微服务·性能优化·架构·云计算·量子计算
小蒜学长1 天前
汽车专卖店管理系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·汽车
柯南二号1 天前
【Java后端】SpringBoot配置多个环境(开发、测试、生产)
java·开发语言·spring boot
C++chaofan1 天前
Spring Task快速上手
java·jvm·数据库·spring boot·后端·spring·mybatis
三贝2 天前
Java面试现场:Spring Boot+Redis+MySQL在电商场景下的技术深度剖析
spring boot·redis·mysql·微服务·分布式事务·java面试·电商系统
白露与泡影2 天前
SpringBoot 自研运行时 SQL 调用树,3 分钟定位慢 SQL!
spring boot·后端·sql
jay神2 天前
基于SpringBoot + Vue 的宠物领养管理系统
vue.js·spring boot·宠物
毕设源码-郭学长2 天前
【开题答辩全过程】以 基于vue+springboot的校园疫情管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端