Извлечение значений Bacnet с использованием Python3 - PullRequest
0 голосов
/ 24 октября 2018

Я хотел бы реализовать простой цикл для извлечения всех моих значений 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)

1 Ответ

0 голосов
/ 05 февраля 2019

Это будет получать только аналоговые значения ... если это то, что вы хотите.Но более глобальным подходом было бы использование подхода 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

...