BACnet Command Object

The BACnet Command object (Clause 12.10) runs a multi-write action list when its Present_Value is written to drive a named state, with property tables.

What the Command Object Is

The Command object, defined in Clause 12.10 of ANSI/ASHRAE 135-2024, is how a BACnet device represents a multi-action command procedure: writing one action code to Present_Value triggers the object to write a whole set of values to a group of other objects’ properties. It is used to establish a named operating context in a single write, for example driving a zone into UNOCCUPIED, WARMUP, or OCCUPIED, where each state requires many setpoints and outputs to change together.

The relationship between an action code and the writes it performs is held in the Action property, an array of action lists indexed by the value written to Present_Value. Normally the object is passive with In_Process false. When Present_Value is written, it begins the selected action sequence. Command objects that support intrinsic reporting apply no event algorithm; their intrinsic reporting is limited to fault conditions.

Where You’ll See It

  • Mode selectors. A single Command object whose action codes map to UNOCCUPIED, WARMUP, and OCCUPIED, each writing the setpoints and outputs that state needs.
  • Scene and macro triggers. An operator or schedule writes one value to run a predefined set of writes across many objects.
  • Coordinated changeovers. A seasonal or occupancy changeover that must push consistent values to a group of controllers at once.

How Commanding Works

Writing an action code to Present_Value selects one of the action lists in the Action property and runs it. The object sets In_Process to true and, for each entry in the list, writes a particular value to a particular property of a particular object, which may be local or in a remote device (remote writes are allowed but not required). If a write is attempted through WriteProperty while In_Process is already true, the object returns a BUSY error rather than starting a second sequence. When the list finishes, In_Process returns to false and All_Writes_Successful reports whether every write in the list succeeded. The object does not roll back earlier writes if a later one fails, so All_Writes_Successful false means the target state was only partially applied. This is an action-list model, not a priority-array model: the Command object performs writes, it does not hold an arbitrated output.

Required Properties

Clause 12.10 requires every Command object to provide these properties. Datatypes are the spec’s names: Unsigned is an integer, BOOLEAN a true/false flag, and the BACnet-prefixed types are structured values defined by the standard.

PropertyDatatypeWhat it holds
Object_IdentifierBACnetObjectIdentifierThe object’s type and instance number, unique within the device
Object_NameCharacterStringThe human-readable point name, unique within the device
Object_TypeBACnetObjectTypeAlways command for this object
Present_ValueUnsignedThe action code to run; writing it triggers the matching action list. Writable
In_ProcessBOOLEANWhether an action sequence is currently running
All_Writes_SuccessfulBOOLEANWhether every write in the last action list succeeded
ActionBACnetARRAY[N] of BACnetActionListThe action lists, one per action code, that this object can run
Property_ListBACnetARRAY[N] of BACnetPropertyIdentifierThe list of properties this instance actually implements

Optional Properties

The property integrators meet most is Action_Text, the human-readable label for each action code. The intrinsic-reporting group generally appears or is absent as a set and reports faults only. Audit_Level and Auditable_Operations are the audit-logging controls added in 135-2024.

PropertyDatatypeGroup
DescriptionCharacterStringGeneral
Action_TextBACnetARRAY[N] of CharacterStringGeneral
Status_FlagsBACnetStatusFlagsGeneral
ReliabilityBACnetReliabilityFault detection
Event_StateBACnetEventStateIntrinsic reporting
Event_Detection_EnableBOOLEANIntrinsic reporting
Notification_ClassUnsignedIntrinsic reporting
Event_EnableBACnetEventTransitionBitsIntrinsic reporting
Acked_TransitionsBACnetEventTransitionBitsIntrinsic reporting
Notify_TypeBACnetNotifyTypeIntrinsic reporting
Event_Time_StampsBACnetARRAY[3] of BACnetTimeStampIntrinsic reporting
Event_Message_TextsBACnetARRAY[3] of CharacterStringIntrinsic reporting
Event_Message_Texts_ConfigBACnetARRAY[3] of CharacterStringIntrinsic reporting
Reliability_Evaluation_InhibitBOOLEANFault detection
Value_SourceBACnetValueSourceCommanding
Audit_LevelBACnetAuditLevelAuditing
Auditable_OperationsBACnetAuditOperationFlagsAuditing
TagsBACnetARRAY[N] of BACnetNameValueTagging and profile
Profile_LocationCharacterStringTagging and profile
Profile_NameCharacterStringTagging and profile
  • Multi-state Value: a commandable named-state value, when a single mode value is needed without the multi-write action list.
  • Channel: forwards one written value to many properties, where the Command object writes different values to each target.

What Chipkin Provides

The Command object, including its indexed action lists and in-process guarding, is a first-class object type in the CAS BACnet Stack. Talk to us about modeling your device’s points.