Это будет получать только аналоговые значения ... если это то, что вы хотите.Но более глобальным подходом было бы использование подхода 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 будет использоваться для чтения всех точек.Это означает намного меньше сетевых запросов (и большую скорость).Вы также получите единицы измерения для каждой аналоговой точки ... и текст состояния для каждой многослойной единицы ... и описание и т. Д.
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