我想实现一个简单的循环来一起提取我的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)发布于 2019-02-05 10:23:29
这将仅检索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、TrendLogs。
您还可以获取有关某个点的信息,或使用方括号语法对其进行写入:
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将被用来读取所有点。这意味着更少的网络请求(更快的速度)。您还将获得每个模拟点的单位...以及每个多状态ones...and的状态文本、描述等。
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
https://stackoverflow.com/questions/52976981
复制相似问题