What the Trend Log Object Is
The Trend Log object, defined in Clause 12.25 of ANSI/ASHRAE 135-2024, is how a BACnet device records the history of a single property over time. It watches one referenced property, and when a logging condition is met it saves the value and a timestamp into an internal buffer. The referenced property can live in the same device or in another device on the network.
Log_DeviceObjectProperty names the property being logged, and Logging_Type sets how samples are taken: periodically on Log_Interval, on a change of value via COV (Change of Value), or when triggered by a write to the Trigger property. The buffer is read back with the ReadRange service, and writing zero to Record_Count clears it. When a Trend Log supports intrinsic reporting it applies the BUFFER_READY event algorithm, sending a notification once Notification_Threshold new records have accumulated so a head end (the central BMS server) knows to fetch them.
Where You’ll See It
- Sensor history. A Trend Log records a space temperature or flow rate at a fixed interval so operators can review performance and diagnose comfort complaints after the fact.
- COV-driven logging. For values that change irregularly, a Trend Log subscribes for COV and stores only the changes, keeping the buffer compact.
- Automatic collection. With intrinsic reporting enabled, the Trend Log signals a fileserver or head end through BUFFER_READY, which then pulls the new records with a ReadRange request.
Required Properties
Clause 12.25 requires every Trend Log object to provide these properties. Datatypes are the spec’s names: BOOLEAN is a true/false flag, Unsigned an integer, BACnetLIST of BACnetLogRecord is the timestamped buffer, and the other 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 trend-log for this object |
Enable | BOOLEAN | Writable; turns logging on and off |
Stop_When_Full | BOOLEAN | When true, logging stops once the buffer fills instead of overwriting |
Buffer_Size | Unsigned | The maximum number of records the buffer holds |
Log_Buffer | BACnetLIST of BACnetLogRecord | The stored timestamped records, read with ReadRange |
Record_Count | Unsigned | Writable; the number of records in the buffer, and writing zero clears it |
Total_Record_Count | Unsigned32 | The running total of records ever collected, used as the sequence number. Monotonic: it does not decrease on wrap, and rolls over from 4294967295 to 1 |
Logging_Type | BACnetLoggingType | Whether sampling is polled, COV-driven, or triggered |
Status_Flags | BACnetStatusFlags | Four health flags: in-alarm, fault, overridden, out-of-service |
Event_State | BACnetEventState | The object’s current event state. It stays normal for buffer-ready reporting, which is dispatched as a TO-NORMAL transition from NORMAL. See BUFFER_READY |
Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | The list of properties this instance actually implements |
Optional Properties
The properties integrators meet most are Log_DeviceObjectProperty (the property being logged), Log_Interval (how often, for periodic logging), and Start_Time and Stop_Time (the window during which collection runs). The intrinsic-reporting group appears or is absent as a set.
| Property | Datatype | Group |
|---|---|---|
Description | CharacterString | General |
Log_DeviceObjectProperty | BACnetDeviceObjectPropertyReference | Logging |
Log_Interval | Unsigned | Logging |
Start_Time | BACnetDateTime | Logging |
Stop_Time | BACnetDateTime | Logging |
COV_Resubscription_Interval | Unsigned | Logging |
Client_COV_Increment | BACnetClientCOV | Logging |
Align_Intervals | BOOLEAN | Logging |
Interval_Offset | Unsigned | Logging |
Trigger | BOOLEAN | Logging |
Reliability | BACnetReliability | Fault detection |
Notification_Threshold | Unsigned | Intrinsic reporting |
Records_Since_Notification | Unsigned | Intrinsic reporting |
Last_Notify_Record | Unsigned | 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 |
Event_Detection_Enable | BOOLEAN | Intrinsic reporting |
Event_Algorithm_Inhibit_Ref | BACnetObjectPropertyReference | Intrinsic reporting |
Event_Algorithm_Inhibit | BOOLEAN | Intrinsic reporting |
Reliability_Evaluation_Inhibit | BOOLEAN | Fault detection |
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
- Trend Log Multiple: logs several properties in lockstep instead of one.
- Event Log: records event notifications rather than property values.
- Notification Class: routes the BUFFER_READY notification to its recipients.
What Chipkin Provides
The Trend Log object, including periodic, COV, and triggered logging and the BUFFER_READY intrinsic reporting algorithm, is supported in the CAS BACnet Stack and hosted by B-BC building controllers. Talk to us about modeling your device’s points.
Related Pages
- Why “It Works on My Bench” Is Not BTL Conformance
- BACnet
- BACnet Objects
- BACnet ReadRange Service
- BACnet Trend Log Multiple Object
- BACnet Object Types & Properties Reference
- BACnet Total_Record_Count vs Record_Count: what the counters mean, what actually loses history, and reading a buffer that wraps
- BACnet BUFFER_READY: The Event That Fires Without a State Change: why the notification silently never arrives