VOLTTRON actuator agent调度请求MALFORMED_REQUEST错误如何排查
错误原因
- 核心问题是调用
platform.actuator的request_new_scheduleRPC接口时,传入的调度请求参数peroidic_schedule_request格式不符合接口要求 - VOLTTRON Actuator的
request_new_schedule接口要求每个待调度的设备条目必须是三元组格式:(设备主题路径, 调度起始时间字符串, 调度结束时间字符串),你当前传入的是纯设备路径字符串列表,Actuator尝试把每个字符串解包为3个值时抛出了对应异常 - 你后续
get_multiple_points可以正常获取数据,是因为该接口不需要依赖之前的调度也能执行单次点位读取,所以不影响数据返回,仅调度请求本身执行失败。
修复方案
将peroidic_schedule_request的每个元素调整为三元组,把你提前生成的str_start和str_end补充进参数即可:
_now = get_aware_utc_now() str_start = format_timestamp(_now) _end = _now + td(seconds=10) str_end = format_timestamp(_end) # 修正后的调度请求参数,每个条目为(设备路径, 开始时间, 结束时间)三元组 peroidic_schedule_request = [ ("slipstream_internal/slipstream_hq/1100", str_start, str_end), # AHU ("slipstream_internal/slipstream_hq/5231", str_start, str_end), # eGuage Main ("slipstream_internal/slipstream_hq/5232", str_start, str_end), # eGuage RTU ("slipstream_internal/slipstream_hq/5240", str_start, str_end) # eGuage PV ] # send the request to the actuator result = self.vip.rpc.call('platform.actuator', 'request_new_schedule', self.core.identity, 'my_schedule', 'HIGH', peroidic_schedule_request).get(timeout=90) _log.debug(f'[Conninuous Roller Agent INFO] - ACTUATOR SCHEDULE EVENT SUCESS {result}')
补充说明
- 调度申请成功后你将拿到对应设备10秒的独占访问权限,这段时间内你对这些设备的读写操作不会和其他调度任务冲突
- 如果不需要独占调度权限、仅需单次读取点位,你可以直接省略
request_new_schedule的调用,只用get_multiple_points就能满足需求。
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

