Discovery and COV¶
Who-Is / I-Am¶
Who-Is and I-Am services per ASHRAE 135-2016 Clause 16.10.
- class bac_py.services.who_is.WhoIsRequest(low_limit=None, high_limit=None)[source]¶
Bases:
objectWho-Is-Request service parameters (Clause 16.10.1).
Both limits must be present or both absent.
- encode()[source]¶
Encode Who-Is-Request service parameters.
- Return type:
- Returns:
Encoded service request bytes (may be empty if no range is set).
- classmethod decode(data)[source]¶
Decode Who-Is-Request from service request bytes.
- Parameters:
data (
memoryview|bytes) – Raw service request bytes.- Return type:
- Returns:
Decoded
WhoIsRequest.
- class bac_py.services.who_is.IAmRequest(object_identifier, max_apdu_length, segmentation_supported, vendor_id)[source]¶
Bases:
objectI-Am-Request service parameters (Clause 16.10.2).
All fields use APPLICATION tags (not context-specific).
- Parameters:
object_identifier (ObjectIdentifier)
max_apdu_length (int)
segmentation_supported (Segmentation)
vendor_id (int)
- object_identifier: ObjectIdentifier¶
- segmentation_supported: Segmentation¶
- encode()[source]¶
Encode I-Am-Request service parameters.
- Return type:
- Returns:
Encoded service request bytes.
- classmethod decode(data)[source]¶
Decode I-Am-Request from service request bytes.
- Parameters:
data (
memoryview|bytes) – Raw service request bytes.- Return type:
- Returns:
Decoded
IAmRequest.
Who-Has / I-Have¶
Who-Has and I-Have services per ASHRAE 135-2016 Clause 16.9.
- class bac_py.services.who_has.WhoHasRequest(object_identifier=None, object_name=None, low_limit=None, high_limit=None)[source]¶
Bases:
objectWho-Has-Request service parameters (Clause 16.9.1).
Who-Has-Request ::= SEQUENCE { limits SEQUENCE { deviceInstanceRangeLowLimit [0] Unsigned (0..4194303), deviceInstanceRangeHighLimit [1] Unsigned (0..4194303) } OPTIONAL, object CHOICE { objectIdentifier [2] BACnetObjectIdentifier, objectName [3] CharacterString } }
- Parameters:
object_identifier (ObjectIdentifier | None)
object_name (str | None)
low_limit (int | None)
high_limit (int | None)
- object_identifier: ObjectIdentifier | None¶
- encode()[source]¶
Encode Who-Has-Request service parameters.
- Return type:
- Returns:
Encoded service request bytes.
- classmethod decode(data)[source]¶
Decode Who-Has-Request from service request bytes.
- Parameters:
data (
memoryview|bytes) – Raw service request bytes.- Return type:
- Returns:
Decoded
WhoHasRequest.
- class bac_py.services.who_has.IHaveRequest(device_identifier, object_identifier, object_name)[source]¶
Bases:
objectI-Have-Request service parameters (Clause 16.9.2).
All fields use APPLICATION tags (not context-specific).
I-Have-Request ::= SEQUENCE { deviceIdentifier BACnetObjectIdentifier, objectIdentifier BACnetObjectIdentifier, objectName CharacterString }
- Parameters:
device_identifier (ObjectIdentifier)
object_identifier (ObjectIdentifier)
object_name (str)
- device_identifier: ObjectIdentifier¶
- object_identifier: ObjectIdentifier¶
- encode()[source]¶
Encode I-Have-Request service parameters.
- Return type:
- Returns:
Encoded service request bytes.
- classmethod decode(data)[source]¶
Decode I-Have-Request from service request bytes.
- Parameters:
data (
memoryview|bytes) – Raw service request bytes.- Return type:
- Returns:
Decoded
IHaveRequest.
Device Discovery¶
Device discovery services per ASHRAE 135-2020 Clause 16.11.
Who-Am-I (new in 2020) and You-Are for device identity assignment.
- class bac_py.services.device_discovery.WhoAmIRequest(vendor_id, model_name, serial_number)[source]¶
Bases:
objectWho-Am-I-Request (Clause 16.11, new in 2020).
Sent by an unconfigured device to request identity assignment. All fields use APPLICATION tags.
Who-Am-I-Request ::= SEQUENCE { vendorID Unsigned16, modelName CharacterString, serialNumber CharacterString }
- classmethod decode(data)[source]¶
Decode Who-Am-I-Request from service request bytes.
- Return type:
- Parameters:
data (memoryview | bytes)
- class bac_py.services.device_discovery.YouAreRequest(device_identifier, device_mac_address, device_network_number=None)[source]¶
Bases:
objectYou-Are-Request (Clause 16.11, new in 2020).
Sent by a supervisor to assign identity to a device.
You-Are-Request ::= SEQUENCE { deviceIdentifier [0] BACnetObjectIdentifier, deviceMACAddress [1] OCTET STRING, deviceNetworkNumber [2] Unsigned16 OPTIONAL }
- Parameters:
device_identifier (ObjectIdentifier)
device_mac_address (bytes)
device_network_number (int | None)
- device_identifier: ObjectIdentifier¶
- classmethod decode(data)[source]¶
Decode You-Are-Request from service request bytes.
- Return type:
- Parameters:
data (memoryview | bytes)
COV (Change of Value)¶
COV (Change of Value) services per ASHRAE 135-2016 Clause 13.1/13.14.
- class bac_py.services.cov.BACnetPropertyReference(property_identifier, property_array_index=None)[source]¶
Bases:
objectBACnetPropertyReference – property identifier with optional array index.
BACnetPropertyReference ::= SEQUENCE { propertyIdentifier [0] BACnetPropertyIdentifier, propertyArrayIndex [1] Unsigned OPTIONAL }
- encode()[source]¶
Encode BACnetPropertyReference as context-tagged fields.
- Return type:
- Returns:
Encoded bytes for this property reference.
- classmethod decode(data, offset=0)[source]¶
Decode BACnetPropertyReference from data at a given offset.
- Parameters:
data (
memoryview|bytes) – Raw bytes containing encoded property reference data.offset (
int(default:0)) – Byte offset to start decoding from.
- Return type:
- Returns:
Tuple of (decoded
BACnetPropertyReference, new offset).
- class bac_py.services.cov.BACnetPropertyValue(property_identifier, property_array_index=None, value=b'', priority=None)[source]¶
Bases:
objectBACnetPropertyValue per Clause 21.
BACnetPropertyValue ::= SEQUENCE { propertyIdentifier [0] BACnetPropertyIdentifier, propertyArrayIndex [1] Unsigned OPTIONAL, value [2] ABSTRACT-SYNTAX.&Type, priority [3] Unsigned (1..16) OPTIONAL }
The
valuefield contains raw application-tagged bytes.- Parameters:
property_identifier (PropertyIdentifier)
property_array_index (int | None)
value (bytes)
priority (int | None)
- property_identifier: PropertyIdentifier¶
- encode()[source]¶
Encode BACnetPropertyValue.
- Return type:
- Returns:
Encoded bytes for this property value sequence.
- classmethod decode_from(data, offset=0)[source]¶
Decode BACnetPropertyValue from data at a given offset.
- Parameters:
data (
memoryview|bytes) – Raw bytes containing encoded property value data.offset (
int(default:0)) – Byte offset to start decoding from.
- Return type:
- Returns:
Tuple of (decoded
BACnetPropertyValue, new offset).- Raises:
BACnetRejectError – If priority is outside the 1–16 range.
- class bac_py.services.cov.COVNotificationMultipleRequest(subscriber_process_identifier, initiating_device_identifier, time_remaining, timestamp, list_of_cov_notifications)[source]¶
Bases:
objectConfirmed/Unconfirmed COVNotification-Multiple-Request per Clause 13.17/13.18.
COVNotification-Multiple-Request ::= SEQUENCE { subscriberProcessIdentifier [0] Unsigned32, initiatingDeviceIdentifier [1] BACnetObjectIdentifier, timeRemaining [2] Unsigned, timestamp [3] BACnetTimeStamp, listOfCOVNotifications [4] SEQUENCE OF COVObjectNotification }
- Parameters:
subscriber_process_identifier (int)
initiating_device_identifier (ObjectIdentifier)
time_remaining (int)
timestamp (BACnetTimeStamp)
list_of_cov_notifications (list[COVObjectNotification])
- initiating_device_identifier: ObjectIdentifier¶
- timestamp: BACnetTimeStamp¶
- list_of_cov_notifications: list[COVObjectNotification]¶
- encode()[source]¶
Encode COVNotificationMultiple-Request service parameters.
- Return type:
- Returns:
Encoded service request bytes.
- classmethod decode(data)[source]¶
Decode COVNotificationMultiple-Request from service request bytes.
- Parameters:
data (
memoryview|bytes) – Raw service request bytes.- Return type:
- Returns:
Decoded
COVNotificationMultipleRequest.
- class bac_py.services.cov.COVNotificationRequest(subscriber_process_identifier, initiating_device_identifier, monitored_object_identifier, time_remaining, list_of_values)[source]¶
Bases:
objectConfirmed/Unconfirmed COVNotification-Request per Clause 13.14.7/13.14.8.
COVNotification-Request ::= SEQUENCE { subscriberProcessIdentifier [0] Unsigned32, initiatingDeviceIdentifier [1] BACnetObjectIdentifier, monitoredObjectIdentifier [2] BACnetObjectIdentifier, timeRemaining [3] Unsigned, listOfValues [4] SEQUENCE OF BACnetPropertyValue }
The same encoding is used for both ConfirmedCOVNotification-Request (service choice 1) and UnconfirmedCOVNotification-Request (service choice 2).
- Parameters:
subscriber_process_identifier (int)
initiating_device_identifier (ObjectIdentifier)
monitored_object_identifier (ObjectIdentifier)
time_remaining (int)
list_of_values (list[BACnetPropertyValue])
- initiating_device_identifier: ObjectIdentifier¶
- monitored_object_identifier: ObjectIdentifier¶
- list_of_values: list[BACnetPropertyValue]¶
- encode()[source]¶
Encode COVNotification-Request service parameters.
- Return type:
- Returns:
Encoded service request bytes.
- classmethod decode(data)[source]¶
Decode COVNotification-Request from service request bytes.
- Parameters:
data (
memoryview|bytes) – Raw service request bytes.- Return type:
- Returns:
Decoded
COVNotificationRequest.
- class bac_py.services.cov.COVObjectNotification(monitored_object_identifier, list_of_values)[source]¶
Bases:
objectA single object notification within COVNotificationMultiple.
SEQUENCE { monitoredObjectIdentifier [0] BACnetObjectIdentifier, listOfValues [1] SEQUENCE OF COVPropertyValue }
- Parameters:
monitored_object_identifier (ObjectIdentifier)
list_of_values (list[COVPropertyValue])
- monitored_object_identifier: ObjectIdentifier¶
- list_of_values: list[COVPropertyValue]¶
- encode()[source]¶
Encode COVObjectNotification.
- Return type:
- Returns:
Encoded bytes for this object notification.
- classmethod decode(data, offset=0)[source]¶
Decode COVObjectNotification from data at a given offset.
- Parameters:
data (
memoryview|bytes) – Buffer to decode from.offset (
int(default:0)) – Starting byte offset.
- Return type:
- Returns:
Tuple of (decoded
COVObjectNotification, new offset).
- class bac_py.services.cov.COVPropertyValue(property_identifier, value, array_index=None, time_of_change=None)[source]¶
Bases:
objectA single property value within a COV notification.
SEQUENCE { propertyIdentifier [0] BACnetPropertyIdentifier, arrayIndex [1] Unsigned OPTIONAL, value [2] ABSTRACT-SYNTAX.&Type, timeOfChange [3] BACnetTimeStamp OPTIONAL }
- Parameters:
property_identifier (int)
value (bytes)
array_index (int | None)
time_of_change (BACnetTimeStamp | None)
- time_of_change: BACnetTimeStamp | None¶
- encode()[source]¶
Encode COVPropertyValue.
- Return type:
- Returns:
Encoded bytes for this property value.
- classmethod decode(data, offset=0)[source]¶
Decode COVPropertyValue from data at a given offset.
- Parameters:
data (
memoryview|bytes) – Buffer to decode from.offset (
int(default:0)) – Starting byte offset.
- Return type:
- Returns:
Tuple of (decoded
COVPropertyValue, new offset).
- class bac_py.services.cov.COVReference(monitored_property, cov_increment=None)[source]¶
Bases:
objectA single COV reference within a COV subscription specification.
SEQUENCE { monitoredProperty [0] BACnetPropertyReference, covIncrement [1] REAL OPTIONAL }
- Parameters:
monitored_property (BACnetPropertyReference)
cov_increment (float | None)
- monitored_property: BACnetPropertyReference¶
- classmethod decode(data, offset=0)[source]¶
Decode COVReference from data at a given offset.
- Parameters:
data (
memoryview|bytes) – Buffer to decode from.offset (
int(default:0)) – Starting byte offset.
- Return type:
- Returns:
Tuple of (decoded
COVReference, new offset).
- class bac_py.services.cov.COVSubscriptionSpecification(monitored_object_identifier, list_of_cov_references)[source]¶
Bases:
objectA single subscription specification within SubscribeCOVPropertyMultiple.
SEQUENCE { monitoredObjectIdentifier [0] BACnetObjectIdentifier, listOfCOVReferences [1] SEQUENCE OF COVReference }
- Parameters:
monitored_object_identifier (ObjectIdentifier)
list_of_cov_references (list[COVReference])
- monitored_object_identifier: ObjectIdentifier¶
- list_of_cov_references: list[COVReference]¶
- encode()[source]¶
Encode COVSubscriptionSpecification.
- Return type:
- Returns:
Encoded bytes for this subscription specification.
- classmethod decode(data, offset=0)[source]¶
Decode COVSubscriptionSpecification from data at a given offset.
- Parameters:
data (
memoryview|bytes) – Buffer to decode from.offset (
int(default:0)) – Starting byte offset.
- Return type:
- Returns:
Tuple of (decoded
COVSubscriptionSpecification, new offset).
- class bac_py.services.cov.SubscribeCOVPropertyMultipleRequest(subscriber_process_identifier, list_of_cov_subscription_specifications, issue_confirmed_notifications=None, lifetime=None, max_notification_delay=None)[source]¶
Bases:
objectSubscribeCOVPropertyMultiple-Request service parameters (Clause 13.16.1).
SubscribeCOVPropertyMultiple-Request ::= SEQUENCE { subscriberProcessIdentifier [0] Unsigned32, issueConfirmedNotifications [1] BOOLEAN OPTIONAL, lifetime [2] Unsigned OPTIONAL, maxNotificationDelay [3] Unsigned OPTIONAL, listOfCOVSubscriptionSpecifications [4] SEQUENCE OF ... }
- Parameters:
- list_of_cov_subscription_specifications: list[COVSubscriptionSpecification]¶
- encode()[source]¶
Encode SubscribeCOVPropertyMultiple-Request service parameters.
- Return type:
- Returns:
Encoded service request bytes.
- classmethod decode(data)[source]¶
Decode SubscribeCOVPropertyMultiple-Request from service request bytes.
- Parameters:
data (
memoryview|bytes) – Raw service request bytes.- Return type:
- Returns:
Decoded
SubscribeCOVPropertyMultipleRequest.
- class bac_py.services.cov.SubscribeCOVPropertyRequest(subscriber_process_identifier, monitored_object_identifier, monitored_property_identifier, issue_confirmed_notifications=None, lifetime=None, cov_increment=None)[source]¶
Bases:
objectSubscribeCOVProperty-Request service parameters (Clause 13.15.1).
SubscribeCOVProperty-Request ::= SEQUENCE { subscriberProcessIdentifier [0] Unsigned32, monitoredObjectIdentifier [1] BACnetObjectIdentifier, issueConfirmedNotifications [2] BOOLEAN OPTIONAL, lifetime [3] Unsigned OPTIONAL, monitoredPropertyIdentifier [4] BACnetPropertyReference, covIncrement [5] REAL OPTIONAL }
- Parameters:
subscriber_process_identifier (int)
monitored_object_identifier (ObjectIdentifier)
monitored_property_identifier (BACnetPropertyReference)
issue_confirmed_notifications (bool | None)
lifetime (int | None)
cov_increment (float | None)
- monitored_object_identifier: ObjectIdentifier¶
- monitored_property_identifier: BACnetPropertyReference¶
- encode()[source]¶
Encode SubscribeCOVProperty-Request service parameters.
- Return type:
- Returns:
Encoded service request bytes.
- classmethod decode(data)[source]¶
Decode SubscribeCOVProperty-Request from service request bytes.
- Parameters:
data (
memoryview|bytes) – Raw service request bytes.- Return type:
- Returns:
Decoded
SubscribeCOVPropertyRequest.
- class bac_py.services.cov.SubscribeCOVRequest(subscriber_process_identifier, monitored_object_identifier, issue_confirmed_notifications=None, lifetime=None)[source]¶
Bases:
objectSubscribeCOV-Request service parameters (Clause 13.14.1).
SubscribeCOV-Request ::= SEQUENCE { subscriberProcessIdentifier [0] Unsigned32, monitoredObjectIdentifier [1] BACnetObjectIdentifier, issueConfirmedNotifications [2] BOOLEAN OPTIONAL, lifetime [3] Unsigned OPTIONAL }
Per the spec, omitting both
issueConfirmedNotificationsandlifetimeconstitutes a subscription cancellation request.- Parameters:
subscriber_process_identifier (int)
monitored_object_identifier (ObjectIdentifier)
issue_confirmed_notifications (bool | None)
lifetime (int | None)
- monitored_object_identifier: ObjectIdentifier¶
- property is_cancellation: bool¶
Check whether this request is a subscription cancellation.
- Returns:
Truewhen both optional fields areNone(cancellation per spec).
- encode()[source]¶
Encode SubscribeCOV-Request service parameters.
- Return type:
- Returns:
Encoded service request bytes.
- classmethod decode(data)[source]¶
Decode SubscribeCOV-Request from service request bytes.
- Parameters:
data (
memoryview|bytes) – Raw service request bytes.- Return type:
- Returns:
Decoded
SubscribeCOVRequest.