我很好奇VOLTTRON agent development是否可以使用代理将可发现的BACnet点暴露给建筑自动化系统。
例如,也在幕后使用bacpypes的BAC0,比如VOLTTRON,可以创建一个非常简单的BACnet应用(如下所示),并通过BACnet发现我的BAC0应用(和指向楼宇自动化系统)。
我有一个奇怪的用例,不控制或获取数据(我认为是典型的VOLTTRON用例),而只是将几个只读AV BACnet点(代表来自其他系统的人数的整数,特别是暖通空调区域的人数)“暴露”给楼宇自动化系统。
对不起,另一个模糊的问题,如果有人用代理开发做过这件事,有没有什么例子可以看一下?我很好奇,如果没有通过典型的VOLTTON开发安装BAC0代理,一些BACnet代码是否可以在代理中运行。非常感谢任何提示/帮助。
import BAC0,time,random
from BAC0.core.devices.local.models import (
analog_output,
analog_value,
binary_value
)
from BAC0.tasks.RecurringTask import RecurringTask
from bacpypes.primitivedata import Real
# create writeable point to kill plugs
_new_objects = binary_value(
name="plugs_enabled",
description="BACnet Writeable Plug Load Relay Status",
presentValue=True,is_commandable=True
)
# create app
#bacnet = BAC0.lite(ip='10.0.2.20/24',deviceId='2021') #if static IP is needed
bacnet = BAC0.lite()
_new_objects.add_objects_to_application(bacnet)
bacnet._log.info("APP Created Success!")
def main():
while True:
plugs = bacnet.this_application.get_object_name('plugs_enabled')
bacnet._log.info('plugs_enabled is currently {}'.format(plugs.presentValue))
time.sleep(10)
if __name__ == "__main__":
main()
发布于 2021-05-13 00:28:37
我认为出于发现的目的,使用子进程来运行VOLTTRON实用程序脚本是最简单的,但这不会让人感觉很干净,而且输出可能不是您想要的形式。我建议改用bacnet_scan.py和grab_bacnet_config.py脚本。
一般流程是使用BACpypes创建一个BACnet服务器应用程序,使用WhoIs/IAm服务请求查找网络上的设备,然后使用readProperties请求获取点数据。
我要指出的是,这可能会很有挑战性-- BACnet有点像一个回调迷宫。
以下是一些起点:
https://github.com/VOLTTRON/volttron/blob/main/scripts/bacnet/bacnet_scan.py#L210 https://github.com/VOLTTRON/volttron/blob/main/scripts/bacnet/bacnet_scan.py#L78
https://github.com/VOLTTRON/volttron/blob/main/scripts/bacnet/grab_bacnet_config.py#L375 https://github.com/VOLTTRON/volttron/blob/main/scripts/bacnet/grab_bacnet_config.py#L410 https://github.com/VOLTTRON/volttron/blob/main/scripts/bacnet/grab_bacnet_config.py#L69
发布于 2021-05-09 22:48:12
我感觉这个问题可能仍然是轻微的模糊/开放的(-可能是开放的),但是如果你说的是暴露一些习惯(/additional?)对象,然后为了与设备“客户端”兼容-例如BMS,您必须将这些对象包括在设备的/ BACnet -Object的“Object-List”属性中,这样BACnet客户端才能识别它的可用性。
(有一天,有人可能会变得更聪明-出于安全原因,支持对象的读取属性服务,而不让它们在对象列表中可用/通告,但1)只有当他们也在开发客户端时才能工作-知道这一点,2)它将不符合标准。)
https://stackoverflow.com/questions/67447828
复制相似问题