我想实现一个简单的循环,将所有bacnet值一起提取出来,而不用一一询问,但会出错。或者,是否有更好的方法来一起获取所有值?有人可以帮忙吗?谢谢! 这是我的代码(可行):
import BAC0
bacnet = BAC0.connect()
a = bacnet.read('10.1.1.9 analogValue 1 presentValue')
print(a)
但这不起作用:
import BAC0
bacnet = BAC0.connect()
i = 0
for i = i+1:
a = bacnet.read('10.1.1.9 analogValue % i presentValue')
print(a)
end
出现错误:
ValueError: invalid literal for int() with base 10: '%'
好的,我找到了解决方法:
for i in range(1,5):
a = bacnet.read('10.1.1.9 analogValue {} presentValue'.format(i))
print(a)
答案 0 :(得分:0)
如果需要的话,它将仅检索AnalogValues...。但是更通用的方法是使用BAC0.device
方法。
您将需要设备的BACnet ID来定义它:
import BAC0
bacnet = BAC0.lite()
deviceID = 1000 # example
dev = BAC0.device(‘10.1.1.9’, deviceID,bacnet,poll=30)
dev.points #will give you all points on which you can iterate if you want...
这将创建一个名为“ dev”的设备,您可以在该设备上与许多属性进行交互。默认情况下,BAC0将定义AI,AV,AO,BI,BV,BO,MV,趋势日志。
您还可以使用方括号语法获取有关点的信息或将其写入:
dev[“NameOfPoint”]
#Let’s pretend a point is named HTG-O
dev[“HTG-O”] = 100 #this will override the output
dev[“HTG-O”].value # will output the value to be used in some calculation
dev.properties #will give you more details on the point itself
使用此方法将确保您将使用ReadPropertyMultiple读取所有点。这意味着更少的网络请求(和更快的速度)。您还将获得每个模拟点的单位...以及每个多状态点的状态文本...及其描述等。
poll=30
会告诉BAC0每30秒读取所有变量...因此您可以选择适合自己的需求。使用0将禁用轮询。默认值为10。
每次轮询一个值时,它将保存在点历史中,因此您可以使用:
dev[“YourPoint”].history
# This will give you a Pandas series ready to be used
如果要与具有很多点(> 1000)的设备进行交互,则可能要禁用轮询,如果需要,可以禁用分段...但是最好的做法是使用以下方法构建自定义对象列表:您想要的变量。没有了。
有关详细信息,请参见此处:https://bac0.readthedocs.io/en/latest/controller.html