Timer
A Timer object is a countdown timer that clients can see and control. A client starts it, stops it or forces it to expire, and reads how much time remains. It can write values into other objects when it starts, expires or stops.
Typical uses
Section titled “Typical uses”- Run a fan for 15 minutes after a button press
- Bathroom or hallway light timeout
- Hold an override for a set time, then release it
- Delay before a pump restarts
- Alarm when a timer expires
Key properties
Section titled “Key properties”| Property | What it holds |
|---|---|
| Present_Value | Remaining time in milliseconds while the timer runs, and zero otherwise. Writing a time starts the timer. |
| Timer_State | Idle, running or expired. A client writes idle to clear the timer. |
| Timer_Running | True while the timer runs. Writing true starts it with Default_Timeout; writing false while it runs makes it expire. |
| Default_Timeout | The duration used when a client starts the timer by writing Timer_Running. |
| State_Change_Values | The value to write to the referenced properties for each kind of state change. |
| List_Of_Object_Property_References | The properties that receive those values. |
How it behaves
Section titled “How it behaves”The object has no priority array. When it reports intrinsic events, the standard pairs it with the CHANGE_OF_TIMER algorithm, which goes off-normal when Timer_State enters a chosen state, typically expired.
With the CAS BACnet Stack
Section titled “With the CAS BACnet Stack”Enable it with the STACK_OPTION_OBJECT_TYPE_TIMER build option. It is on in the full target; in the embedded target, define it yourself (see Configuring a build). CASBACnetStackDLL.h has no function dedicated to this type, so create it with BACnetStack_AddObject. The stack serves the object identifier, object type, property list and status flags itself; your callbacks serve every other property, so your application runs the countdown. To arm alarms, enable alarms for the object and call BACnetStack_SetIntrinsicChangeOfTimerAlgorithm, which needs both STACK_OPTION_ALARMS_AND_EVENTS and STACK_OPTION_OBJECT_TYPE_TIMER. Call BACnetStack_UpdateValue for Timer_State when it changes, or no event is ever sent.
Related object types
Section titled “Related object types”Properties
Section titled “Properties”The properties ASHRAE 135-2024 clause 12.57 defines for this object type.
How to read the table:
- Conformance is what the standard asks of every object of this type: R is required, W is required and writable by a client, O is optional. A digit after the letter marks a condition in the standard that decides when the property is present or writable, such as support for intrinsic reporting.
- Present by default: yes means the stack presents the property as soon as you add the object; no means it
is optional and you turn it on with
BACnetStack_SetPropertyEnabled. This is the stack’s starting setup, so it can differ from the conformance code. - Writable is whether a client can write the property by default. Change it with
BACnetStack_SetPropertyWritable. - not in profile means the stack does not offer this property for this object type.
- Value when your callback does not answer: “Held by the stack” means the stack stores and serves the value itself and does not ask your callbacks. Otherwise it is the value the stack answers when your callback declines or is not registered.
| Property | Datatype | Conformance | Present by default | Writable | Value when your callback does not answer |
|---|---|---|---|---|---|
| Object_Identifier | BACnetObjectIdentifier | R | yes | no | Held by the stack. |
| Object_Name | CharacterString | R | yes | no | "Object <type>,<instance>", such as "Object 0,1" for Analog Input 1. |
| Object_Type | BACnetObjectType | R | yes | no | Held by the stack. |
| Description | CharacterString | O | no | no | "" |
| Present_Value | Unsigned | R1 | yes | no (yes while Out_Of_Service is true) | No default: value-not-initialized. |
| Status_Flags | BACnetStatusFlags | R | yes | no | Built by the stack from your callbacks. |
| Event_State | BACnetEventState | O3 | no | no | 0 |
| Reliability | BACnetReliability | O1 | no | no (yes while Out_Of_Service is true) | 0 |
| Out_Of_Service | Boolean | O | no | no | false |
| Timer_State | BACnetTimerState | R2 | yes | no | 0 |
| Timer_Running | Boolean | R2 | yes | no | false |
| Update_Time | BACnetDateTime | O3 | no | no | No default: the read fails. |
| Last_State_Change | BACnetTimerTransition | O | no | no | 0 |
| Expiration_Time | BACnetDateTime | O | no | no | No default: the read fails. |
| Initial_Timeout | Unsigned | O | no | no | 0 |
| Default_Timeout | Unsigned | O | no | no | 0 |
| Min_Pres_Value | Unsigned | O4 | no | no | 0 |
| Max_Pres_Value | Unsigned | O4 | no | no | 0 |
| Resolution | Unsigned | O | no | no | 0 |
| State_Change_Values | BACnetARRAY[7] of BACnetTimerStateChangeValue | O5 | no | no | No default: the read fails. |
| List_Of_Object_Property_References | BACnetLIST of BACnetDeviceObjectPropertyReference | O5 | no | no | Held by the stack. |
| Priority_For_Writing | Unsigned(1..16) | O5 | no | no | 0 |
| Event_Detection_Enable | Boolean | O3,6 | no | no | false |
| Notification_Class | Unsigned | O3,6 | no | no | 0 |
| Time_Delay | Unsigned | O3,6 | no | no | 0 |
| Time_Delay_Normal | Unsigned | O3,6 | no | no | 0 |
| Alarm_Values | BACnetLIST of BACnetTimerState | O3,6 | no | no | 0 |
| Event_Enable | BACnetEventTransitionBits | O3,6 | no | no | An empty bit string. |
| Acked_Transitions | BACnetEventTransitionBits | O3,6 | no | no | An empty bit string. |
| Notify_Type | BACnetNotifyType | O3,6 | no | no | 0 |
| Event_Time_Stamps | BACnetARRAY[3] of BACnetTimeStamp | O3,6 | no | no | No default: the read fails. |
| Event_Message_Texts | BACnetARRAY[3] of CharacterString | O6 | no | no | "" |
| Event_Message_Texts_Config | BACnetARRAY[3] of CharacterString | O6 | no | no | "" |
| Event_Algorithm_Inhibit_Ref | BACnetObjectPropertyReference | O6 | no | no | No default: the read fails. |
| Event_Algorithm_Inhibit | Boolean | O6,7 | no | no | false |
| Reliability_Evaluation_Inhibit | Boolean | O8 | no | no | false |
| Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | R | yes | no | Held by the stack. |
| Audit_Level | BACnetAuditLevel | O9 | not in profile | not in profile | No default: the read fails. |
| Auditable_Operations | BACnetAuditOperationFlags | O9 | not in profile | not in profile | No default: the read fails. |
| Tags | BACnetARRAY[N] of BACnetNameValue | O | no | no | No default: the read fails. |
| Profile_Location | CharacterString | O | no | no | "" |
| Profile_Name | CharacterString | O | no | no | "" |