当前位置: 首页 > 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.dtcms.com/a/362340.html

相关文章:

  • AI使用指南:9月开学季,自动生成教学PPT
  • C++ 用于运行时类型识别的typeinfo库使用指南
  • 飞致云开源社区月度动态报告(2025年8月)
  • 苍穹外卖项目实战(日记十三)-记录实战教程及问题的解决方法-(day3-5) 修改菜品功能实现
  • C# FlaUI win 自动化框架,介绍
  • 用只能以关键字指定和只能按位置传入的参数来设计清晰的接口(Effective Python 第25条)
  • 利用 DrissionPage 精准获取淘宝商品描述:Python 爬虫实战指南
  • shell之扩展
  • 奇瑞QQ的后轮制动器设计cad+三维图+设计说明书
  • 【Java】谈谈IdentityHashMap
  • 前阿里专家揭秘:你对中国十大GEO专家的认知,99%都是错的
  • 苹果ipa应用安装包ios系统闪退问题
  • 携程旅行网景区,评论数据爬虫项目数据库保存附源码
  • 需求工程——你真的懂吗
  • C 基础(1) - 初识C语言
  • 在Docker容器中运行Windows:Dockur Windows项目全面解析
  • 机器翻译:python库PyGTranslator的详细使用
  • 身份证识别及信息核验 API 对接说明
  • 手写MyBatis第47弹:Interceptor接口设计与Invocation上下文传递机制--MyBatis动态代理生成与方法拦截的精妙实现
  • AI公共数据分析完整实战教程:从原始数据到商业洞察【网络研讨会完整回放】
  • AR-LSAT 推理任务全解析:从逻辑推理到类比推理的挑战
  • 【WIFI电表】物联网无线通讯光伏储能三相单相智能电表
  • 【HarmonyOS】一步解决弹框集成-快速弹框QuickDialog使用详解
  • Hello World背后的秘密:详解 C++ 编译链接模型
  • FPGA|Quartus II 中pll IP核的具体使用方法
  • Redis 的链表:像智能文件夹一样灵活的列表结构
  • 【题解 | 两种做法】洛谷 P4208 [JSOI2008] 最小生成树计数 [矩阵树/枚举]
  • FDTD_梯度波导学习(1)
  • 8.5 循环神经网络的从零开始实现
  • 二维元胞自动机:从生命游戏到自复制系统的计算宇宙