BACnet Trend Log Object

The BACnet Trend Log object (Clause 12.25) logs one property over time into a buffer read with ReadRange: required and optional properties with datatypes.

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.

PropertyDatatypeWhat it holds
Object_IdentifierBACnetObjectIdentifierThe object’s type and instance number, unique within the device
Object_NameCharacterStringThe human-readable point name, unique within the device
Object_TypeBACnetObjectTypeAlways trend-log for this object
EnableBOOLEANWritable; turns logging on and off
Stop_When_FullBOOLEANWhen true, logging stops once the buffer fills instead of overwriting
Buffer_SizeUnsignedThe maximum number of records the buffer holds
Log_BufferBACnetLIST of BACnetLogRecordThe stored timestamped records, read with ReadRange
Record_CountUnsignedWritable; the number of records in the buffer, and writing zero clears it
Total_Record_CountUnsigned32The 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_TypeBACnetLoggingTypeWhether sampling is polled, COV-driven, or triggered
Status_FlagsBACnetStatusFlagsFour health flags: in-alarm, fault, overridden, out-of-service
Event_StateBACnetEventStateThe 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_ListBACnetARRAY[N] of BACnetPropertyIdentifierThe 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.

PropertyDatatypeGroup
DescriptionCharacterStringGeneral
Log_DeviceObjectPropertyBACnetDeviceObjectPropertyReferenceLogging
Log_IntervalUnsignedLogging
Start_TimeBACnetDateTimeLogging
Stop_TimeBACnetDateTimeLogging
COV_Resubscription_IntervalUnsignedLogging
Client_COV_IncrementBACnetClientCOVLogging
Align_IntervalsBOOLEANLogging
Interval_OffsetUnsignedLogging
TriggerBOOLEANLogging
ReliabilityBACnetReliabilityFault detection
Notification_ThresholdUnsignedIntrinsic reporting
Records_Since_NotificationUnsignedIntrinsic reporting
Last_Notify_RecordUnsignedIntrinsic reporting
Notification_ClassUnsignedIntrinsic reporting
Event_EnableBACnetEventTransitionBitsIntrinsic reporting
Acked_TransitionsBACnetEventTransitionBitsIntrinsic reporting
Notify_TypeBACnetNotifyTypeIntrinsic reporting
Event_Time_StampsBACnetARRAY[3] of BACnetTimeStampIntrinsic reporting
Event_Message_TextsBACnetARRAY[3] of CharacterStringIntrinsic reporting
Event_Message_Texts_ConfigBACnetARRAY[3] of CharacterStringIntrinsic reporting
Event_Detection_EnableBOOLEANIntrinsic reporting
Event_Algorithm_Inhibit_RefBACnetObjectPropertyReferenceIntrinsic reporting
Event_Algorithm_InhibitBOOLEANIntrinsic reporting
Reliability_Evaluation_InhibitBOOLEANFault detection
Audit_LevelBACnetAuditLevelAuditing
Auditable_OperationsBACnetAuditOperationFlagsAuditing
TagsBACnetARRAY[N] of BACnetNameValueTagging and profile
Profile_LocationCharacterStringTagging and profile
Profile_NameCharacterStringTagging and profile

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.