OCPP 2.0.1 协议网关实战:基于EMQX 5.x的3步配置与WebSocket连接测试
在电动汽车充电基础设施快速发展的今天,OCPP(Open Charge Point Protocol)作为充电桩与中央管理系统之间的标准通信协议,其重要性日益凸显。本文将聚焦于如何利用开源MQTT Broker EMQX快速搭建一个OCPP 2.0.1协议网关,为物联网平台开发者和充电桩系统集成工程师提供一套完整的工程化部署方案。
1. 环境准备与EMQX安装
在开始配置OCPP网关之前,我们需要确保基础环境已经就绪。EMQX作为一款高性能的分布式MQTT消息服务器,能够轻松处理海量设备连接和消息路由。
1.1 系统要求
- 操作系统:推荐使用Linux发行版(如Ubuntu 20.04+或CentOS 7+)
- 硬件配置:
- 至少2核CPU
- 4GB内存
- 10GB可用磁盘空间
- 网络:开放33033端口(WebSocket默认端口)
1.2 安装EMQX 5.x
EMQX提供了多种安装方式,这里我们以Ubuntu系统为例,使用官方仓库安装:
# 添加EMQX仓库 curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash # 安装EMQX sudo apt-get update sudo apt-get install emqx # 启动EMQX服务 sudo systemctl start emqx # 设置开机自启 sudo systemctl enable emqx安装完成后,可以通过以下命令检查服务状态:
sudo systemctl status emqx如果一切正常,您应该能看到类似如下的输出:
● emqx.service - EMQX Broker Loaded: loaded (/lib/systemd/system/emqx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-12-04 10:23:45 UTC; 1min 30s ago Docs: https://www.emqx.io/docs/en/v5.0/1.3 访问EMQX Dashboard
EMQX提供了一个直观的Web管理界面,默认监听18083端口。您可以通过浏览器访问:
http://<your-server-ip>:18083默认用户名和密码为:
- 用户名:admin
- 密码:public
首次登录后,建议立即修改默认密码以提高安全性。
2. OCPP网关配置
EMQX 5.x版本原生支持OCPP 1.6-J协议网关功能,我们可以通过简单的配置使其支持OCPP 2.0.1协议。
2.1 启用OCPP网关
在EMQX Dashboard中,按照以下步骤操作:
- 左侧导航栏点击管理→网关
- 在网关列表中找到OCPP并点击配置
- 在基本配置页面,保持默认设置并点击下一步
- 在监听器页面,确认WebSocket监听器已启用(默认端口33033)
- 点击启用按钮激活OCPP网关
注意:如果您使用的是集群部署,这些配置将自动同步到所有节点。如果只需要在单个节点上配置,请修改
/etc/emqx/emqx.conf文件。
2.2 关键配置参数说明
OCPP网关有几个重要参数需要了解:
| 参数 | 默认值 | 说明 |
|---|---|---|
mountpoint | ocpp/ | 消息主题前缀,用于隔离不同协议的消息 |
listeners.ws.bind | 33033 | WebSocket监听端口 |
listeners.ws.path | /ocpp | WebSocket连接路径 |
heartbeat_interval | 60 | 心跳检测间隔(秒) |
message_format_check | disable | 消息格式检查策略 |
对于OCPP 2.0.1,建议将message_format_check设置为upstream_only,仅检查上行消息格式:
{ "message_format_check": "upstream_only" }2.3 通过REST API配置
除了使用Dashboard,您也可以通过EMQX的REST API进行配置:
curl -X 'PUT' 'http://127.0.0.1:18083/api/v5/gateways/ocpp' \ -u admin:public \ -H 'Content-Type: application/json' \ -d '{ "name": "ocpp", "enable": true, "mountpoint": "ocpp/", "listeners": [ { "type": "ws", "name": "default", "bind": "33033", "websocket": { "path": "/ocpp" } } ] }'3. 连接测试与验证
配置完成后,我们需要验证OCPP网关是否正常工作。这里我们使用ocpp-go客户端进行测试。
3.1 准备测试环境
首先,确保您已安装Docker,然后运行以下命令启动测试客户端:
docker run -e CLIENT_ID=chargePointSim \ -e CENTRAL_SYSTEM_URL=ws://<your-emqx-ip>:33033/ocpp \ -it --rm --name charge-point \ ldonini/ocpp1.6-charge-point:latest将<your-emqx-ip>替换为您的EMQX服务器IP地址。
3.2 监控MQTT消息
为了观察通信过程,我们可以使用MQTT客户端(如MQTTX)订阅相关主题:
- 连接EMQX服务器
- 订阅主题:
ocpp/cp/#(充电桩到中心系统) - 订阅主题:
ocpp/cs/#(中心系统到充电桩)
3.3 验证通信流程
成功连接后,您应该能看到类似如下的日志输出:
INFO[2023-12-04T10:45:22Z] connecting to server logger=websocket INFO[2023-12-04T10:45:22Z] connected to server as chargePointSim logger=websocket INFO[2023-12-04T10:45:22Z] connected to central system at ws://172.31.1.103:33033/ocpp在MQTT客户端中,您将看到类似如下的消息:
{ "UniqueId": "1200012677", "Payload": { "chargePointVendor": "vendor1", "chargePointModel": "model1" }, "Action": "BootNotification" }3.4 模拟中心系统响应
为了完成完整的通信测试,我们可以通过MQTT客户端向充电桩发送响应:
{ "MessageTypeId": 3, "UniqueId": "1200012677", "Payload": { "currentTime": "2023-12-04T10:48:22+00:00", "interval": 300, "status": "Accepted" }, "Action": "BootNotification" }发送到主题:ocpp/cs/chargePointSim
3.5 高级测试场景
对于更复杂的测试场景,您可以模拟以下OCPP 2.0.1特有功能:
- 智能充电:通过
ChargingProfile消息动态调整充电功率 - 即插即充:结合ISO 15118协议实现无感认证
- 安全通信:测试TLS加密连接(需配置证书)
4. 生产环境优化建议
在实际部署中,为了确保系统的稳定性和安全性,建议考虑以下优化措施:
4.1 安全加固
- 启用TLS加密:为WebSocket连接配置SSL证书
- 认证与授权:配置客户端认证,防止未授权访问
- 防火墙规则:限制33033端口的访问来源
4.2 性能调优
- 连接池配置:根据预期负载调整EMQX连接池大小
- 集群部署:对于大规模部署,考虑使用EMQX集群
- 监控告警:集成Prometheus和Grafana监控关键指标
4.3 高可用设计
- 数据库集成:将EMQX与PostgreSQL或MySQL集成,持久化会话数据
- 备份策略:定期备份EMQX配置和网关状态
- 灾备方案:设计跨可用区的灾备方案
通过以上步骤,您已经成功搭建了一个基于EMQX 5.x的OCPP 2.0.1协议网关,并完成了基本的连接测试。这套方案不仅适用于开发测试环境,经过适当优化后也能满足生产环境的需求。