Как использовать BAC0 readRange в Python
Привет всем, я пытаюсь использовать пакет BAC0 в python 3, чтобы получить значение нескольких точек в сети bacnet. Я использую что-то вроде следующего:
bacnet = BAC0.lite(ip=x.x.x.x)
tmp_points = bacnet.readRange("11:2 analogInput 0 presentValue");
и кажется не в порядке:(ошибка:
BAC0.core.io.IOExceptions.NoResponseFromController: APDU Abort Reason : unrecognizedService
И в документе я просто могу найти
def readRange(
self,
args,
range_params=None,
arr_index=None,
vendor_id=0,
bacoid=None,
timeout=10,
):
"""
Build a ReadProperty request, wait for the answer and return the value
:param args: String with <addr> <type> <inst> <prop> [ <indx> ]
:returns: data read from device (str representing data like 10 or True)
*Example*::
import BAC0
myIPAddr = '192.168.1.10/24'
bacnet = BAC0.connect(ip = myIPAddr)
bacnet.read('2:5 analogInput 1 presentValue')
Requests the controller at (Network 2, address 5) for the presentValue of
its analog input 1 (AI:1).
"""
1 ответ
Чтобы прочитать несколько свойств из объекта устройства, вы должны использовать
readMultiple
.
readRange
будет читать из свойства, действующего как массив (например, объекты TrendLogs реализуют записи как массив, мы используем readRange для их чтения с использованием блоков записей).
Подробную информацию о том, как использовать readMultiple, можно найти здесь: https://bac0.readthedocs.io/en/latest/read.html#read-multiple.
Простой пример:
bacnet = BAC0.lite()
tmp_points = bacnet.readMultiple("11:2 analogInput 0 presentValue description")