自定义组件pcall sensor 组件中RPC方法调用参数问题

我在自定义的组件中添加了个ipmi命令,在其回调中,去pcall Sensor组件中新增的一个方法

local err, repoResult = self.bus:pcall("bmc.kepler.sensor", "/bmc/kepler/Systems/ThresholdSensorMgmts/1",
                    "bmc.kepler.Systems.ThresholdSensorMgmt", "CustomSetSensorThreshold", "a{ss}ay",
                    context.new(), byte_array)

这个地方无论使用ipmi回调的ctx还是用context.new() 还是传0 都会有错误返回类似下面的,推测ctx参数的格式不对或者权限问题

sensor组件新增的方法 部分代码 如下:

self:ImplThresholdSensorMgmtThresholdSensorMgmtCustomSetSensorThreshold(function(obj, ctx, ...)
        log:info("---- ctx start ----")
        for k, v in pairs(ctx) do
            local v_type = type(v)
            if v_type == "table" then
                log:info("Key: %s, Value: <table>", k)
            elseif v_type == "function" then
                log:info("Key: %s, Value: <function>", k)
            else
                log:info("Key: %s, Value: %s (%s)", k, tostring(v), v_type)
            end
        end
        log:info("---- ctx end ----")
        

现在就是不知道 这个ctx到底该怎么传才能正确呢?

我通过web接口 调 自定义方法 会返回下面这些 字段或者属性

1970-01-05 03:04:07.575258 byo_czcbmc INFO: byo_czcbmc_app.lua(587): Key: Auth, Value: 1 (string)
1970-01-05 03:04:07.577183 byo_czcbmc INFO: byo_czcbmc_app.lua(587): Key: ClientAddr, Value: 192.168.150.228 (string)
1970-01-05 03:04:07.577708 byo_czcbmc INFO: byo_czcbmc_app.lua(587): Key: Privilege, Value: 511 (string)
1970-01-05 03:04:07.579361 byo_czcbmc INFO: byo_czcbmc_app.lua(587): Key: Interface, Value: WEB (string)
1970-01-05 03:04:07.579938 byo_czcbmc INFO: byo_czcbmc_app.lua(587): Key: UserName, Value: Administrator (string)
1970-01-05 03:04:07.581334 byo_czcbmc INFO: byo_czcbmc_app.lua(590): ---- ctx end ----

现在的问题我自定义组件中 通过ipmi命令 去出发 pcall到sensor中这个自定义方法的时候 这个参数怎么传 怎么定义?

如果需要调用其他组件的资源接口,建议通过这篇文档中的方式进行调用

MDS声明依赖后,通过自动生成代码的函数进行调用,并将ipmi中的ctx传入即可

就是按照上面的文档开发的,如果直接使用ipmi命令的ctx如下 error返回6aj.并且 被调用的方法 不执行,如果换成 context.new()的话就报 最初提问的时候的错误 但不影响被调用方法的执行 只是不能返回数据了 因为有error


ctx打印如下:

附上资源树配置

{
    "bmc.kepler.Systems.ThresholdSensorMgmt": {
        "properties": {},
        "methods": {
            "CustomSetSensorThreshold": {
                "description": "设置sensor阈值",
                "req": {
                    "InData": {
                        "baseType": "U8[]",
                        "description": "写入的数据内容"
                    }
                },
                "rsp": {
                    "Result": {
                        "baseType": "U8",
                        "description": "设置sensor阈值结果,失败返回0;成功返回1"
                    }
                }
            }
        }
    }
}

如下,调用目前资源树上有的方法 也是如上调用的 都没什么问题 ,但现在的方法是自己写的 就不行了呢

local err = self.bus:pcall(
        "bmc.kepler.hwproxy",
        "/bmc/kepler/Chip/Complex/Chip_CPLD_0102",
        "bmc.kepler.Chip.BlockIO",
        "Write",
        "a{ss}uay",
        context.new(),
        addr,
        byte_array
    )

上下文要求键值对全为string类型,看起来用context.new()并没有什么问题,请检查一下回调方法的定义与其余参数的传递,报错看起来是封装参数时出现的问题