OCPP WebSocket 连接失败排查

先判断失败发生在“浏览器建立连接”“WebSocket 握手”“OCPP 注册”还是“业务报文”阶段,通常比反复点击 Connect 更快定位问题。

打开模拟器对照排查 · 视频教程

1. 地址和桩 ID 是否重复

OCPP Server 填基础端点,例如 ws://localhost:8080/steve/websocket/CentralSystemService;ChargePoint ID 单独填写 CP001。工具会自动拼接 /CP001。不要将完整地址再次与桩 ID 拼接,也不要在基础地址末尾额外加斜杠。

不同服务端路径可能不同,这个示例仅用于说明 SteVe 风格的地址。必须使用自己部署时配置的端口和路径。

2. 浏览器能否访问目标服务器

localhost 是运行浏览器的电脑,不是 devtest.run 的服务器。如果服务端在另一台电脑或容器中,检查主机地址、端口映射、服务监听地址和防火墙策略。浏览器弹出本地网络访问权限提示时,按实际测试需求决定是否授权。

当前工具使用 HTTP 页面兼容 ws:// 测试端点。HTTPS 页面连接 ws:// 可能受到混合内容限制;wss:// 则需要有效的 TLS 配置。不要通过关闭浏览器安全机制或忽略证书警告解决问题;应修复证书或使用合适的测试客户端。

3. 查看握手状态

打开浏览器开发者工具,进入 Network,选择 WS,点击对应连接;同时查看服务端访问日志。

  • 没有出现请求:检查页面 Console 是否存在 URL 格式错误、浏览器策略限制或脚本异常。
  • 404:优先核对路径、反向代理路由和桩 ID 拼接。
  • 401 / 403:检查认证、桩登记、Origin 允许范围或访问策略;状态码本身不能确定唯一原因。
  • 502 / 504:检查代理能否访问上游服务,以及超时设置。
  • 101 Switching Protocols:握手已升级,继续排查 OCPP 子协议与注册,不代表整条业务链路已经成功。

浏览器 WebSocket 错误事件通常不给出完整原因,需要结合握手信息和服务端日志。1006 是异常关闭提示,不能只凭这个数字判断是认证还是网络问题。

4. 确认使用 OCPP 1.6J

模拟器发起连接时提供 ocpp1.6 子协议(也保留了旧版 ocpp1.5 候选)。本教程要求服务端选择 ocpp1.6。检查握手响应的 Sec-WebSocket-Protocol。

SOAP 端点、OCPP 2.0.1 端点与 OCPP 1.6J 的 JSON 报文不能混用。如果服务端强制使用自定义认证头或客户端证书,当前浏览器工具无法配置这些选项,应使用匹配认证方式的客户端。

5. 握手后查看 BootNotification

连接打开后模拟器自动发送 BootNotification。检查桩 ID 是否已登记,以及响应 status 是否为 Accepted。Pending 或 Rejected 属于注册阶段的问题,不等同于 WebSocket 握手失败。当前工具在非 Accepted 响应后会断开,调整服务端登记后再手动重连。

6. 能连接但交易失败

先手动测试 Heartbeat,再测试 Authorize,最后测试 Start Transaction;每一步等待响应。确认卡号获准使用、connectorId 有效、时间为 UTC、读数符合预期,并检查 StartTransaction 响应中的 idTagInfo。不要仅根据界面状态判断成功。

查看核心报文示例。如果问题是连接一段时间后断开,还应核对代理空闲超时与心跳日志。

7. 反馈时提供哪些信息

记录问题发生时间、浏览器版本、失败阶段、握手状态码、脱敏后的请求和响应,以及对应的服务端错误。分享前移除认证凭据、真实卡号、内部地址和其他敏感信息;不要直接公开完整日志。

重新完成一次最小测试 · 返回模拟器 · SteVe 项目文档