当COV发出通知时,如何在python3中使用BAC0触发函数

当COV发出通知时,如何在python3中使用BAC0触发函数,python,python-3.x,bacnet,Python,Python 3.x,Bacnet,您好,我正在使用bacnet(BAC0库)和python 3开发一个项目 这是我方法中的代码 //以精简模式连接 self.bacnet=BAC0.connect( ip='192.168.1.2' ) self.bacnet.discover(networks='known') tmp=self.bacnet.devices my_controller=BAC0.device(地址=tmp[0][2],设备_id=tmp[0][3],网络=self.bacnet) 点=我的控制器点 点=点[0

您好,我正在使用bacnet(BAC0库)和python 3开发一个项目 这是我方法中的代码

//以精简模式连接
self.bacnet=BAC0.connect(
ip='192.168.1.2'
)
self.bacnet.discover(networks='known')
tmp=self.bacnet.devices
my_controller=BAC0.device(地址=tmp[0][2],设备_id=tmp[0][3],网络=self.bacnet)
点=我的控制器点
点=点[0]
数值点=self.GetNumericPoint(点)
//为点和触发COV通知的更改值创建一段时间
尽管如此:
i=i+1
数字点写入(i,prop=“presentValue”,priority=“12”)
值=数值\u点
时间。睡眠(1)
打印('等待')
问题是在python3中,当有COV通知(值的更改)时,如何使用BAC0触发函数
谢谢。

目前,COV仅在开发分支中实现。它将在下一版本中发布,不知道何时发布

您可以订阅任意点的COV(如果您的设备支持)。收到通知时,将写入点的历史记录,以便点的最新值准确

默认情况下,将声明confirmedCOV。但您也可以将其配置为生存期

# This would declare a COV for a point.
device['point'].subscribe_cov(confirmed=False, lifetime=900)
# This would declare a COV outside the context of a device
bacnet.cov(address, objectID, confirmed=True, lifetime=None)
编辑以演示回调的使用,添加到开发分支中 objectID:一个元组,带有(“objectType”,实例),例如(“analogInput”,1)

文档中提供了更多信息:

Thank's my friend,请您为bacnet.cov(address,objectID,confirmed=True,lifetime=None)编写一个示例将其当前值打印为回调函数。(如果可能的话)以及如何制作objectID。这是真的吗
objectID=“analogInput:12”
我添加了这个示例,作为对原始答案Many Thank's Christian的编辑。请告诉我如何创建#objectID#我在您的文档中找不到任何关于它的描述。对象ID来自设备本身。bacnet.whois()和bacnet.read(地址设备bacoid objectList)将提供device.ex中可用的内容。网络2上MAC地址为4的MSTP控制器,其模拟输入地址为1…```bacnet.cov(“2:4”(“analogInput”,1))``所以我猜简短的响应应该是:一个元组(“对象类型的字符串”,实例)
# The Notification will pass a variable named "elements" to the callback
# your function must include this argument

# elements is a dict containing all the information of the COV
def my_callback(elements):
    print("Present value is : {}".format(elements['properties']['presentValue'])

bacnet.cov(address, objectID, confirmed=True, lifetime=None, callback=my_callback)