当前位置: 首页 > news >正文

轻量实现 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 获取仓库(示例)
git clone https://github.com/qyhua0/ocpp_charge.git
cd ocpp_charge

2.1.2 构建与运行

2.1.2.1 构建
mvn clean package -DskipTests
2.1.2.2 启动
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 示例
  • 远程启动充电:
curl "http://<server-ip>:8080/api/ocpp/remoteStart/{cpId}?idTag=ID123&connectorId=1"
  • 远程停止充电:
curl "http://<server-ip>:8080/api/ocpp/remoteStop/{cpId}?transactionId=1001"
  • 查询连接状态:
curl "http://<server-ip>:8080/api/ocpp/connections"

3 OCPP 报文与调试

3.1 BootNotification 报文示例

3.1.1 桩上报的 BootNotification

[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 示例代码

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 中新增分支:

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

http://www.xdnf.cn/news/1421695.html

相关文章:

  • Google Gemini 2.5 Flash Image(Nano-Banana)震撼登场!人人都能免费用的AI修图神器!
  • SQL执行过程及原理详解
  • AI + 机器人:当大语言模型赋予机械 “思考能力”,未来工厂将迎来怎样变革?
  • 三、SVN实践练习指南
  • 轻量级注意力模型HOTSPOT-YOLO:无人机光伏热异常检测新SOTA,mAP高达90.8%
  • Swift 解法详解:LeetCode 368《最大整除子集》
  • 【牛客JZ31】—栈的压入弹出序列判断算法详解
  • FPGA中的亚稳态与跨时钟域数据撕裂现象
  • 眼底病害图像分类数据集
  • MYSQL速通(4/5)
  • KL Loss
  • Python OpenCV图像处理与深度学习:Python OpenCV图像滤波入门
  • [系统架构设计师]论文(二十三)
  • 基于SpringBoot+MYSQL开发的师生成果管理系统
  • 美术馆预约小程序|基于微信小程序的美术馆预约平台设计与实现(源码+数据库+文档)
  • zotero.sqlite已损坏
  • 第9篇:监控与运维 - 集成Actuator健康检查
  • 『C++成长记』vector模拟实现
  • 车载总线架构 --- 车载LIN总线传输层概述
  • 百胜软件获邀出席第七届中国智慧零售大会,智能中台助力品牌零售数智变革
  • C++ 虚继承:破解菱形继承的“双亲困境”
  • 【macOS】垃圾箱中文件无法清理的--特殊方法
  • Linux | 走进网络世界:MAC、IP 与通信的那些事
  • PyTorch 实战(3)—— PyTorch vs. TensorFlow:深度学习框架的王者之争
  • mysql中如何解析某个字段是否是中文
  • 攻防演练笔记
  • Frida Hook API 转换/显示堆栈
  • 【数学建模学习笔记】缺失值处理
  • 数学分析原理答案——第七章 习题13
  • 文件夹上传 (UploadFolder)