VOLTTRON自定义Agent发布数据到消息总线时topic报错如何解决?
问题解决方法
报错原因
volttron.platform.messaging.topics 仅内置了VOLTTRON平台预设的通用topic常量,你自定义的故障分类FAULTS_FC1不在预置常量列表中,因此触发AttributeError。
关于自定义topic的说明
VOLTTRON的消息总线topic完全支持自定义,不需要强制使用平台预置的topics常量,你可以按照业务需求自由拼接符合分层逻辑的topic字符串。
修复方案
1. 直接替换topic拼接逻辑
将原有publish调用中的topics.FAULTS_FC1替换为自定义的字符串即可,推荐遵循分层命名规范方便后续订阅、过滤和转发:
self.vip.pubsub.publish( peer="pubsub", # 自定义分层topic:数据类别/故障类型/设备ID topic=f"faults/fc1/{self.ahu_instance_id}", headers={ headers.TIMESTAMP: utils.format_timestamp(utils.get_aware_utc_now()) }, message=int(fdd_check), )
2. 可选:统一管理自定义topic常量
如果后续有多处使用同类型自定义topic,可以在代码开头统一定义常量,降低后续维护成本:
# 代码导入部分后添加自定义topic常量 CUSTOM_FAULT_TOPIC_PREFIX = "faults" FC1_FAULT_TOPIC_PREFIX = f"{CUSTOM_FAULT_TOPIC_PREFIX}/fc1" # 调用时直接使用常量拼接 self.vip.pubsub.publish( peer="pubsub", topic=f"{FC1_FAULT_TOPIC_PREFIX}/{self.ahu_instance_id}", headers={ headers.TIMESTAMP: utils.format_timestamp(utils.get_aware_utc_now()) }, message=int(fdd_check), )
额外注意事项
如果需要通过Forward Agent将自定义故障数据转发到VOLTTRON Central实例,请确认Forward Agent的配置中include_topics参数包含你自定义的faults/*前缀的topic,避免自定义数据被过滤不转发。
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

