Monitoring and Logging

Event Enrollment Object

BACnet Event Enrollment object per ASHRAE 135-2016 Clause 12.12.

class bac_py.objects.event_enrollment.EventEnrollmentObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Event Enrollment object (Clause 12.12).

Configures alarm/event detection for a monitored property. Specifies the event algorithm, parameters, and notification routing.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 9
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.ACKED_TRANSITIONS: PropertyDefinition(identifier=<PropertyIdentifier.ACKED_TRANSITIONS: 0>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.NOTIFICATION_CLASS: PropertyDefinition(identifier=<PropertyIdentifier.NOTIFICATION_CLASS: 17>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_ENABLE: 35>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.EVENT_STATE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_STATE: 36>, datatype=<enum 'EventState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<EventState.NORMAL: 0>), PropertyIdentifier.EVENT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_TYPE: 37>, datatype=<enum 'EventType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.NOTIFY_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.NOTIFY_TYPE: 72>, datatype=<enum 'NotifyType'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<NotifyType.ALARM: 0>), PropertyIdentifier.OBJECT_IDENTIFIER: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_IDENTIFIER: 75>, datatype=<class 'bac_py.types.primitives.ObjectIdentifier'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OBJECT_NAME: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_NAME: 77>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_PROPERTY_REFERENCE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_PROPERTY_REFERENCE: 78>, datatype=<class 'bac_py.types.constructed.BACnetDeviceObjectPropertyReference'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_TYPE: 79>, datatype=<enum 'ObjectType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.EVENT_PARAMETERS: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_PARAMETERS: 83>, datatype=<class 'object'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<Reliability.NO_FAULT_DETECTED: 0>), PropertyIdentifier.STATUS_FLAGS: PropertyDefinition(identifier=<PropertyIdentifier.STATUS_FLAGS: 111>, datatype=<class 'bac_py.types.constructed.StatusFlags'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.EVENT_TIME_STAMPS: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_TIME_STAMPS: 130>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.EVENT_DETECTION_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_DETECTION_ENABLE: 353>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=True), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None)}

Notification Class Object

BACnet Notification Class object per ASHRAE 135-2016 Clause 12.21.

class bac_py.objects.notification.NotificationClassObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Notification Class object (Clause 12.21).

Defines alarm/event notification routing. Each Notification Class specifies priorities, acknowledgment requirements, and a recipient list for to-offnormal, to-fault, and to-normal transitions.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 15
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.ACK_REQUIRED: PropertyDefinition(identifier=<PropertyIdentifier.ACK_REQUIRED: 1>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.NOTIFICATION_CLASS: PropertyDefinition(identifier=<PropertyIdentifier.NOTIFICATION_CLASS: 17>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.OBJECT_IDENTIFIER: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_IDENTIFIER: 75>, datatype=<class 'bac_py.types.primitives.ObjectIdentifier'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OBJECT_NAME: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_NAME: 77>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_TYPE: 79>, datatype=<enum 'ObjectType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.PRIORITY: PropertyDefinition(identifier=<PropertyIdentifier.PRIORITY: 86>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.RECIPIENT_LIST: PropertyDefinition(identifier=<PropertyIdentifier.RECIPIENT_LIST: 102>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None)}

Notification Forwarder Object

BACnet Notification Forwarder object per ASHRAE 135-2020 Clause 12.51.

class bac_py.objects.notification_forwarder.NotificationForwarderObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Notification Forwarder object (Clause 12.51).

Filters and routes event notifications to subscribed recipients.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 51
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_STATE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_STATE: 36>, datatype=<enum 'EventState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<EventState.NORMAL: 0>), PropertyIdentifier.OBJECT_IDENTIFIER: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_IDENTIFIER: 75>, datatype=<class 'bac_py.types.primitives.ObjectIdentifier'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OBJECT_NAME: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_NAME: 77>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_TYPE: 79>, datatype=<enum 'ObjectType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.STATUS_FLAGS: PropertyDefinition(identifier=<PropertyIdentifier.STATUS_FLAGS: 111>, datatype=<class 'bac_py.types.constructed.StatusFlags'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.LOCAL_FORWARDING_ONLY: PropertyDefinition(identifier=<PropertyIdentifier.LOCAL_FORWARDING_ONLY: 360>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=True), PropertyIdentifier.PROCESS_IDENTIFIER_FILTER: PropertyDefinition(identifier=<PropertyIdentifier.PROCESS_IDENTIFIER_FILTER: 361>, datatype=<class 'object'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.SUBSCRIBED_RECIPIENTS: PropertyDefinition(identifier=<PropertyIdentifier.SUBSCRIBED_RECIPIENTS: 362>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=[]), PropertyIdentifier.PORT_FILTER: PropertyDefinition(identifier=<PropertyIdentifier.PORT_FILTER: 363>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None)}

Alert Enrollment Object

BACnet Alert Enrollment object per ASHRAE 135-2020 Clause 12.52.

class bac_py.objects.alert_enrollment.AlertEnrollmentObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Alert Enrollment object (Clause 12.52).

Generates proprietary alert notifications for vendor-specific conditions.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 52
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.NOTIFICATION_CLASS: PropertyDefinition(identifier=<PropertyIdentifier.NOTIFICATION_CLASS: 17>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_ENABLE: 35>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.EVENT_STATE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_STATE: 36>, datatype=<enum 'EventState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<EventState.NORMAL: 0>), PropertyIdentifier.OBJECT_IDENTIFIER: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_IDENTIFIER: 75>, datatype=<class 'bac_py.types.primitives.ObjectIdentifier'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OBJECT_NAME: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_NAME: 77>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_TYPE: 79>, datatype=<enum 'ObjectType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.PRESENT_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.PRESENT_VALUE: 85>, datatype=<class 'object'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.STATUS_FLAGS: PropertyDefinition(identifier=<PropertyIdentifier.STATUS_FLAGS: 111>, datatype=<class 'bac_py.types.constructed.StatusFlags'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.EVENT_DETECTION_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_DETECTION_ENABLE: 353>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=True), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None)}

Event Log Object

BACnet Event Log object per ASHRAE 135-2020 Clause 12.27.

class bac_py.objects.event_log.EventLogObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Event Log object (Clause 12.27).

Stores event notification records in a circular buffer.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 25
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.NOTIFICATION_CLASS: PropertyDefinition(identifier=<PropertyIdentifier.NOTIFICATION_CLASS: 17>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_STATE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_STATE: 36>, datatype=<enum 'EventState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<EventState.NORMAL: 0>), PropertyIdentifier.OBJECT_IDENTIFIER: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_IDENTIFIER: 75>, datatype=<class 'bac_py.types.primitives.ObjectIdentifier'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OBJECT_NAME: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_NAME: 77>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_TYPE: 79>, datatype=<enum 'ObjectType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.STATUS_FLAGS: PropertyDefinition(identifier=<PropertyIdentifier.STATUS_FLAGS: 111>, datatype=<class 'bac_py.types.constructed.StatusFlags'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.BUFFER_SIZE: PropertyDefinition(identifier=<PropertyIdentifier.BUFFER_SIZE: 126>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=0), PropertyIdentifier.LOG_BUFFER: PropertyDefinition(identifier=<PropertyIdentifier.LOG_BUFFER: 131>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.LOG_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.LOG_ENABLE: 133>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=False), PropertyIdentifier.NOTIFICATION_THRESHOLD: PropertyDefinition(identifier=<PropertyIdentifier.NOTIFICATION_THRESHOLD: 137>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.RECORDS_SINCE_NOTIFICATION: PropertyDefinition(identifier=<PropertyIdentifier.RECORDS_SINCE_NOTIFICATION: 140>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=0), PropertyIdentifier.RECORD_COUNT: PropertyDefinition(identifier=<PropertyIdentifier.RECORD_COUNT: 141>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=0), PropertyIdentifier.START_TIME: PropertyDefinition(identifier=<PropertyIdentifier.START_TIME: 142>, datatype=<class 'bac_py.types.constructed.BACnetDateTime'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.STOP_TIME: PropertyDefinition(identifier=<PropertyIdentifier.STOP_TIME: 143>, datatype=<class 'bac_py.types.constructed.BACnetDateTime'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.STOP_WHEN_FULL: PropertyDefinition(identifier=<PropertyIdentifier.STOP_WHEN_FULL: 144>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=False), PropertyIdentifier.TOTAL_RECORD_COUNT: PropertyDefinition(identifier=<PropertyIdentifier.TOTAL_RECORD_COUNT: 145>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=0), PropertyIdentifier.LAST_NOTIFY_RECORD: PropertyDefinition(identifier=<PropertyIdentifier.LAST_NOTIFY_RECORD: 173>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=0), PropertyIdentifier.LOGGING_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.LOGGING_TYPE: 197>, datatype=<enum 'LoggingType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<LoggingType.TRIGGERED: 2>), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None)}

Audit Log Object

BACnet Audit Log object per ASHRAE 135-2020 Clause 12.64 (new in 2020).

class bac_py.objects.audit_log.AuditLogObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Audit Log object (Clause 12.64, new in 2020).

Circular buffer of audit log records with sequence numbering.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 62
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_STATE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_STATE: 36>, datatype=<enum 'EventState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<EventState.NORMAL: 0>), PropertyIdentifier.OBJECT_IDENTIFIER: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_IDENTIFIER: 75>, datatype=<class 'bac_py.types.primitives.ObjectIdentifier'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OBJECT_NAME: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_NAME: 77>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_TYPE: 79>, datatype=<enum 'ObjectType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.STATUS_FLAGS: PropertyDefinition(identifier=<PropertyIdentifier.STATUS_FLAGS: 111>, datatype=<class 'bac_py.types.constructed.StatusFlags'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.BUFFER_SIZE: PropertyDefinition(identifier=<PropertyIdentifier.BUFFER_SIZE: 126>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=100), PropertyIdentifier.LOG_BUFFER: PropertyDefinition(identifier=<PropertyIdentifier.LOG_BUFFER: 131>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.LOG_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.LOG_ENABLE: 133>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=False), PropertyIdentifier.RECORD_COUNT: PropertyDefinition(identifier=<PropertyIdentifier.RECORD_COUNT: 141>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=0), PropertyIdentifier.STOP_WHEN_FULL: PropertyDefinition(identifier=<PropertyIdentifier.STOP_WHEN_FULL: 144>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=False), PropertyIdentifier.TOTAL_RECORD_COUNT: PropertyDefinition(identifier=<PropertyIdentifier.TOTAL_RECORD_COUNT: 145>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=0), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.AUDIT_LEVEL: PropertyDefinition(identifier=<PropertyIdentifier.AUDIT_LEVEL: 498>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<AuditLevel.DEFAULT: 3>), PropertyIdentifier.AUDITABLE_OPERATIONS: PropertyDefinition(identifier=<PropertyIdentifier.AUDITABLE_OPERATIONS: 501>, datatype=<class 'bac_py.types.primitives.BitString'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None)}
append_record(notification)[source]

Append an audit notification to the log buffer.

Handles circular buffer overflow (oldest records removed) and stop-when-full behavior. Returns the record if it was added.

Return type:

BACnetAuditLogRecord | None

Parameters:

notification (BACnetAuditNotification)

query_records(start_at=None, count=100)[source]

Query records from the log buffer.

Parameters:
  • start_at (int | None (default: None)) – Starting sequence number (inclusive). If None, start from beginning.

  • count (int (default: 100)) – Maximum number of records to return.

Return type:

tuple[list[BACnetAuditLogRecord], bool]

Returns:

Tuple of (matching records, no_more_items flag).

Audit Reporter Object

BACnet Audit Reporter object per ASHRAE 135-2020 Clause 12.63 (new in 2020).

class bac_py.objects.audit_reporter.AuditReporterObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Audit Reporter object (Clause 12.63, new in 2020).

Monitors objects and generates audit notifications.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 61
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_STATE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_STATE: 36>, datatype=<enum 'EventState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<EventState.NORMAL: 0>), PropertyIdentifier.OBJECT_IDENTIFIER: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_IDENTIFIER: 75>, datatype=<class 'bac_py.types.primitives.ObjectIdentifier'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OBJECT_NAME: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_NAME: 77>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_TYPE: 79>, datatype=<enum 'ObjectType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.STATUS_FLAGS: PropertyDefinition(identifier=<PropertyIdentifier.STATUS_FLAGS: 111>, datatype=<class 'bac_py.types.constructed.StatusFlags'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.AUDIT_SOURCE_REPORTER: PropertyDefinition(identifier=<PropertyIdentifier.AUDIT_SOURCE_REPORTER: 497>, datatype=<class 'object'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.AUDIT_LEVEL: PropertyDefinition(identifier=<PropertyIdentifier.AUDIT_LEVEL: 498>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<AuditLevel.DEFAULT: 3>), PropertyIdentifier.AUDIT_NOTIFICATION_RECIPIENT: PropertyDefinition(identifier=<PropertyIdentifier.AUDIT_NOTIFICATION_RECIPIENT: 499>, datatype=<class 'object'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.AUDIT_PRIORITY_FILTER: PropertyDefinition(identifier=<PropertyIdentifier.AUDIT_PRIORITY_FILTER: 500>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=0), PropertyIdentifier.AUDITABLE_OPERATIONS: PropertyDefinition(identifier=<PropertyIdentifier.AUDITABLE_OPERATIONS: 501>, datatype=<class 'bac_py.types.primitives.BitString'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.MAXIMUM_SEND_DELAY: PropertyDefinition(identifier=<PropertyIdentifier.MAXIMUM_SEND_DELAY: 503>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=0), PropertyIdentifier.MONITORED_OBJECTS: PropertyDefinition(identifier=<PropertyIdentifier.MONITORED_OBJECTS: 504>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=[])}

Accumulator Object

BACnet Accumulator object per ASHRAE 135-2020 Clause 12.2.

class bac_py.objects.accumulator.AccumulatorObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Accumulator object (Clause 12.2).

Represents a pulse-counting device such as an energy meter or water meter. Present_Value accumulates counts; Scale and Prescale control unit conversion.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 23
INTRINSIC_EVENT_ALGORITHM: ClassVar[EventType | None] = 11

Event algorithm for intrinsic reporting, or None if not supported.

PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.NOTIFICATION_CLASS: PropertyDefinition(identifier=<PropertyIdentifier.NOTIFICATION_CLASS: 17>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.COV_INCREMENT: PropertyDefinition(identifier=<PropertyIdentifier.COV_INCREMENT: 22>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_ENABLE: 35>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_STATE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_STATE: 36>, datatype=<enum 'EventState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<EventState.NORMAL: 0>), PropertyIdentifier.HIGH_LIMIT: PropertyDefinition(identifier=<PropertyIdentifier.HIGH_LIMIT: 45>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.LOW_LIMIT: PropertyDefinition(identifier=<PropertyIdentifier.LOW_LIMIT: 59>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.MAX_PRES_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.MAX_PRES_VALUE: 65>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=4294967295), PropertyIdentifier.OBJECT_IDENTIFIER: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_IDENTIFIER: 75>, datatype=<class 'bac_py.types.primitives.ObjectIdentifier'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OBJECT_NAME: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_NAME: 77>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_TYPE: 79>, datatype=<enum 'ObjectType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OUT_OF_SERVICE: PropertyDefinition(identifier=<PropertyIdentifier.OUT_OF_SERVICE: 81>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=False), PropertyIdentifier.PRESENT_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.PRESENT_VALUE: 85>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=0), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.STATUS_FLAGS: PropertyDefinition(identifier=<PropertyIdentifier.STATUS_FLAGS: 111>, datatype=<class 'bac_py.types.constructed.StatusFlags'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.TIME_DELAY: PropertyDefinition(identifier=<PropertyIdentifier.TIME_DELAY: 113>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.UNITS: PropertyDefinition(identifier=<PropertyIdentifier.UNITS: 117>, datatype=<enum 'EngineeringUnits'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<EngineeringUnits.NO_UNITS: 95>), PropertyIdentifier.PRESCALE: PropertyDefinition(identifier=<PropertyIdentifier.PRESCALE: 185>, datatype=<class 'bac_py.types.constructed.BACnetPrescale'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.PULSE_RATE: PropertyDefinition(identifier=<PropertyIdentifier.PULSE_RATE: 186>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.SCALE: PropertyDefinition(identifier=<PropertyIdentifier.SCALE: 187>, datatype=<class 'bac_py.types.constructed.BACnetScale'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.VALUE_BEFORE_CHANGE: PropertyDefinition(identifier=<PropertyIdentifier.VALUE_BEFORE_CHANGE: 190>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.VALUE_SET: PropertyDefinition(identifier=<PropertyIdentifier.VALUE_SET: 191>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.VALUE_CHANGE_TIME: PropertyDefinition(identifier=<PropertyIdentifier.VALUE_CHANGE_TIME: 192>, datatype=<class 'bac_py.types.constructed.BACnetDateTime'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None)}

Averaging Object

BACnet Averaging object per ASHRAE 135-2020 Clause 12.5.

class bac_py.objects.averaging.AveragingObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Averaging object (Clause 12.5).

Periodically samples a referenced property and computes minimum, average, and maximum values over a window.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 18
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_STATE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_STATE: 36>, datatype=<enum 'EventState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<EventState.NORMAL: 0>), PropertyIdentifier.OBJECT_IDENTIFIER: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_IDENTIFIER: 75>, datatype=<class 'bac_py.types.primitives.ObjectIdentifier'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OBJECT_NAME: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_NAME: 77>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_PROPERTY_REFERENCE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_PROPERTY_REFERENCE: 78>, datatype=<class 'bac_py.types.constructed.BACnetDeviceObjectPropertyReference'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_TYPE: 79>, datatype=<enum 'ObjectType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.STATUS_FLAGS: PropertyDefinition(identifier=<PropertyIdentifier.STATUS_FLAGS: 111>, datatype=<class 'bac_py.types.constructed.StatusFlags'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.UNITS: PropertyDefinition(identifier=<PropertyIdentifier.UNITS: 117>, datatype=<enum 'EngineeringUnits'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<EngineeringUnits.NO_UNITS: 95>), PropertyIdentifier.ATTEMPTED_SAMPLES: PropertyDefinition(identifier=<PropertyIdentifier.ATTEMPTED_SAMPLES: 124>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=0), PropertyIdentifier.AVERAGE_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.AVERAGE_VALUE: 125>, datatype=<class 'float'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=0.0), PropertyIdentifier.MAXIMUM_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.MAXIMUM_VALUE: 135>, datatype=<class 'float'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=0.0), PropertyIdentifier.MINIMUM_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.MINIMUM_VALUE: 136>, datatype=<class 'float'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=0.0), PropertyIdentifier.VALID_SAMPLES: PropertyDefinition(identifier=<PropertyIdentifier.VALID_SAMPLES: 146>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=0), PropertyIdentifier.WINDOW_INTERVAL: PropertyDefinition(identifier=<PropertyIdentifier.WINDOW_INTERVAL: 147>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=60), PropertyIdentifier.WINDOW_SAMPLES: PropertyDefinition(identifier=<PropertyIdentifier.WINDOW_SAMPLES: 148>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=10), PropertyIdentifier.MAXIMUM_VALUE_TIMESTAMP: PropertyDefinition(identifier=<PropertyIdentifier.MAXIMUM_VALUE_TIMESTAMP: 149>, datatype=<class 'bac_py.types.constructed.BACnetDateTime'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.MINIMUM_VALUE_TIMESTAMP: PropertyDefinition(identifier=<PropertyIdentifier.MINIMUM_VALUE_TIMESTAMP: 150>, datatype=<class 'bac_py.types.constructed.BACnetDateTime'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.VARIANCE_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.VARIANCE_VALUE: 151>, datatype=<class 'float'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None)}

Pulse Converter Object

BACnet Pulse Converter object per ASHRAE 135-2020 Clause 12.23.

class bac_py.objects.pulse_converter.PulseConverterObject(instance_number, *, commandable=False, **initial_properties)[source]

Bases: BACnetObject

BACnet Pulse Converter object (Clause 12.23).

Converts pulse counts to analog values using a scale factor.

Parameters:
  • instance_number (int)

  • commandable (bool)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 24
INTRINSIC_EVENT_ALGORITHM: ClassVar[EventType | None] = 5

Event algorithm for intrinsic reporting, or None if not supported.

PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.ACKED_TRANSITIONS: PropertyDefinition(identifier=<PropertyIdentifier.ACKED_TRANSITIONS: 0>, datatype=<class 'bac_py.types.primitives.BitString'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.NOTIFICATION_CLASS: PropertyDefinition(identifier=<PropertyIdentifier.NOTIFICATION_CLASS: 17>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.COV_INCREMENT: PropertyDefinition(identifier=<PropertyIdentifier.COV_INCREMENT: 22>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.DEADBAND: PropertyDefinition(identifier=<PropertyIdentifier.DEADBAND: 25>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_ENABLE: 35>, datatype=<class 'bac_py.types.primitives.BitString'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_STATE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_STATE: 36>, datatype=<enum 'EventState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<EventState.NORMAL: 0>), PropertyIdentifier.HIGH_LIMIT: PropertyDefinition(identifier=<PropertyIdentifier.HIGH_LIMIT: 45>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.LIMIT_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.LIMIT_ENABLE: 52>, datatype=<class 'bac_py.types.primitives.BitString'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.LOW_LIMIT: PropertyDefinition(identifier=<PropertyIdentifier.LOW_LIMIT: 59>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.NOTIFY_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.NOTIFY_TYPE: 72>, datatype=<enum 'NotifyType'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.OBJECT_IDENTIFIER: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_IDENTIFIER: 75>, datatype=<class 'bac_py.types.primitives.ObjectIdentifier'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OBJECT_NAME: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_NAME: 77>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.OBJECT_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.OBJECT_TYPE: 79>, datatype=<enum 'ObjectType'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.OUT_OF_SERVICE: PropertyDefinition(identifier=<PropertyIdentifier.OUT_OF_SERVICE: 81>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=False), PropertyIdentifier.PRESENT_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.PRESENT_VALUE: 85>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=0.0), PropertyIdentifier.PRIORITY_ARRAY: PropertyDefinition(identifier=<PropertyIdentifier.PRIORITY_ARRAY: 87>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.RELINQUISH_DEFAULT: PropertyDefinition(identifier=<PropertyIdentifier.RELINQUISH_DEFAULT: 104>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.STATUS_FLAGS: PropertyDefinition(identifier=<PropertyIdentifier.STATUS_FLAGS: 111>, datatype=<class 'bac_py.types.constructed.StatusFlags'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.TIME_DELAY: PropertyDefinition(identifier=<PropertyIdentifier.TIME_DELAY: 113>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.UNITS: PropertyDefinition(identifier=<PropertyIdentifier.UNITS: 117>, datatype=<enum 'EngineeringUnits'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<EngineeringUnits.NO_UNITS: 95>), PropertyIdentifier.EVENT_TIME_STAMPS: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_TIME_STAMPS: 130>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.ADJUST_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.ADJUST_VALUE: 176>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.COUNT: PropertyDefinition(identifier=<PropertyIdentifier.COUNT: 177>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=0), PropertyIdentifier.COUNT_BEFORE_CHANGE: PropertyDefinition(identifier=<PropertyIdentifier.COUNT_BEFORE_CHANGE: 178>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=0), PropertyIdentifier.COUNT_CHANGE_TIME: PropertyDefinition(identifier=<PropertyIdentifier.COUNT_CHANGE_TIME: 179>, datatype=<class 'object'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.COV_PERIOD: PropertyDefinition(identifier=<PropertyIdentifier.COV_PERIOD: 180>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.INPUT_REFERENCE: PropertyDefinition(identifier=<PropertyIdentifier.INPUT_REFERENCE: 181>, datatype=<class 'object'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.LIMIT_MONITORING_INTERVAL: PropertyDefinition(identifier=<PropertyIdentifier.LIMIT_MONITORING_INTERVAL: 182>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.SCALE_FACTOR: PropertyDefinition(identifier=<PropertyIdentifier.SCALE_FACTOR: 188>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=1.0), PropertyIdentifier.UPDATE_TIME: PropertyDefinition(identifier=<PropertyIdentifier.UPDATE_TIME: 189>, datatype=<class 'object'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.EVENT_MESSAGE_TEXTS: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_MESSAGE_TEXTS: 351>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.EVENT_MESSAGE_TEXTS_CONFIG: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_MESSAGE_TEXTS_CONFIG: 352>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.EVENT_DETECTION_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_DETECTION_ENABLE: 353>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.COMMAND_TIME_ARRAY: PropertyDefinition(identifier=<PropertyIdentifier.COMMAND_TIME_ARRAY: 430>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.CURRENT_COMMAND_PRIORITY: PropertyDefinition(identifier=<PropertyIdentifier.CURRENT_COMMAND_PRIORITY: 431>, datatype=<class 'int'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.LAST_COMMAND_TIME: PropertyDefinition(identifier=<PropertyIdentifier.LAST_COMMAND_TIME: 432>, datatype=<class 'object'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.VALUE_SOURCE: PropertyDefinition(identifier=<PropertyIdentifier.VALUE_SOURCE: 433>, datatype=<class 'bac_py.types.constructed.BACnetValueSource'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.VALUE_SOURCE_ARRAY: PropertyDefinition(identifier=<PropertyIdentifier.VALUE_SOURCE_ARRAY: 434>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None)}