首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VOLTTRON执行器代理RPC恢复不起作用

VOLTTRON执行器代理RPC恢复不起作用
EN

Stack Overflow用户
提问于 2021-06-07 23:02:02
回答 2查看 47关注 0票数 0

我有一个用于暖通空调控制的BACnet系统,其中我使用VOLTTRON执行器代理在BACnet中将@ priority 10写为值2,这很好用。

代码语言:javascript
运行
复制
result = self.vip.rpc.call('platform.actuator', 'set_multiple_points', self.core.identity, set_multi_topic_values_master).get(timeout=20)
_log.debug(f'*** [Setter Agent INFO] *** -  set_multiple_points ON ALL VAVs WRITE SUCCESS!')

然后系统会休眠一段时间以进行测试:

代码语言:javascript
运行
复制
_log.debug(f'*** [Setter Agent INFO] *** -  SETTING UP GEVENT SLEEP!')
gevent.sleep(120)
_log.debug(f'*** [Setter Agent INFO] *** -  GEVENT SLEEP DONE!')

在gevent睡眠之后,我遇到了一些关于还原点不工作的问题。下面的代码执行得很好,但使用BACnet扫描工具时,暖通空调控制上的优先级10值2仍然存在,就像还原点什么也不做一样。

代码语言:javascript
运行
复制
for device in revert_topic_devices_jci:
    response = self.vip.rpc.call('platform.actuator', 'revert_point', self.core.identity, topic_jci, self.jci_setpoint_topic).get(timeout=20)
    _log.debug(f'*** [Setter Agent INFO] *** -  REVERT POINTS ON {device} SUCCESS!')

_log.debug(f'*** [Setter Agent INFO] *** -  REVERT POINTS JCI DONE DEAL SUCCESS!')

我注意到的一件事是,楼宇自动化将占用/未占用写入HVAC controls @ BACnet priority 12。它总是1表示占用或2表示空闲。

我尝试对VOLTTRON执行的操作是在优先级为10的BACnet中写入值2,然后在恢复时释放为空。这会不会被还原成什么都不做,因为也没有要还原的东西?我希望VOLTTRON可以编写@ BACnet priority 10,然后直接发布。在BACnet扫描工具上,我可以做同样的事情,写优先级为10,然后释放优先级为10的优先级10写null

我是否应该像建筑自动化系统一样在优先级12下编写代码,这样VOLTTRON就可以恢复到原来的状态,无论建筑自动化在做什么?

EN

回答 2

Stack Overflow用户

发布于 2021-06-11 06:59:11

我有几点看法:

  1. 在你的revert循环中,上面的第三个代码块,你实际上并没有改变传递给RPC调用的主题。每个调用都将使用不在该代码块中的设备主题(但我们可以看到在代码块中没有被更改)和设备主题,该主题同样没有在代码块中定义,但至少看起来没有被更改。在这里设置一些断点和/或调试语句可能是值得的,以确保您传递的是要还原的正确主题。
  2. 您对优先级的使用似乎与BACnet协议规范和VOLTTRON驱动程序实现一致。我们不建议您尝试以与现有楼宇自动化系统相同的优先级编写代码。当平台驱动程序调用"writeProperty“函数时,BACnet驱动程序代码将在"revert_point”服务请求中发送一个空(无)值。坦率地说,我对这个功能不是很熟悉,但是考虑到你的扫描工具在传递空值时会执行预期的恢复功能,我怀疑这是在BACnet协议中执行“恢复到前值”类型功能的预期方式。我没有理由相信您正在经历的行为是驱动程序代码库中错误的结果。

总的来说,我建议调试在"revert_point“RPC调用中传递的主题。

票数 0
EN

Stack Overflow用户

发布于 2021-06-16 00:17:54

我很幸运能够使用set_multiple_points将点恢复为None

如下所示:

代码语言:javascript
运行
复制
        self.jci_device_map = {
        'VMA-2-6': '27',
        'VMA-2-4': '29',
        'VMA-2-7': '30',
        'VMA-1-8': '6',
}

revert_multi_topic_values_master = []
set_multi_topic_values_master = []

        for device in self.jci_device_map.values():
            topic_jci = '/'.join([self.building_topic, device])
            final_topic_jci = '/'.join([topic_jci, self.jci_setpoint_topic])

            # BACnet enum point for VAV occ
            # 1 == occ, 2 == unnoc
            
            # create a (topic, value) tuple and add it to our topic values
            set_multi_topic_values_master.append((final_topic_jci, self.unnoccupied_value)) # TO SET UNNOCUPIED
            revert_multi_topic_values_master.append((final_topic_jci, None)) # TO SET FOR REVERT

result = self.vip.rpc.call('platform.actuator', 'set_multiple_points', self.core.identity, revert_multi_topic_values_master).get(timeout=20)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67874085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档