BACnet Write Priority Array Explained

BACnetpriority arraycommandable objectsWritePropertyRelinquish_Default
May 15, 2026|8 min read

BACnet commandable objects use a 16-slot Priority_Array to arbitrate among everything that can write a value. Each WriteProperty request carries a value and a priority (1 is highest, 16 is lowest); the object's Present_Value is taken from the highest non-NULL slot, or from Relinquish_Default if every slot is NULL. The traps: a write at priority 16 silently loses to anything written higher, and a slot keeps its value indefinitely until a NULL is written at that same priority to release it.

Symptoms: Why an Operator Command Won't Stick

Priority array problems rarely look like protocol errors. They look like control logic that has gone deaf. The pattern usually shows up like this:

What the Priority Array Actually Is

The Priority_Array is a property defined by ASHRAE Standard 135 on every commandable object: Analog Output, Binary Output, Multi-State Output, and Analog/Binary/Multi-State Value objects that have been declared commandable. It is an array of exactly 16 entries indexed 1 through 16. Each entry holds either a value of the object's native data type or the special value NULL, which means "this slot is relinquished."

The Present_Value of the object is computed, not stored independently. The BACnet stack walks the array from index 1 (highest priority) to 16 (lowest) and returns the first non-NULL value it finds. If every slot is NULL, the object returns its Relinquish_Default property instead. This algorithm runs on every read and after every write, so changes propagate instantly.

Three more properties are involved and worth knowing by name:

How to Write a Value (and Release It Later)

A WriteProperty service request to a commandable object accepts an optional priority parameter. The BACnet standard specifies that if a client omits the priority, the write is applied at priority 16 (the lowest). Most BAS supervisors expose this as a numeric field; many also allow writing the literal NULL to relinquish.

For Python automation, both BAC0 and BACpypes3 expose a priority parameter on their write methods. Library APIs change across releases, so check the current PyPI page for syntax; our BAC0 BACnet scripting tutorial walks through a first end-to-end write, and the BACpypes documentation covers the lower-level WriteProperty service.

The Recommended Priority Assignments

ASHRAE 135 publishes a recommended priority assignment list (informative, not normative). Vendors and integrators broadly follow it, but it is not enforced by the protocol—any priority can carry any kind of command. The conventional uses:

PriorityRecommended Use
1Manual Life Safety
2Automatic Life Safety
3 – 4Available
5Critical Equipment Control
6Minimum On/Off
7Available
8Manual Operator
9 – 15Available
16Available (default for writes that omit priority)

The two life-safety priorities and priority 5 (Critical Equipment Control) are reserved by convention for safety and protection logic—fire alarm interlocks, freeze protection, smoke control, equipment damage prevention. Operator overrides land at priority 8 in most BAS front-ends. Schedules, sequences, and analytics writes typically land somewhere between 9 and 16, with priority 16 being the most common default.

Common Pitfalls

When to Escalate

Most priority array problems are configuration issues, not protocol bugs. Escalate to the vendor when:

Before contacting support, capture a ReadProperty / WriteProperty exchange showing the unexpected behavior. Confirm the device ID on the responses matches the device you intend to talk to—crossed identities can masquerade as priority bugs. Our duplicate device ID guide covers how that confusion sets in.

Source Attribution

The technical guidance in this entry is informed by the following sources:

Additional testing and field validation by SiteConduit.

priority arraycommandable objectsWritePropertyRelinquish_DefaultBACnet

Was this article helpful?

Related Articles

Need to do this remotely? SiteConduit provides Layer 2 access that preserves BACnet broadcasts — no BBMD needed for remote sessions. Join the waitlist.

SC

SiteConduit Technical Team

Idea Networks Inc.

SiteConduit builds managed remote access for building automation. Our knowledge base is maintained by BAS professionals with hands-on experience deploying and troubleshooting BACnet, Niagara, Modbus, and Facility Explorer systems.