You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于PyPi OCPP v1.6J的模拟器接收TriggerMessage时触发错误

解决OCPP模拟器无法接收TriggerMessage请求的问题

我来帮你排查这个问题,从错误信息和代码片段来看,有两个核心问题导致了当前的报错:

1. 参数命名不匹配(拼写+格式错误)

PyOCPP库在处理请求时,会自动将Payload中的驼峰命名字段(比如requestedMessage、connectorId)转换为蛇形命名(requested_message、connector_id)。但你的处理函数存在两个问题:

  • 参数名用了驼峰格式(requestedMessage),和库转换后的蛇形名不匹配;
  • 拼写错误:把connectorId写成了conectorId(少了一个字母n)。

这就导致库在传递参数时,找不到对应的函数参数,抛出missing required positional arguments的错误。

2. 无效的双重Return语句

你的函数里写了两个return语句:第一个return call.TriggerMessagePayload(...)会直接终止函数执行,后面返回响应的return call_result.TriggerMessagePayload(...)永远不会被执行,这会导致无法正确返回TriggerMessage的处理结果。


修正后的代码

from ocpp.v16 import call_result
from ocpp.v16.enums import Action, TriggerMessageStatus

class ChargePoint(cp):
    @on(Action.TriggerMessage)
    def on_trigger_message(self, requested_message, connector_id=None, **kwargs):
        # 在这里添加触发对应消息的逻辑,比如触发Heartbeat
        # 示例:如果请求的是Heartbeat,发送Heartbeat消息
        if requested_message == "Heartbeat":
            # 调用你已实现的Heartbeat发送方法,比如:
            # await self.send_heartbeat()
            pass

        # 返回正确的TriggerMessage响应
        return call_result.TriggerMessagePayload(
            status=TriggerMessageStatus.accepted
        )

关键修正点说明

  • 参数命名修正:将参数改为蛇形命名requested_message和connector_id,和库的自动转换规则匹配;给connector_id设置默认值None,因为OCPP 1.6J中该字段是可选的;
  • 移除无效Return:只保留返回处理结果的return语句,确保CMS能收到accepted的响应;
  • 添加业务逻辑:在函数中加入触发对应消息的代码(比如发送Heartbeat),完成TriggerMessage的核心功能。

内容的提问来源于stack exchange,提问作者vijayakumar sargunam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:08:24