我有一个用于 HVAC 控制的 BACnet 系统,我正在使用 VOLTTRON 执行器代理将 BACnet 中的 @ 优先级 10 写入值 2,这很好用。
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!')
然后系统会休眠一段时间以进行测试:
_log.debug(f'*** [Setter Agent INFO] *** - SETTING UP GEVENT SLEEP!')
gevent.sleep(120)
_log.debug(f'*** [Setter Agent INFO] *** - GEVENT SLEEP DONE!')
在 gevent sleep 之后,我遇到了一些关于恢复点不起作用的问题。下面的代码执行得很好,但使用 BACnet 扫描工具,HVAC 控件上仍然存在优先级 10 值 2,就像还原点没有做任何事情一样。
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 控件 @ BACnet 优先级 12。它总是 1 表示占用或 2 表示空置。
我试图用 VOLTTRON 做的是在 BACnet 中以优先级 10 写入值 2,然后在还原时释放为空。是否可以通过恢复来做任何事情,因为也没有什么可恢复的?我希望 VOLTTRON 可以写@ BACnet 优先级 10 然后才发布。在 BACnet 扫描工具上,我可以做同样的事情 write @ priority 10 然后释放优先级 10 和优先级 10 write null
我是否应该像楼宇自动化系统一样将优先级设为 12,这样无论楼宇自动化正在做什么,VOLTTRON 都可以恢复?
答案 0 :(得分:0)
我有一些观察:
总的来说,我建议调试在“revert_point”RPC 调用中传递的主题。
答案 1 :(得分:0)
我很幸运能够使用 set_multiple_points
将点恢复为 None
像这样:
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)