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.
| Situation | Error class | Error code |
|---|---|---|
| Specified object does not exist | OBJECT | UNKNOWN_OBJECT |
| Specified property does not exist | PROPERTY | UNKNOWN_PROPERTY |
| Array index provided but the property is not an array | PROPERTY | PROPERTY_IS_NOT_AN_ARRAY |
| Array index greater than the current array length | PROPERTY | INVALID_ARRAY_INDEX |
| Property is not accessible using this service | PROPERTY | READ_ACCESS_DENIED |
Reading these in the field:
UNKNOWN_OBJECTon a point a discovery tool listed usually means the object list changed or the request went to the wrong device instance.UNKNOWN_PROPERTYon a standard property usually means the device implements an older protocol revision.READ_ACCESS_DENIEDis 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 family | Profiles |
|---|---|
| Operator interfaces | B-XAWS, B-AWS, B-OWS, B-OD |
| Controllers | B-BC, B-AAC, B-ASC, B-SA, B-SS |
| Life safety | B-ALSC, B-LSC (controllers); B-ALSWS, B-LSWS, B-LSAP (operator interfaces) |
| Access control | B-AACC, B-ACC (controllers); B-AACWS, B-ACWS, B-ACSD (operator interfaces) |
| Lighting | B-LD, B-LS (controllers); B-LCS, B-ALCS (control stations); B-ALWS, B-LOD (operator interfaces) |
| Elevators | B-AEC, B-EC, B-EM (controllers); B-AEWS, B-EWS, B-ED (operator interfaces) |
| Miscellaneous | B-RTR, B-GW, B-BBMD, B-ACDC, B-ACCR, B-SCHUB, B-DAP |
| Authentication and authorization | B-AS |
| General | B-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.