轻量实现 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.pswp.cn/pingmian/95082.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 搭建 Solana 区块链开发环境 + Anchor 智能合约完整教程

文章目录简介特征核心概念Solana 的工作原理&#xff08;简单版&#xff09;为什么人们选择 Solana开发环境准备Solana 官网Solana 文档Anchor 文档GithubRust SDK快速安装 Solana&#xff08;推荐&#xff09;单独安装 Solana安装依赖项安装 Solana CLI安装 Anchor CLI安装 AV…

curl 介绍及使用教程

文章目录 什么是 curl? 1. 解析用户输入与初始化 2. 建立网络连接 3. 构建并发送请求 4. 接收并处理响应 5. 清理资源 核心特点总结 基本语法 常用功能及示例 1. 基本 HTTP 请求 2. 发送 GET 请求 3. 发送 POST 请求 4. 设置请求头 5. 处理认证 6. 断点续传 7. 跟随重定向 8. …

【第十一章】Python 队列全方位解析:从基础到实战

Python 队列全方位解析&#xff1a;从基础到实战 本文将从基础概念到高级应用&#xff0c;用 “文字解释 代码示例 图表对比 实战案例” 的方式&#xff0c;全面覆盖 Python 队列知识&#xff0c;零基础也能轻松掌握。 文章目录Python 队列全方位解析&#xff1a;从基础到实…

跨平台开发框架实测:React Native vs Flutter vs Kotlin Multiplatform

本文聚焦 React Native、Flutter 和 Kotlin Multiplatform 三大跨平台开发框架&#xff0c;从性能表现、开发效率、生态系统、跨平台一致性及学习成本五个关键维度展开实测对比。通过具体场景的测试数据与实际开发体验&#xff0c;剖析各框架的优势与短板&#xff0c;为开发者在…

【网弧软著正版】2025最强软著材料AI生成系统,基于GPT5.0

软著材料AI一键生成系统 网址&#xff1a;AI软著材料生成平台 | 一键生成全套软著文档 - 网络弧线 产品简介&#xff1a; 专业的软件著作权材料AI生成平台&#xff0c;基于GPT-5模型开发&#xff0c;自2022年运营至今已服务数万用户成功获得软著证书。输入软件名称即可自动生成…

存储掉电强制拉库引起ORA-01555和ORA-01189/ORA-01190故障处理---惜分飞

机房存储突然掉电导致Oracle数据库访问存储异常,数据库报出大量的ORA-27072: File I/O error,Linux-x86_64 Error: 5: Input/output error,ORA-15081: failed to submit an I/O operation to a disk等错误,实例直接crash Wed Aug 27 07:11:53 2025 Errors in file /u01/app/ora…

R3:适用于 .NET 的新一代响应式扩展库,事件订阅流

R3&#xff1a;适用于 .NET 的新一代响应式扩展库 R3 是 dotnet/reactive&#xff08;.NET 官方响应式扩展&#xff09;与 UniRx&#xff08;适用于 Unity 的响应式扩展&#xff09;的新一代替代方案&#xff0c;支持多种平台&#xff0c;包括 Unity、Godot、Avalonia、WPF、W…

Android Framework打电话禁止播放运营商视频彩铃

文章目录定位Android电话的源码及UI禁止打电话时播放运营商广告视频彩铃运营商视频彩铃framework禁止播放视频彩铃需求&#xff1a;打电话时&#xff0c;对方未接听&#xff0c;这个时候可能会播放运营商的视频彩铃&#xff0c;需求是屏蔽彩铃播放。测试平台&#xff1a;展锐。…

WebIDEPLOY 赋能数字校园建设:智慧管理系统的效能升级与实践路径 —— 以校园资源协同优化构建高效教育生态的探索

一、教育数字化转型中的现实困境&#xff1a;从 "管理孤岛" 到 "效率瓶颈"教育数字化转型的加速推进&#xff0c;让智慧校园建设成为高校提升核心竞争力的关键抓手。但当前校园物联网应用中&#xff0c;一系列痛点逐渐凸显&#xff1a;设备管理呈现 "…

开源AI大模型AI智能名片S2B2C商城小程序赋能下的“信息找人“:人工智能驱动的线下零售精准化革命

摘要&#xff1a;在人工智能技术深度渗透零售行业的背景下&#xff0c;线下零售场景正经历从"人找信息"到"信息找人"的范式转变。本文聚焦开源AI大模型、AI智能名片与S2B2C商城小程序的技术融合&#xff0c;系统分析其在客户定位、行为分析、精准营销等环节…

【第三方网站运行环境测试:服务器配置(如Nginx/Apache)的WEB安全测试重点】

服务器配置安全测试是WEB安全评估的关键&#xff0c;一般关注信息泄露、传输安全、访问控制及资源防护等方面。信息泄露控制 检查服务器响应头是否暴露敏感信息。Server头应去除Nginx/Apache详细版本号&#xff0c;防止攻击者针对特定版本漏洞进行利用。错误页面需自定义&#…

【Hot100】15.三数之和

解法&#xff1a;排序 双指针首先对数组排序&#xff0c;便于后面处理重复元素。第一层循环遍历数组中的每一个元素&#xff0c;作为三元组中的第一个元素 nums[i] &#xff0c;并跳过重复的元素。对于每个 i &#xff0c;使用双指针 l &#xff08;初始为 i1&#xff09;和 r…

Flutter 本地持久化存储:Hive 与 SharedPreferences 实战对比

在移动应用开发中&#xff0c;本地持久化存储是必不可少的功能。无论是保存用户登录状态、应用配置&#xff0c;还是缓存数据&#xff0c;合理选择存储方案都能提高应用的性能与用户体验。在 Flutter 中&#xff0c;常用的本地存储方式主要有两种&#xff1a;SharedPreferences…

Lombok 实用注解深度解析!

目录一、AllArgsConstructor&#xff1a;全参数构造函数生成器1. 基本概念2. 使用示例3. 高级特性4. 注意事项二、RequiredArgsConstructor&#xff1a;必需参数构造函数生成器1. 基本概念2. 使用示例3. 高级特性4. 注意事项三、SneakyThrows&#xff1a;异常处理"偷懒&qu…

Go+Gdal 完成高性能GIS数据空间分析

概要 环境准备 技术流程 一、在golang中如何调用gdal 二、读取数据 三、执行空间分析 四、性能提升 小结 概要 Gdal库可以说是所有gis软件的基础&#xff0c;基本上现在所有的工业gis软件都是基于gdal开发的&#xff0c;其主要包括了栅格处理、矢量处理、坐标系处理所涉及的各类…

【python】python进阶——Lambda 函数

目录 引言 一、简介 1.1 基本语法 1.2 优势 1.3 局限性 二、基本用法 2.1 无参数lambda 函数 2.2 多参数 lambda 函数 三、常见使用场景 3.1 与高阶函数配合使用 3.2 作为排序键 3.3 在 GUI 编程中作为回调函数 3.4 在 Pandas 中的应用 四、高级技巧 4.1 条件表…

基于单片机电动车充电桩/充电车棚环境监测设计

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 随着电动车普及&#xff0c;充电桩的环境安全监测成为重要课题。基于单片机的电动车充电桩环境检…

Linux初始——编译器gcc

编译器gcc编译器编译器自举动静态库动静态库的差异gcc编译器 众所周知&#xff0c;代码运行的前提是经过四个步骤的 预处理&#xff0c;其进行宏替换&#xff0c;去注释&#xff0c;条件编译&#xff0c;头文件展开的工作&#xff0c;在gcc的选项中对应gcc -E&#xff0c;其就…

Three.js + AI预测:在数字孪生中实现数据可视化智能决策

某智慧工厂的数字孪生系统曾陷入尴尬&#xff1a;3D 模型里的生产线数据实时跳动&#xff0c;却没人能预判 “2 小时后哪台机器会停机”。这就像有了高清监控&#xff0c;却不会分析监控画面 ——Three.js 做出的可视化是 “眼睛”&#xff0c;AI 预测才是 “大脑”。不少团队用…

刀客doc:亚马逊持续猛攻程序化广告

文/刀客doc(头条深一度精选作者)一7月的尾声和8月的开端&#xff0c;广告市场见证了两场截然不同的场面。7月31日&#xff0c;亚马逊公布了截至6月30日的2025年第二季度财报。广告业务表现尤为亮眼&#xff1a;单季收入达到157亿美元&#xff0c;同比增长约22%&#xff0c;成为…