What is the BACnet WriteProperty Format?

Key Takeaways : What is the BACnet WriteProperty Format?

  • WriteProperty is the BACnet service used to modify the value of an object’s property on a remote device.
  • It enables Building Management Systems (BMS) to control parameters such as setpoints, operating modes, or schedules.
  • The message includes at least: Object Identifier, Property Identifier, and Property Value (with optional Array Index and Priority).
  • The service is transmitted through either a Confirmed Request (with acknowledgment) or an Unconfirmed Request (without acknowledgment).
  • Data is encoded using the TLV (Tag–Length–Value) format, consistent across all BACnet services.
  • The Priority field (1–16) determines which command takes effect when multiple writes occur.
  • Common errors include access control restrictions, invalid data types, or write-access-denied responses.
  • Proper use of WriteProperty ensures safety, interoperability, and operational efficiency in connected buildings.

Table of Contents

Introduction

Reading a property tells you what a building system is doing — writing a property tells it what to do next.
In the BACnet protocol, the WriteProperty service enables supervisory controllers or Building Management Systems (BMS) to change values within field devices. This can include adjusting a room’s temperature setpoint, switching lighting modes, or updating occupancy schedules.

The service lies at the heart of building automation, where interoperability and real-time control must coexist.
For a complete overview of BACnet fundamentals, see What is BACnet?.

Olivier Hersent

WriteProperty is where monitoring turns into control. It’s the point where BACnet systems move from observing to acting — giving intelligence to automation.

What is the WriteProperty service in BACnet?

The WriteProperty service is one of the most powerful functions in the BACnet protocol. It allows a BACnet device — typically a Building Management System (BMS) or supervisory controller — to change the value of a property on another BACnet device.

This capability transforms the network from a passive monitoring tool into an active control system. For instance, a BMS can:

  • Update a temperature setpoint on an Analog Value object,
  • Switch a fan mode from “Auto” to “Manual” on a Binary Value object, or
  • Change a lighting schedule stored in a Schedule object.

Each WriteProperty request contains a structured set of fields that identify exactly what is being written and where:

  • Object Identifier → Defines which object to modify (e.g., Analog Output 1)
  • Property Identifier → Defines which property (e.g., Present Value)
  • Property Value → The new data value to apply
  • (Optional) Array Index → Specifies which array element to modify
  • (Optional) Priority → Defines the command’s importance (1–16)

BACnet distinguishes between two versions of this service:

  • Confirmed-Request WriteProperty → The sender receives an acknowledgment or error from the target device.
  • Unconfirmed-Request WriteProperty → Sent without expecting a response, used when immediate feedback isn’t critical.

For more context on how these services interact in the BACnet stack, see BACnet Protocol Basics.

The WriteProperty APDU Structure

The WriteProperty service is transmitted using a BACnet APDU (Application Protocol Data Unit). This packet defines how a command is encapsulated and interpreted between devices on the network. While the detailed encoding depends on whether the service is confirmed or unconfirmed, the overall structure remains consistent.

Field Description
PDU TypeSpecifies whether the message is a Confirmed Request or Unconfirmed Request.
Invoke IDUnique transaction number linking request and acknowledgment (used only in confirmed services).
Service ChoiceIdentifies the service invoked — here, WriteProperty (service choice = 15).
Service DataContains encoded details: object, property, and value to be written.

The Service Data portion is where the actual payload resides — it’s composed of several encoded elements:

  • Object Identifier – which object to target (e.g., Analog Value 3)
  • Property Identifier – which property to modify (e.g., presentValue)
  • (Optional) Array Index – used when the property is an array
  • Property Value – the new data (encoded in TLV format)
  • (Optional) Priority – defines the command’s priority level, from 1 (highest) to 16 (lowest)

This APDU structure ensures reliable, standardized communication between multi-vendor BACnet devices — a key reason why BACnet remains the preferred protocol for open building automation systems.

Data Encoding and Property Identification

The WriteProperty service data follows the TLV (Tag–Length–Value) encoding model used throughout BACnet.
This structure ensures that each piece of information in the message — from the object being targeted to the value being written — is self-describing and machine-parsable, allowing devices from different manufacturers to communicate seamlessly.

Understanding TLV (Tag–Length–Value)

  • Tag → Describes the data type or context (e.g., Boolean, Real, Unsigned Integer, Enumerated).
  • Length → Indicates the number of bytes that follow.
  • Value → The actual data to be transmitted or written.

Structure of the Service Data

Below is a simplified view of the key fields within the WriteProperty service data section:

Parameter Description
Object IdentifierSpecifies which BACnet object to modify (e.g., Analog Output 1).
Property IdentifierDefines the target property (e.g., presentValue).
Array Index (optional)Used when the property is an array (e.g., specific day in a weekly schedule).
Property ValueThe new value to write, encoded according to BACnet data type (Boolean, Real, Enumerated, etc.).
Priority (optional)Command priority from 1 (highest) to 16 (lowest).

Example of TLV Encoding

For instance, if a BMS writes a temperature setpoint of 22.5°C to an Analog Value object:

  • Tag = “Real” (floating-point type)
  • Length = 4 (number of bytes for a 32-bit float)
  • Value = Binary encoding of 22.5

This modular encoding allows the same WriteProperty service to handle a wide range of data — from Boolean switches to complex schedule structures — with total interoperability across devices.

Example – Writing a Temperature Setpoint

Let’s walk through a simple WriteProperty exchange where a Building Management System (BMS) sends a new temperature setpoint to a BACnet device such as a room temperature controller.

Step-by-step sequence

Step Description
1BMS sends a Confirmed-Request APDU targeting Analog Value 1 and property presentValue = 22.5°C.
2Device receives the message, validates access rights, type, and range.
3Device updates internal logic or actuator outputs with the new value.
4Device sends back a ComplexAck or Error PDU depending on success.

Example in simplified notation

WriteProperty-Request ::= {
object-identifier: analogValue, instance 1
property-identifier: presentValue
property-value: REAL, 22.5
priority: 8
}

What happens next

  • The new setpoint (22.5°C) immediately updates the controller logic.
  • If other commands exist at a higher priority, they still override this one until relinquished.
  • The BMS can later verify the result using ReadProperty on the same object.

This process illustrates how WriteProperty enables real-time control and synchronization between management platforms and field devices — a cornerstone of modern BACnet-based automation.

Error Handling and Access Rights

Because the WriteProperty service directly modifies device behavior, BACnet includes robust mechanisms for security, validation, and error management. These ensure that only authorized and valid operations take effect.

Common WriteProperty Errors

Each object represents a logical function of a device. Some of the most frequently used include:

Error Type Typical Cause
write-access-deniedProperty is read-only or blocked by access control settings.
invalid-data-typeRequest value type doesn’t match the property’s expected data type.
value-out-of-rangeValue exceeds the allowed range for the property.
unknown-propertyProperty identifier is not valid for that object type.
device-busyDevice cannot process the request at that moment.
otherVendor-specific or implementation-defined error.

Access Control

Each BACnet device maintains Write Access Rights that define which objects or properties can be modified — and by whom. Access may be limited to:

  • Specific network addresses or device instances,
  • Certain object types or property sets,
  • Defined security levels when BACnet/SC or authenticated communication is in place.

If access control fails, the target device sends back a BACnet Error PDU with a detailed reason code.

Error Response Example

Error ::= {
pdu-type: Error,
service-choice: WriteProperty,
error-class: property,
error-code: write-access-denied
}

By incorporating these validation layers, BACnet ensures that WriteProperty operations remain safe, predictable, and compliant across multi-vendor environments — a key requirement for large-scale IoT and building management networks.

Applications in Building Management Systems (BMS)

The WriteProperty service is at the core of automation and control within BACnet-based Building Management Systems.
It transforms passive monitoring into active decision-making, enabling real-time adjustments to environmental and operational parameters.

Typical Use Cases

Application Example of WriteProperty Action
HVAC ControlAdjust temperature or humidity setpoints on Analog Value objects.
Lighting SystemsSwitch lights ON/OFF or adjust brightness through Binary/Analog Outputs.
SchedulingUpdate occupancy or time-based schedules via Schedule objects.
Energy OptimizationModify demand-response thresholds or energy limits.
Security SystemsControl locks, alarms, or access relays through Binary Outputs.
Remote CommissioningWrite configuration parameters to field devices remotely.

Integration in IoT and LoRaWAN® Networks

When BACnet is extended over LoRaWAN® or other IoT communication layers — as done by Actility’s ThingPark Enterprise (TPE) and BACnet/LoRaWAN gateways
the WriteProperty service can be used to control remote, low-power devices located far beyond standard wired networks.

This means a single BMS can:

  • Adjust setpoints in distributed energy assets,
  • Control HVAC actuators in remote facilities,
  • Or synchronize field sensors and controllers over secure, low-bandwidth IoT channels.

By bridging BACnet and LoRaWAN, Actility brings WriteProperty’s power of control and interoperability to massive-scale IoT deployments, unlocking new possibilities for smart buildings, campuses, and cities.

The BACnet WriteProperty service is the mechanism that brings intelligence and control to the network layer of smart buildings. Combined with technologies like LoRaWAN® through Actility’s IoT solutions, it enables scalable, secure, and vendor-neutral control across distributed infrastructures.

Frequently Asked Questions (FAQ) - BACnet WriteProperty Explained

WriteProperty allows a BACnet device, such as a Building Management System (BMS), to change the value of a property on another device. It’s the service that turns monitoring into actionable control — adjusting setpoints, modes, or schedules across a BACnet network.

No. Only writable properties defined by the BACnet object model can be modified. Read-only properties (e.g., object identifiers, status flags) cannot be changed. Devices may also restrict write access based on configuration or user permissions.

A Confirmed WriteProperty requires an acknowledgment or error response, ensuring reliability.
An Unconfirmed WriteProperty sends the same command without expecting a reply — useful in cases where speed or bandwidth matters more than confirmation.

If access control, data validation, or range checks fail, the target device responds with a BACnet Error PDU, including an error-class (e.g., property) and error-code (e.g., write-access-denied). The sender can log or retry the command.

In solutions like Actility’s ThingPark Enterprise, a WriteProperty command can be transmitted from a cloud BMS through a LoRaWAN® gateway, allowing operators to change parameters in remote or battery-powered BACnet devices, even across long distances.

BACnet supports multiple application data types: Boolean, Unsigned, Integer, Real, Double, Enumerated, Bit String, Character String, and more. The tag in the TLV encoding identifies which type is being used.

When multiple WriteProperty commands target the same property, the highest-priority active command determines the property’s current value. Lower-priority commands remain stored until higher ones are relinquished, restoring their influence.

Both. It can configure device parameters (like calibration constants or limits) or perform real-time control actions (like adjusting fan speed or temperature). Its flexibility makes it a cornerstone of dynamic building automation.

About Actility

Media contact : marketing@actility.com – https://www.actility.com/contact/ 

Why choose Actility?

At Actility, we are passionate about unlocking the full potential of IoT for businesses and communities around the world. Join us as we continue to innovate, collaborate, and lead the way in connecting the digital and physical realms through cutting-edge IoT solutions.

© 2025 Actility’s All Rights Reserved