Property Access

ReadProperty

ReadProperty service per ASHRAE 135-2016 Clause 15.5.

class bac_py.services.read_property.ReadPropertyRequest(object_identifier, property_identifier, property_array_index=None)[source]

Bases: object

ReadProperty-Request service parameters (Clause 15.5.1.1).

ReadProperty-Request ::= SEQUENCE {
    objectIdentifier    [0] BACnetObjectIdentifier,
    propertyIdentifier  [1] BACnetPropertyIdentifier,
    propertyArrayIndex  [2] Unsigned OPTIONAL
}
Parameters:
object_identifier: ObjectIdentifier
property_identifier: PropertyIdentifier
property_array_index: int | None
encode()[source]

Encode ReadProperty-Request service parameters.

Return type:

bytes

Returns:

Encoded service request bytes.

classmethod decode(data)[source]

Decode ReadProperty-Request from service request bytes.

Parameters:

data (memoryview | bytes) – Raw service request bytes.

Return type:

ReadPropertyRequest

Returns:

Decoded ReadPropertyRequest.

class bac_py.services.read_property.ReadPropertyACK(object_identifier, property_identifier, property_array_index=None, property_value=b'')[source]

Bases: object

ReadProperty-ACK service parameters (Clause 15.5.1.2).

ReadProperty-ACK ::= SEQUENCE {
    objectIdentifier    [0] BACnetObjectIdentifier,
    propertyIdentifier  [1] BACnetPropertyIdentifier,
    propertyArrayIndex  [2] Unsigned OPTIONAL,
    propertyValue       [3] ABSTRACT-SYNTAX.&TYPE
}

The property_value field contains raw encoded bytes wrapped in context tag 3 (opening/closing). The application layer is responsible for interpreting the value based on the property type.

Parameters:
object_identifier: ObjectIdentifier
property_identifier: PropertyIdentifier
property_array_index: int | None
property_value: bytes
encode()[source]

Encode ReadProperty-ACK service parameters.

Return type:

bytes

Returns:

Encoded service ACK bytes.

classmethod decode(data)[source]

Decode ReadProperty-ACK from service ACK bytes.

Parameters:

data (memoryview | bytes) – Raw service ACK bytes.

Return type:

ReadPropertyACK

Returns:

Decoded ReadPropertyACK.

ReadPropertyMultiple

ReadPropertyMultiple service per ASHRAE 135-2016 Clause 15.7.

class bac_py.services.read_property_multiple.PropertyReference(property_identifier, property_array_index=None)[source]

Bases: object

BACnetPropertyReference (Clause 21).

BACnetPropertyReference ::= SEQUENCE {
    propertyIdentifier  [0] BACnetPropertyIdentifier,
    propertyArrayIndex  [1] Unsigned OPTIONAL
}
Parameters:
property_identifier: PropertyIdentifier
property_array_index: int | None
encode()[source]

Encode this property reference as context-tagged bytes.

Return type:

bytes

Returns:

Encoded property reference bytes.

classmethod decode(data, offset)[source]

Decode a property reference from a buffer at the given offset.

Parameters:
  • data (memoryview | bytes) – Raw bytes containing encoded property reference data.

  • offset (int) – Byte offset to start decoding from.

Return type:

tuple[PropertyReference, int]

Returns:

Tuple of (PropertyReference, new offset).

class bac_py.services.read_property_multiple.ReadAccessSpecification(object_identifier, list_of_property_references)[source]

Bases: object

BACnetReadAccessSpecification (Clause 21).

ReadAccessSpecification ::= SEQUENCE {
    objectIdentifier         [0] BACnetObjectIdentifier,
    listOfPropertyReferences [1] SEQUENCE OF BACnetPropertyReference
}
Parameters:
object_identifier: ObjectIdentifier
list_of_property_references: list[PropertyReference]
encode()[source]

Encode this read access specification as context-tagged bytes.

Return type:

bytes

Returns:

Encoded read access specification bytes.

classmethod decode(data, offset)[source]

Decode a read access specification from a buffer at the given offset.

Parameters:
  • data (memoryview | bytes) – Raw bytes containing encoded read access specification data.

  • offset (int) – Byte offset to start decoding from.

Return type:

tuple[ReadAccessSpecification, int]

Returns:

Tuple of (ReadAccessSpecification, new offset).

class bac_py.services.read_property_multiple.ReadPropertyMultipleRequest(list_of_read_access_specs)[source]

Bases: object

ReadPropertyMultiple-Request service parameters (Clause 15.7.1.1).

ReadPropertyMultiple-Request ::= SEQUENCE {
    listOfReadAccessSpecs  SEQUENCE OF ReadAccessSpecification
}
Parameters:

list_of_read_access_specs (list[ReadAccessSpecification])

list_of_read_access_specs: list[ReadAccessSpecification]
encode()[source]

Encode ReadPropertyMultiple-Request service parameters.

Return type:

bytes

Returns:

Encoded service request bytes.

classmethod decode(data)[source]

Decode ReadPropertyMultiple-Request from service request bytes.

Parameters:

data (memoryview | bytes) – Raw service request bytes.

Return type:

ReadPropertyMultipleRequest

Returns:

Decoded ReadPropertyMultipleRequest.

class bac_py.services.read_property_multiple.ReadResultElement(property_identifier, property_array_index=None, property_value=None, property_access_error=None)[source]

Bases: object

Single result element within a ReadAccessResult.

Contains either a property value (success) or an error (failure), but not both.

ReadAccessResult.listOfResults-element ::= SEQUENCE {
    propertyIdentifier  [2] BACnetPropertyIdentifier,
    propertyArrayIndex  [3] Unsigned OPTIONAL,
    propertyValue       [4] ABSTRACT-SYNTAX.&TYPE,   -- on success
  | propertyAccessError [5] BACnetError               -- on failure
}
Parameters:
property_identifier: PropertyIdentifier
property_array_index: int | None
property_value: bytes | None
property_access_error: tuple[ErrorClass, ErrorCode] | None
encode()[source]

Encode a single read result element.

Return type:

bytes

Returns:

Encoded result element bytes containing either a property value (success) or a property access error (failure).

classmethod decode(data, offset)[source]

Decode a single read result element from a buffer at the given offset.

Parameters:
  • data (memoryview | bytes) – Raw bytes containing encoded result element data.

  • offset (int) – Byte offset to start decoding from.

Return type:

tuple[ReadResultElement, int]

Returns:

Tuple of (ReadResultElement, new offset).

class bac_py.services.read_property_multiple.ReadAccessResult(object_identifier, list_of_results)[source]

Bases: object

BACnetReadAccessResult (Clause 21).

ReadAccessResult ::= SEQUENCE {
    objectIdentifier  [0] BACnetObjectIdentifier,
    listOfResults     [1] SEQUENCE OF ReadAccessResult.listOfResults-element
}
Parameters:
object_identifier: ObjectIdentifier
list_of_results: list[ReadResultElement]
encode()[source]

Encode this read access result as context-tagged bytes.

Return type:

bytes

Returns:

Encoded read access result bytes.

classmethod decode(data, offset)[source]

Decode a read access result from a buffer at the given offset.

Parameters:
  • data (memoryview | bytes) – Raw bytes containing encoded read access result data.

  • offset (int) – Byte offset to start decoding from.

Return type:

tuple[ReadAccessResult, int]

Returns:

Tuple of (ReadAccessResult, new offset).

class bac_py.services.read_property_multiple.ReadPropertyMultipleACK(list_of_read_access_results)[source]

Bases: object

ReadPropertyMultiple-ACK service parameters (Clause 15.7.1.2).

ReadPropertyMultiple-ACK ::= SEQUENCE {
    listOfReadAccessResults  SEQUENCE OF ReadAccessResult
}
Parameters:

list_of_read_access_results (list[ReadAccessResult])

list_of_read_access_results: list[ReadAccessResult]
encode()[source]

Encode ReadPropertyMultiple-ACK service parameters.

Return type:

bytes

Returns:

Encoded service ACK bytes.

classmethod decode(data)[source]

Decode ReadPropertyMultiple-ACK from service ACK bytes.

Parameters:

data (memoryview | bytes) – Raw service ACK bytes.

Return type:

ReadPropertyMultipleACK

Returns:

Decoded ReadPropertyMultipleACK.

WriteProperty

WriteProperty service per ASHRAE 135-2016 Clause 15.9.

class bac_py.services.write_property.WritePropertyRequest(object_identifier, property_identifier, property_value, property_array_index=None, priority=None)[source]

Bases: object

WriteProperty-Request service parameters (Clause 15.9.1.1).

WriteProperty-Request ::= SEQUENCE {
    objectIdentifier    [0] BACnetObjectIdentifier,
    propertyIdentifier  [1] BACnetPropertyIdentifier,
    propertyArrayIndex  [2] Unsigned OPTIONAL,
    propertyValue       [3] ABSTRACT-SYNTAX.&TYPE,
    priority            [4] Unsigned (1..16) OPTIONAL
}

The property_value field contains raw application-tagged encoded bytes. The application layer is responsible for encoding the value appropriately for the target property type.

Parameters:
object_identifier: ObjectIdentifier
property_identifier: PropertyIdentifier
property_value: bytes
property_array_index: int | None
priority: int | None
encode()[source]

Encode WriteProperty-Request service parameters.

Return type:

bytes

Returns:

Encoded service request bytes.

classmethod decode(data)[source]

Decode WriteProperty-Request from service request bytes.

Parameters:

data (memoryview | bytes) – Raw service request bytes.

Return type:

WritePropertyRequest

Returns:

Decoded WritePropertyRequest.

Raises:

BACnetRejectError – If priority is outside the 1–16 range (per Clause 15.9.1.1.5).

WritePropertyMultiple

WritePropertyMultiple service per ASHRAE 135-2016 Clause 15.10.

class bac_py.services.write_property_multiple.WriteAccessSpecification(object_identifier, list_of_properties)[source]

Bases: object

BACnetWriteAccessSpecification (Clause 21).

WriteAccessSpecification ::= SEQUENCE {
    objectIdentifier  [0] BACnetObjectIdentifier,
    listOfProperties  [1] SEQUENCE OF BACnetPropertyValue
}
Parameters:
object_identifier: ObjectIdentifier
list_of_properties: list[BACnetPropertyValue]
encode()[source]

Encode this write access specification as context-tagged bytes.

Return type:

bytes

Returns:

Encoded write access specification bytes.

classmethod decode(data, offset)[source]

Decode a write access specification from a buffer at the given offset.

Parameters:
  • data (memoryview | bytes) – Raw bytes containing encoded write access specification data.

  • offset (int) – Byte offset to start decoding from.

Return type:

tuple[WriteAccessSpecification, int]

Returns:

Tuple of (WriteAccessSpecification, new offset).

class bac_py.services.write_property_multiple.WritePropertyMultipleRequest(list_of_write_access_specs)[source]

Bases: object

WritePropertyMultiple-Request service parameters (Clause 15.10.1.1).

WritePropertyMultiple-Request ::= SEQUENCE {
    listOfWriteAccessSpecs  SEQUENCE OF WriteAccessSpecification
}
Parameters:

list_of_write_access_specs (list[WriteAccessSpecification])

list_of_write_access_specs: list[WriteAccessSpecification]
encode()[source]

Encode WritePropertyMultiple-Request service parameters.

Return type:

bytes

Returns:

Encoded service request bytes.

classmethod decode(data)[source]

Decode WritePropertyMultiple-Request from service request bytes.

Parameters:

data (memoryview | bytes) – Raw service request bytes.

Return type:

WritePropertyMultipleRequest

Returns:

Decoded WritePropertyMultipleRequest.

ReadRange

ReadRange service per ASHRAE 135-2016 Clause 15.8.

class bac_py.services.read_range.RangeByPosition(reference_index, count)[source]

Bases: object

Range qualifier: by position (index + count).

SEQUENCE {
    referenceIndex  Unsigned,
    count           INTEGER
}
Parameters:
  • reference_index (int)

  • count (int)

reference_index: int
count: int
class bac_py.services.read_range.RangeBySequenceNumber(reference_sequence_number, count)[source]

Bases: object

Range qualifier: by sequence number.

SEQUENCE {
    referenceSequenceNumber  Unsigned,
    count                    INTEGER
}
Parameters:
  • reference_sequence_number (int)

  • count (int)

reference_sequence_number: int
count: int
class bac_py.services.read_range.RangeByTime(reference_date, reference_time, count)[source]

Bases: object

Range qualifier: by time.

SEQUENCE {
    referenceTime  BACnetDateTime,
    count          INTEGER
}
Parameters:
reference_date: BACnetDate
reference_time: BACnetTime
count: int
class bac_py.services.read_range.ResultFlags(first_item=False, last_item=False, more_items=False)[source]

Bases: object

BACnetResultFlags — 3-bit BitString.

Bit 0: FIRST_ITEM — result includes the first item in the list Bit 1: LAST_ITEM — result includes the last item in the list Bit 2: MORE_ITEMS — more items remain beyond what was returned

Parameters:
first_item: bool
last_item: bool
more_items: bool
to_bit_string()[source]

Convert to a BACnet BitString.

Return type:

BitString

Returns:

3-bit BitString encoding of the result flags.

classmethod from_bit_string(bs)[source]

Decode from a BACnet BitString.

Parameters:

bs (BitString) – BitString with up to 3 significant bits.

Return type:

ResultFlags

Returns:

Decoded ResultFlags.

class bac_py.services.read_range.ReadRangeRequest(object_identifier, property_identifier, property_array_index=None, range=None)[source]

Bases: object

ReadRange-Request service parameters (Clause 15.8.1.1).

ReadRange-Request ::= SEQUENCE {
    objectIdentifier    [0] BACnetObjectIdentifier,
    propertyIdentifier  [1] BACnetPropertyIdentifier,
    propertyArrayIndex  [2] Unsigned OPTIONAL,
    range               CHOICE {
        byPosition        [3] SEQUENCE { referenceIndex Unsigned, count INTEGER },
        bySequenceNumber  [6] SEQUENCE { referenceSequenceNumber Unsigned,
                                          count INTEGER },
        byTime            [7] SEQUENCE { referenceTime BACnetDateTime,
                                          count INTEGER }
    } OPTIONAL
}
Parameters:
object_identifier: ObjectIdentifier
property_identifier: PropertyIdentifier
property_array_index: int | None
range: RangeByPosition | RangeBySequenceNumber | RangeByTime | None
encode()[source]

Encode ReadRange-Request service parameters.

Return type:

bytes

Returns:

Encoded service request bytes.

classmethod decode(data)[source]

Decode ReadRange-Request from service request bytes.

Parameters:

data (memoryview | bytes) – Raw service request bytes.

Return type:

ReadRangeRequest

Returns:

Decoded ReadRangeRequest.

class bac_py.services.read_range.ReadRangeACK(object_identifier, property_identifier, result_flags, item_count, item_data, property_array_index=None, first_sequence_number=None)[source]

Bases: object

ReadRange-ACK service parameters (Clause 15.8.1.2).

ReadRange-ACK ::= SEQUENCE {
    objectIdentifier    [0] BACnetObjectIdentifier,
    propertyIdentifier  [1] BACnetPropertyIdentifier,
    propertyArrayIndex  [2] Unsigned OPTIONAL,
    resultFlags         [3] BACnetResultFlags,
    itemCount           [4] Unsigned,
    itemData            [5] SEQUENCE OF ABSTRACT-SYNTAX.&TYPE,
    firstSequenceNumber [6] Unsigned32 OPTIONAL
}

The itemData field contains raw encoded bytes wrapped in context tag 5 (opening/closing).

Parameters:
object_identifier: ObjectIdentifier
property_identifier: PropertyIdentifier
result_flags: ResultFlags
item_count: int
item_data: bytes
property_array_index: int | None
first_sequence_number: int | None
encode()[source]

Encode ReadRange-ACK service parameters.

Return type:

bytes

Returns:

Encoded service ACK bytes.

classmethod decode(data)[source]

Decode ReadRange-ACK from service ACK bytes.

Parameters:

data (memoryview | bytes) – Raw service ACK bytes.

Return type:

ReadRangeACK

Returns:

Decoded ReadRangeACK.