Control and Scheduling

Calendar Object

BACnet Calendar object per ASHRAE 135-2020 Clause 12.9.

bac_py.objects.calendar.matches_date_range(entry, year, month, day)[source]

Check if a concrete date falls within an inclusive BACnetDateRange.

Return type:

bool

Parameters:
bac_py.objects.calendar.matches_calendar_entry(entry, year, month, day, day_of_week)[source]

Check if a concrete date matches a BACnetCalendarEntry.

Public helper also used by ScheduleEngine for exception_schedule evaluation.

Return type:

bool

Parameters:
class bac_py.objects.calendar.CalendarObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Calendar object (Clause 12.9).

A Calendar object maintains a list of dates, date ranges, and date patterns. Present_Value is TRUE when the current date matches any entry in Date_List.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 6
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.DATE_LIST: PropertyDefinition(identifier=<PropertyIdentifier.DATE_LIST: 23>, datatype=<class 'list'>, 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.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 'bool'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=False), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None)}
evaluate(today=None)[source]

Evaluate the calendar against today and update present_value.

Iterates date_list and sets present_value to True if any entry matches, False otherwise.

Return type:

bool

Parameters:

today (date | None)

Args:

today: Date to evaluate against. Defaults to date.today().

Returns:

The resulting present_value.

Schedule Object

BACnet Schedule object per ASHRAE 135-2016 Clause 12.24.

class bac_py.objects.schedule.ScheduleObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Schedule object (Clause 12.24).

Provides time-based scheduling with weekly schedules and exception schedules. Present_Value is computed from the active schedule entry for the current time.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 17
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.EFFECTIVE_PERIOD: PropertyDefinition(identifier=<PropertyIdentifier.EFFECTIVE_PERIOD: 32>, datatype=<class 'bac_py.types.constructed.BACnetDateRange'>, 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=False, default=<EventState.NORMAL: 0>), PropertyIdentifier.EXCEPTION_SCHEDULE: PropertyDefinition(identifier=<PropertyIdentifier.EXCEPTION_SCHEDULE: 38>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.LIST_OF_OBJECT_PROPERTY_REFERENCES: PropertyDefinition(identifier=<PropertyIdentifier.LIST_OF_OBJECT_PROPERTY_REFERENCES: 54>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, 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 'object'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None), PropertyIdentifier.PRIORITY_FOR_WRITING: PropertyDefinition(identifier=<PropertyIdentifier.PRIORITY_FOR_WRITING: 88>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=16), 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.WEEKLY_SCHEDULE: PropertyDefinition(identifier=<PropertyIdentifier.WEEKLY_SCHEDULE: 123>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.SCHEDULE_DEFAULT: PropertyDefinition(identifier=<PropertyIdentifier.SCHEDULE_DEFAULT: 174>, datatype=<class 'object'>, 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)}

TrendLog Object

BACnet Trend Log object per ASHRAE 135-2020 Clause 12.25.

class bac_py.objects.trendlog.TrendLogObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Trend Log object (Clause 12.25).

Provides historical data logging with buffer management. Records are stored in an internal buffer and accessible via Log_Buffer.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 20
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_DEVICE_OBJECT_PROPERTY: PropertyDefinition(identifier=<PropertyIdentifier.LOG_DEVICE_OBJECT_PROPERTY: 132>, datatype=<class 'bac_py.types.constructed.BACnetDeviceObjectPropertyReference'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.LOG_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.LOG_ENABLE: 133>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=False), PropertyIdentifier.LOG_INTERVAL: PropertyDefinition(identifier=<PropertyIdentifier.LOG_INTERVAL: 134>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), 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.ALIGN_INTERVALS: PropertyDefinition(identifier=<PropertyIdentifier.ALIGN_INTERVALS: 193>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.INTERVAL_OFFSET: PropertyDefinition(identifier=<PropertyIdentifier.INTERVAL_OFFSET: 195>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.LOGGING_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.LOGGING_TYPE: 197>, datatype=<enum 'LoggingType'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<LoggingType.POLLED: 0>), PropertyIdentifier.TRIGGER: PropertyDefinition(identifier=<PropertyIdentifier.TRIGGER: 205>, 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)}
append_record(record)[source]

Append a log record to the buffer.

Handles circular overwrite vs stop-when-full semantics.

Return type:

bool

Parameters:

record (BACnetLogRecord)

Returns:

True if the record was appended, False if the buffer is full and stop_when_full is set.

TrendLog Multiple Object

BACnet Trend Log Multiple object per ASHRAE 135-2020 Clause 12.30.

class bac_py.objects.trendlog_multiple.TrendLogMultipleObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Trend Log Multiple object (Clause 12.30).

Logs multiple properties simultaneously per sampling interval. Each log record contains values for all monitored properties.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 27
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_DEVICE_OBJECT_PROPERTY: PropertyDefinition(identifier=<PropertyIdentifier.LOG_DEVICE_OBJECT_PROPERTY: 132>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=[]), PropertyIdentifier.LOG_ENABLE: PropertyDefinition(identifier=<PropertyIdentifier.LOG_ENABLE: 133>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=False), PropertyIdentifier.LOG_INTERVAL: PropertyDefinition(identifier=<PropertyIdentifier.LOG_INTERVAL: 134>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), 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.ALIGN_INTERVALS: PropertyDefinition(identifier=<PropertyIdentifier.ALIGN_INTERVALS: 193>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.INTERVAL_OFFSET: PropertyDefinition(identifier=<PropertyIdentifier.INTERVAL_OFFSET: 195>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.LOGGING_TYPE: PropertyDefinition(identifier=<PropertyIdentifier.LOGGING_TYPE: 197>, datatype=<enum 'LoggingType'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<LoggingType.POLLED: 0>), PropertyIdentifier.TRIGGER: PropertyDefinition(identifier=<PropertyIdentifier.TRIGGER: 205>, 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)}

Loop Object

BACnet Loop object per ASHRAE 135-2020 Clause 12.17.

class bac_py.objects.loop.LoopObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Loop object (Clause 12.17).

Represents a PID control loop. Present_Value is the manipulated variable output. The control algorithm parameters (P, I, D constants) define the loop behavior.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 12
INTRINSIC_EVENT_ALGORITHM: ClassVar[EventType | None] = 4

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

PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.ACTION: PropertyDefinition(identifier=<PropertyIdentifier.ACTION: 2>, datatype=<enum 'Action'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<Action.DIRECT: 0>), PropertyIdentifier.BIAS: PropertyDefinition(identifier=<PropertyIdentifier.BIAS: 14>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, 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.CONTROLLED_VARIABLE_REFERENCE: PropertyDefinition(identifier=<PropertyIdentifier.CONTROLLED_VARIABLE_REFERENCE: 19>, datatype=<class 'bac_py.types.constructed.BACnetObjectPropertyReference'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.CONTROLLED_VARIABLE_UNITS: PropertyDefinition(identifier=<PropertyIdentifier.CONTROLLED_VARIABLE_UNITS: 20>, datatype=<enum 'EngineeringUnits'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<EngineeringUnits.NO_UNITS: 95>), PropertyIdentifier.CONTROLLED_VARIABLE_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.CONTROLLED_VARIABLE_VALUE: 21>, datatype=<class 'float'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=0.0), 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.DERIVATIVE_CONSTANT: PropertyDefinition(identifier=<PropertyIdentifier.DERIVATIVE_CONSTANT: 26>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=0.0), PropertyIdentifier.DERIVATIVE_CONSTANT_UNITS: PropertyDefinition(identifier=<PropertyIdentifier.DERIVATIVE_CONSTANT_UNITS: 27>, datatype=<enum 'EngineeringUnits'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=<EngineeringUnits.NO_UNITS: 95>), PropertyIdentifier.DESCRIPTION: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION: 28>, datatype=<class 'str'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.ERROR_LIMIT: PropertyDefinition(identifier=<PropertyIdentifier.ERROR_LIMIT: 34>, datatype=<class 'float'>, 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.INTEGRAL_CONSTANT: PropertyDefinition(identifier=<PropertyIdentifier.INTEGRAL_CONSTANT: 49>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=0.0), PropertyIdentifier.INTEGRAL_CONSTANT_UNITS: PropertyDefinition(identifier=<PropertyIdentifier.INTEGRAL_CONSTANT_UNITS: 50>, datatype=<enum 'EngineeringUnits'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=<EngineeringUnits.NO_UNITS: 95>), PropertyIdentifier.MANIPULATED_VARIABLE_REFERENCE: PropertyDefinition(identifier=<PropertyIdentifier.MANIPULATED_VARIABLE_REFERENCE: 60>, datatype=<class 'bac_py.types.constructed.BACnetObjectPropertyReference'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.MAXIMUM_OUTPUT: PropertyDefinition(identifier=<PropertyIdentifier.MAXIMUM_OUTPUT: 61>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=100.0), PropertyIdentifier.MINIMUM_OUTPUT: PropertyDefinition(identifier=<PropertyIdentifier.MINIMUM_OUTPUT: 68>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=0.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.OUT_OF_SERVICE: PropertyDefinition(identifier=<PropertyIdentifier.OUT_OF_SERVICE: 81>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=False), PropertyIdentifier.OUTPUT_UNITS: PropertyDefinition(identifier=<PropertyIdentifier.OUTPUT_UNITS: 82>, datatype=<enum 'EngineeringUnits'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<EngineeringUnits.NO_UNITS: 95>), PropertyIdentifier.PRESENT_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.PRESENT_VALUE: 85>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=0.0), PropertyIdentifier.PRIORITY_FOR_WRITING: PropertyDefinition(identifier=<PropertyIdentifier.PRIORITY_FOR_WRITING: 88>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=16), PropertyIdentifier.PROPORTIONAL_CONSTANT: PropertyDefinition(identifier=<PropertyIdentifier.PROPORTIONAL_CONSTANT: 93>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=0.0), PropertyIdentifier.PROPORTIONAL_CONSTANT_UNITS: PropertyDefinition(identifier=<PropertyIdentifier.PROPORTIONAL_CONSTANT_UNITS: 94>, datatype=<enum 'EngineeringUnits'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=<EngineeringUnits.NO_UNITS: 95>), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.SETPOINT: PropertyDefinition(identifier=<PropertyIdentifier.SETPOINT: 108>, datatype=<class 'float'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=0.0), PropertyIdentifier.SETPOINT_REFERENCE: PropertyDefinition(identifier=<PropertyIdentifier.SETPOINT_REFERENCE: 109>, datatype=<class 'bac_py.types.constructed.BACnetObjectPropertyReference'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, 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.UPDATE_INTERVAL: PropertyDefinition(identifier=<PropertyIdentifier.UPDATE_INTERVAL: 118>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=100), PropertyIdentifier.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None)}

Timer Object

BACnet Timer object per ASHRAE 135-2020 Clause 12.57.

class bac_py.objects.timer.TimerObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Timer object (Clause 12.57).

Provides countdown and periodic timer functionality with a state machine (IDLE, RUNNING, EXPIRED).

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 31
INTRINSIC_EVENT_ALGORITHM: ClassVar[EventType | None] = 22

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.ALARM_VALUES: PropertyDefinition(identifier=<PropertyIdentifier.ALARM_VALUES: 7>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, 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.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.LIST_OF_OBJECT_PROPERTY_REFERENCES: PropertyDefinition(identifier=<PropertyIdentifier.LIST_OF_OBJECT_PROPERTY_REFERENCES: 54>, datatype=<class 'list'>, 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=False, default=None), PropertyIdentifier.MIN_PRES_VALUE: PropertyDefinition(identifier=<PropertyIdentifier.MIN_PRES_VALUE: 69>, datatype=<class 'int'>, 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 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=0), PropertyIdentifier.PRIORITY_FOR_WRITING: PropertyDefinition(identifier=<PropertyIdentifier.PRIORITY_FOR_WRITING: 88>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.RELIABILITY: PropertyDefinition(identifier=<PropertyIdentifier.RELIABILITY: 103>, datatype=<enum 'Reliability'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.RESOLUTION: PropertyDefinition(identifier=<PropertyIdentifier.RESOLUTION: 106>, datatype=<class 'int'>, 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.EVENT_TIME_STAMPS: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_TIME_STAMPS: 130>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.UPDATE_TIME: PropertyDefinition(identifier=<PropertyIdentifier.UPDATE_TIME: 189>, datatype=<class 'bac_py.types.constructed.BACnetDateTime'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.EXPIRATION_TIME: PropertyDefinition(identifier=<PropertyIdentifier.EXPIRATION_TIME: 270>, datatype=<class 'bac_py.types.constructed.BACnetDateTime'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, 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.DEFAULT_TIMEOUT: PropertyDefinition(identifier=<PropertyIdentifier.DEFAULT_TIMEOUT: 393>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.INITIAL_TIMEOUT: PropertyDefinition(identifier=<PropertyIdentifier.INITIAL_TIMEOUT: 394>, datatype=<class 'int'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=0), PropertyIdentifier.LAST_STATE_CHANGE: PropertyDefinition(identifier=<PropertyIdentifier.LAST_STATE_CHANGE: 395>, datatype=<enum 'TimerTransition'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<TimerTransition.NONE: 0>), PropertyIdentifier.STATE_CHANGE_VALUES: PropertyDefinition(identifier=<PropertyIdentifier.STATE_CHANGE_VALUES: 396>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.TIMER_RUNNING: PropertyDefinition(identifier=<PropertyIdentifier.TIMER_RUNNING: 397>, datatype=<class 'bool'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=False), PropertyIdentifier.TIMER_STATE: PropertyDefinition(identifier=<PropertyIdentifier.TIMER_STATE: 398>, datatype=<enum 'TimerState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<TimerState.IDLE: 0>)}

Staging Object

BACnet Staging object per ASHRAE 135-2020 Clause 12.62 (new in 2020).

class bac_py.objects.staging.StagingObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Staging object (Clause 12.62, new in 2020).

Two-phase write mechanism. Writes to Present_Value are staged and can be committed or abandoned. State machine transitions: NOT_STAGED -> STAGING -> STAGED -> COMMITTING -> COMMITTED or STAGED -> ABANDONING -> ABANDONED.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 60
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.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 '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=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.PRESENT_STAGE: PropertyDefinition(identifier=<PropertyIdentifier.PRESENT_STAGE: 493>, datatype=<enum 'StagingState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<StagingState.NOT_STAGED: 0>), PropertyIdentifier.STAGES: PropertyDefinition(identifier=<PropertyIdentifier.STAGES: 494>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None), PropertyIdentifier.STAGE_NAMES: PropertyDefinition(identifier=<PropertyIdentifier.STAGE_NAMES: 495>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.TARGET_REFERENCES: PropertyDefinition(identifier=<PropertyIdentifier.TARGET_REFERENCES: 496>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=None)}

Program Object

BACnet Program object per ASHRAE 135-2016 Clause 12.22.

class bac_py.objects.program.ProgramObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Program object (Clause 12.22).

Represents an application program that can be loaded, run, halted, and unloaded. Program_State indicates the current execution state; Program_Change requests state transitions.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 16
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.DESCRIPTION_OF_HALT: PropertyDefinition(identifier=<PropertyIdentifier.DESCRIPTION_OF_HALT: 29>, datatype=<class 'str'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.EVENT_STATE: PropertyDefinition(identifier=<PropertyIdentifier.EVENT_STATE: 36>, datatype=<enum 'EventState'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=<EventState.NORMAL: 0>), PropertyIdentifier.INSTANCE_OF: PropertyDefinition(identifier=<PropertyIdentifier.INSTANCE_OF: 48>, datatype=<class 'str'>, access=<PropertyAccess.READ_ONLY: 0>, 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.PROGRAM_CHANGE: PropertyDefinition(identifier=<PropertyIdentifier.PROGRAM_CHANGE: 90>, datatype=<enum 'ProgramChange'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=<ProgramChange.READY: 0>), PropertyIdentifier.PROGRAM_LOCATION: PropertyDefinition(identifier=<PropertyIdentifier.PROGRAM_LOCATION: 91>, datatype=<class 'str'>, access=<PropertyAccess.READ_ONLY: 0>, required=False, default=None), PropertyIdentifier.PROGRAM_STATE: PropertyDefinition(identifier=<PropertyIdentifier.PROGRAM_STATE: 92>, datatype=<enum 'ProgramState'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=<ProgramState.IDLE: 0>), PropertyIdentifier.REASON_FOR_HALT: PropertyDefinition(identifier=<PropertyIdentifier.REASON_FOR_HALT: 100>, datatype=<class 'int'>, 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.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)}

Command Object

BACnet Command object per ASHRAE 135-2020 Clause 12.10.

class bac_py.objects.command.CommandObject(instance_number, **initial_properties)[source]

Bases: BACnetObject

BACnet Command object (Clause 12.10).

Executes an action list when Present_Value is written. Each action specifies a target object, property, and value.

Parameters:
  • instance_number (int)

  • initial_properties (Any)

OBJECT_TYPE: ClassVar[ObjectType] = 7
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {PropertyIdentifier.ACTION: PropertyDefinition(identifier=<PropertyIdentifier.ACTION: 2>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=True, default=[]), PropertyIdentifier.ACTION_TEXT: PropertyDefinition(identifier=<PropertyIdentifier.ACTION_TEXT: 3>, datatype=<class 'list'>, access=<PropertyAccess.READ_WRITE: 1>, required=False, default=None), PropertyIdentifier.ALL_WRITES_SUCCESSFUL: PropertyDefinition(identifier=<PropertyIdentifier.ALL_WRITES_SUCCESSFUL: 9>, datatype=<class 'bool'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=True), 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.IN_PROCESS: PropertyDefinition(identifier=<PropertyIdentifier.IN_PROCESS: 47>, datatype=<class 'bool'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=False), 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 'int'>, access=<PropertyAccess.READ_WRITE: 1>, 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.PROPERTY_LIST: PropertyDefinition(identifier=<PropertyIdentifier.PROPERTY_LIST: 371>, datatype=<class 'list'>, access=<PropertyAccess.READ_ONLY: 0>, required=True, default=None)}