白皮书
车云灵活数采方案:释放数据价值,加速智能创新 →

使用 EMQX 接入 OCPP 设备:构建新能源车充电网络

EMQX Team
2024-8-1
使用 EMQX 接入 OCPP 设备:构建新能源车充电网络

OCPP 简介

开放充电桩协议(Open Charge Point Protocol, OCPP)是一种应用协议,旨在实现电动汽车充电站与中央管理系统之间的通信,通过交换充电会话、状态更新和其他操作数据,促进充电业务的高效管理。

作为电动汽车充电站与中央管理系统之间的事实标准,OCPP 在电动汽车充电行业的采用率显著上升。许多国家和公司正在将 OCPP 纳入其基础设施,以确保电动汽车充电网络的无缝衔接和扩展。

OCPP 协议标准化了信息交换,支持多种操作:

  1. 启动通知:充电桩连接到中央系统时发送启动通知,进行自我注册并提供初始状态信息。
  2. 心跳:充电桩定期向中央系统发送心跳信息,以表明其仍处于连接和运行状态。
  3. 授权:充电会话开始前,充电桩向中央系统发送授权请求,以验证用户或车辆身份。
  4. 启动和停止交易:充电桩报告充电会话的开始和结束,提供仪表读数、会话持续时间和能源消耗等数据。
  5. 状态通知:充电桩发送状态更新,告知中央系统其当前状态,如可用、占用或故障。
  6. 固件管理:中央系统可通过发送更新命令来管理充电桩的固件。
  7. 数据传输:该协议支持在充电桩和中央系统之间传输各种运行数据,以便进行监控和分析。

这些操作可确保中央系统能够有效地监测、控制和管理电动汽车充电站网络。

OCPP 协议通过两种规范在网络上传输信息:

  • OCPP-J:通过 WebSockets 使用 JSON 进行 OCPP 通信。具体的 OCPP 版本以 J 扩展名标示,如 OCPP1.6J 表示 1.6 版的 JSON/WebSockets 实现。
  • OCPP-S:通过 SOAP 和 HTTP 进行 OCPP 通信。从 1.6 版本开始,S 必须明确标示。旧版本默认使用 S(除非另有说明),例如 OCPP 1.5 与 OCPP1.5S 相同。

OCPP-J 规范中的 BootNotification.req 消息格式如下:

[
  // MessageTypeId, 2 表示这是客户端向服务器发送的请求消息
  2,
  // UniqueId,消息的唯一 ID,用于标识消息
  "19223201",
  // 操作,表示传输的信息类型
  "BootNotification",
  // 有效载荷,信息正文
  {"chargePointVendor": "VendorX", "chargePointModel": "SingleSocketCharger"}
]

EMQX 5 中的 OCPP 网关

EMQX 是一个可以无限连接、任意集成、随处运行的大规模分布式物联网 MQTT 接入平台。它提供了一个多协议网关,用于处理所有非 MQTT 协议的连接、身份验证和消息收发。

有关 EMQX 多协议网关的更多信息,请参阅:EMQX 5.0 全新网关框架:轻松实现多物联网协议接入

EMQX 5 中提供了一个支持 OCPP-J 1.6 协议的 OCPP 网关:

OCPP 网关

其工作原理如下:

  • OCPP 网关启动一个 WebSocket 服务器端口,处理所有充电桩设备的连接、信息接收和信息传送。
  • 第三方服务是由用户实现的后端服务,它根据 MQTT 消息传递模式处理 OCPP 请求。
  • OCPP 网关将来自设备的所有上行信息转换为相应的 MQTT 主题和有效载荷,并将其发送至第三方服务。同时,它接收来自第三方服务的 MQTT 控制消息,将其转换为 OCPP 格式消息,并发送到相应的充电桩。

本文将介绍如何使用 EMQX 5.0 中的 OCPP 网关集成 OCPP 设备,实现不同制造商和服务提供商之间的互操作性。

配置 OCPP 网关

首先,我们要安装最新的 EMQX Enterprise。请参阅 EMQX Enterprise 入门指南| EMQX Enterprise 文档

或者,也可以直接使用以下命令,通过 Docker 启动最新版本的 EMQX 容器:

docker run -p 18083:18083 -p 1883:1883 -p 33033:33033 emqx/emqx-enterprise:latest

在 EMQX 仪表板,点击左侧导航菜单中的管理 -> 网关。在网关页面上,列出了所有支持的网关。找到 OCPP,然后单击操作列中的 配置。接下来,将进入初始化 OCPP 页面。

初始化 OCPP 页面

为了简化配置过程,EMQX 为网关页面上的所有必填字段提供了默认值。我们只需要:

  1. 消息格式检查改为Disable
  2. 基本参数选项卡中点击下一步,接受所有默认设置。
  3. 然后,您将被引导至监听器选项卡,EMQX 已预先配置了一个 33033 端口的 WebSocket 监听器。再次单击下一步确认设置。
  4. 最后,单击启用按钮激活 OCPP 网关。

完成网关激活过程后,返回网关页面,可以看到 OCPP 网关现在显示启用状态。

OCPP 网关启用成功

连接 OCPP 客户端

OCPP 网关启动后,可以使用 OCPP 客户端工具来测试连接,并验证设置是否正确。

以 ocpp-go 为例,以下是如何在 EMQX 中将 ocpp-go 客户端连接到 OCPP 网关的步骤。

首先,准备一个 MQTT 客户端用于与 OCPP 网关交互。例如,使用 MQTTX,配置其连接到 EMQX 并订阅主题 ocpp/#

MQTTX

然后,运行 ocpp-go 客户端并与 OCPP 网关建立连接。

:请将以下命令中的 <host> 替换为 EMQX 服务器的地址。

docker run -e CLIENT_ID=chargePointSim -e CENTRAL_SYSTEM_URL=ws://<host>:33033/ocpp -it --rm --name charge-point ldonini/ocpp1.6-charge-point:latest

连接成功后,将看到类似以下的日志输出:

INFO[2023-12-01T03:08:39Z] connecting to server logger=websocketINFO[2023-12-01T03:08:39Z] connected to server as chargePointSim logger=websocketINFO[2023-12-01T03:08:39Z] connected to central system at ws://172.31.1.103:33033/ocppINFO[2023-12-01T03:08:39Z] dispatched request 1200012677 to server logger=ocppj

接下来,检查 MQTTX 是否收到如下格式的消息:

Topic: ocpp/cp/chargePointSim
Payload
{
  "UniqueId": "1200012677",
  "Payload": {
    "chargePointVendor": "vendor1",
    "chargePointModel": "model1"
  },
  "Action": "BootNotification"
}

此消息表示 ocpp-go 客户端已连接到 OCPP 网关并发起了 BootNotification 请求。

在 MQTTX 中,向主题 ocpp/cs/chargePointSim 发送包含以下内容的消息。

:请将 UniqueId 替换为上一条消息中收到的 UniqueId。

{
  "MessageTypeId": 3,
  "UniqueId": "***",
  "Payload": {
    "currentTime": "2023-12-01T14:20:39+00:00",
    "interval": 300,
    "status": "Accepted"
  },
  "Action": "BootNotification"
}

随后,MQTTX 将收到一条 StatusNotification 状态报告。这表明 OCPP 客户端已成功与 OCPP 网关建立连接。

Topic: ocpp/cp/chargePointSim
​
Payload:
{
  "UniqueId": "3062609974",
  "Payload": {
    "status": "Available",
    "errorCode": "NoError",
    "connectorId": 0
  },
  "MessageTypeId": 2,
  "Action": "StatusNotification"
}

至此,OCPP 客户端已成功连接到 EMQX 的 OCPP 网关,并与第三方服务进行了通信。

结语

EMQX 5.0 的 OCPP 网关可以实现 OCPP 设备的轻松接入,为构建统一的电动汽车充电网络提供了便利。企业从而可以高效监控和管理其电动汽车充电基础设施,为实现更具可持续性和互联性的未来铺平道路。