BACnet ReadProperty Service

ReadProperty is BACnet's core read service (Clause 15.5): how a read works, the error codes it returns, and which device profiles require it.

What ReadProperty Is

ReadProperty is the fundamental read operation in BACnet, defined in Clause 15.5 of ANSI/ASHRAE 135-2024 as one of the object-access services. A client uses it to request the value of one property of one BACnet object, standard or proprietary alike. (A handful of list-valued properties, such as a Trend Log’s Log_Buffer, are not required to be readable with ReadProperty.) It is a confirmed service: every request that reaches the device gets back an acknowledgment carrying the value, or an error, reject, or abort naming why not.

If a BACnet device does only one thing, it does ReadProperty. The service is the floor of interoperability that every other capability builds on.

How It Works

The client sends a request naming the target object (for example Analog Input 3), the property (for example Present_Value), and optionally an array index for array-valued properties. The device answers with the property value, or with an error naming the failure. One request reads one property; a client that needs many values in one exchange uses ReadPropertyMultiple instead, which trades one round trip per point for one larger request. The array index is how you read a long array one element at a time: index 0 returns the element count, index N the Nth element. That is the standard workaround for reading a large Object_List from a device that cannot fit the whole list in one response.

Two field-useful wildcards from Clause 15.5.2: reading Device 4194303 makes the device answer as its own Device object. Every BACnet device has exactly one Device object whose instance number is the device’s network-wide identity, and this wildcard is how tools learn that number when the device never announces itself with I-Am. Similarly, reading Network Port 4194303 answers as the Network Port object of the port the request arrived on.

Where You’ll See It

  • Discovery and browsing. When a tool like the CAS BACnet Explorer walks a device’s object list and shows values, that walk is ReadProperty (and ReadPropertyMultiple) traffic.
  • BMS polling. A head end (the central BMS server) that polls temperatures and statuses on an interval is issuing ReadProperty requests. Sites where polling traffic starts to saturate the network, especially MS/TP segments (BACnet’s RS-485 serial transport), move to COV (Change of Value) subscriptions, where the device pushes updates instead.
  • Commissioning checks. Verifying a point one value at a time during checkout is a ReadProperty exchange per check.

ReadProperty Error Codes

Clause 15.5 defines the error class and code a device returns for each failure. The general error model lives in Clause 18 of the standard.

SituationError classError code
Specified object does not existOBJECTUNKNOWN_OBJECT
Specified property does not existPROPERTYUNKNOWN_PROPERTY
Array index provided but the property is not an arrayPROPERTYPROPERTY_IS_NOT_AN_ARRAY
Array index greater than the current array lengthPROPERTYINVALID_ARRAY_INDEX
Property is not accessible using this servicePROPERTYREAD_ACCESS_DENIED

Reading these in the field:

  • UNKNOWN_OBJECT on a point a discovery tool listed usually means the object list changed or the request went to the wrong device instance.
  • UNKNOWN_PROPERTY on a standard property usually means the device implements an older protocol revision.
  • READ_ACCESS_DENIED is rare: the property exists, but the device refuses to serve it through ReadProperty (some protected or list-valued properties).
  • No response at all is not a ReadProperty error. A timeout means the request never reached the device or the reply never came back: a transport or addressing problem, not an object problem.
  • Asking for a large value (like a full Object_List) from a device without segmentation support (the ability to split a large response across multiple packets) fails with an abort, not an error. The fix is the read-by-array-index workaround described above.

Profiles That Require It

Every standardized device profile in Annex L requires ReadProperty. It is the one service common to all of them: the profiles differ in whether the device must also initiate reads as a client, not in whether it must answer them.

Profile familyProfiles
Operator interfacesB-XAWS, B-AWS, B-OWS, B-OD
ControllersB-BC, B-AAC, B-ASC, B-SA, B-SS
Life safetyB-ALSC, B-LSC (controllers); B-ALSWS, B-LSWS, B-LSAP (operator interfaces)
Access controlB-AACC, B-ACC (controllers); B-AACWS, B-ACWS, B-ACSD (operator interfaces)
LightingB-LD, B-LS (controllers); B-LCS, B-ALCS (control stations); B-ALWS, B-LOD (operator interfaces)
ElevatorsB-AEC, B-EC, B-EM (controllers); B-AEWS, B-EWS, B-ED (operator interfaces)
MiscellaneousB-RTR, B-GW, B-BBMD, B-ACDC, B-ACCR, B-SCHUB, B-DAP
Authentication and authorizationB-AS
GeneralB-GENERAL

What Chipkin Provides

The CAS BACnet Stack supports ReadProperty in both directions, as a client initiating requests and as a server executing them. Talk to us about adding BACnet client or server support to your device.