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.
| Property | Datatype | What it holds |
|---|---|---|
Object_Identifier | BACnetObjectIdentifier | The object’s type and instance number, unique within the device |
Object_Name | CharacterString | The human-readable point name, unique within the device |
Object_Type | BACnetObjectType | Always command for this object |
Present_Value | Unsigned | The action code to run; writing it triggers the matching action list. Writable |
In_Process | BOOLEAN | Whether an action sequence is currently running |
All_Writes_Successful | BOOLEAN | Whether every write in the last action list succeeded |
Action | BACnetARRAY[N] of BACnetActionList | The action lists, one per action code, that this object can run |
Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | The 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.
| Property | Datatype | Group |
|---|---|---|
Description | CharacterString | General |
Action_Text | BACnetARRAY[N] of CharacterString | General |
Status_Flags | BACnetStatusFlags | General |
Reliability | BACnetReliability | Fault detection |
Event_State | BACnetEventState | Intrinsic reporting |
Event_Detection_Enable | BOOLEAN | Intrinsic reporting |
Notification_Class | Unsigned | Intrinsic reporting |
Event_Enable | BACnetEventTransitionBits | Intrinsic reporting |
Acked_Transitions | BACnetEventTransitionBits | Intrinsic reporting |
Notify_Type | BACnetNotifyType | Intrinsic reporting |
Event_Time_Stamps | BACnetARRAY[3] of BACnetTimeStamp | Intrinsic reporting |
Event_Message_Texts | BACnetARRAY[3] of CharacterString | Intrinsic reporting |
Event_Message_Texts_Config | BACnetARRAY[3] of CharacterString | Intrinsic reporting |
Reliability_Evaluation_Inhibit | BOOLEAN | Fault detection |
Value_Source | BACnetValueSource | Commanding |
Audit_Level | BACnetAuditLevel | Auditing |
Auditable_Operations | BACnetAuditOperationFlags | Auditing |
Tags | BACnetARRAY[N] of BACnetNameValue | Tagging and profile |
Profile_Location | CharacterString | Tagging and profile |
Profile_Name | CharacterString | Tagging and profile |
Related Objects
- 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.