volttron 使用可发现的 BACnet 点创建代理

volttron create agent with discoverable BACnet points

我很好奇 VOLTTRON agent development 是否可以使用代理将可发现的 BACnet 点暴露给楼宇自动化系统。

例如,BAC0 that also uses bacpypes 在像 VOLTTRON 这样的引擎盖下,我可以创建一个非常简单的 BACnet 应用程序(如下所示)并通过 BACnet 发现我的 BAC0 应用程序(和点)到楼宇自动化系统。

我有一个奇怪的用例,不控制或获取数据(我认为是典型的 VOLTTRON 用例),而只是“公开”一些只读的 AV BACnet 点(代表特定 HVAC 区域中人数的整数)从其他一些人数统计系统)到楼宇自动化系统。

抱歉,另一个模糊的问题,但是如果有人在代理开发中这样做过,是否有任何示例可供参考?我很好奇如果没有通过典型的 VOLTTON 开发安装 BACnet 代理,一些 BAC0 代码是否可以在代理中 运行。任何 tips/help 非常感谢。

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()

我觉得这个问题可能仍然很轻微 vague/open-ended(- 可能有待解释),但是如果您正在谈论通过 BACnet 公开一些自定义(/附加?)对象,那么到符合 BACnet 'client' - 例如 BMS,您必须将这些对象包含在 Device's/device-object 的 'Object-List' 属性 中,以便 BACnet客户会认识到它的可用性。

(总有一天有人会尝试变得聪明 - 出于安全原因并支持对象的 Read-属性 服务,但对象列表中没有它们 available/advertised 但 1)它只会如果他们也在开发客户端,则工作 - 了解这一点,并且 2) 它不符合标准。)

我认为出于发现的目的,使用子进程到 运行 VOLTTRON BACnet 实用程序脚本是最简单的,但这不会感觉很干净,输出可能不是您的形式欲望。我建议改为蚕食 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