Как использовать 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")
Другие вопросы по тегам