Channel
A Channel lets one write reach many objects. A client writes a value to the Channel, and the device passes it on to a list of properties in other objects. It also takes part in group writes, where one message sets many channels at once.
Typical uses
Section titled “Typical uses”- Set a whole floor of lights with one write
- Send one setpoint to several zone controllers
- Join lighting outputs into a scene
- Respond to a group write from a lighting panel
Key properties
Section titled “Key properties”| Property | What it holds |
|---|---|
| Present_Value | The last value written to the channel. It starts out NULL. |
| List_Of_Object_Property_References | The properties that receive each value written to the channel. |
| Channel_Number | The number a group write uses to find this channel. |
| Control_Groups | The control groups this channel belongs to. A group write is matched against them. |
| Last_Priority | The priority of the most recent write. |
| Write_Status | Shows whether the last write to the members is idle, in progress, successful or failed. |
How it behaves
Section titled “How it behaves”A Channel is written with priorities like a commandable object, but its writes are copied to the members rather than driving hardware. With intrinsic reporting it applies the NONE algorithm, so it reports faults only.
With the CAS BACnet Stack
Section titled “With the CAS BACnet Stack”Enable it with the STACK_OPTION_OBJECT_TYPE_CHANNEL build option. Call BACnetStack_AddObject first, then BACnetStack_AddChannelObject with the datatype of Present_Value. The second call does not check that the object exists. Present_Value is read from the priority slots through the callback you register with BACnetStack_RegisterCallbackGetPropertyBool and the typed getter. Writes arrive at the typed setter or the BACnetStack_RegisterCallbackSetPropertyNull callback. A group write reads Channel_Number and Control_Groups through the BACnetStack_RegisterCallbackGetPropertyUnsignedInteger callback, so serve both or the channel never matches. Pass 97 as the datatype for a lighting command. Give the channel its members with BACnetStack_AddObjectPropertyReferenceToChannel, one call per referenced property; a channel with no members passes nothing on. A member in another device makes the stack bind that device’s address: it sends a Who-Is for the device at once and then on every heartbeat, 3600 seconds by default, while the reference exists. The stack keeps Write_Status and does not ask a callback for it. While Write_Status is in progress, it answers a WriteProperty or WritePropertyMultiple of Present_Value with OBJECT / BUSY itself; a member in another device can hold it there for APDU_Timeout times (Number_Of_APDU_Retries + 1). While Write_Status is failed, the stack also serves Reliability with the cause, if you enabled that property; the rest of the time your Reliability is served.
Related object types
Section titled “Related object types”Group, Global Group, Lighting Output, Binary Lighting Output
Properties
Section titled “Properties”The properties ASHRAE 135-2024 clause 12.53 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 | BACnetChannelValue | W | yes | yes | Built by the stack from the priority slots your callbacks serve; Null while every slot is empty. A lighting-command or object-identifier channel reads your plain Get callback instead. |
| Last_Priority | Unsigned | R | yes | no | 0 |
| Write_Status | BACnetWriteStatus | R | yes | no | Held by the stack. |
| Status_Flags | BACnetStatusFlags | R | yes | no | Held by the stack. |
| Reliability | BACnetReliability | O | no | no | 0 |
| Out_Of_Service | Boolean | R | yes | no | false |
| List_Of_Object_Property_References | BACnetARRAY[N] of BACnetDeviceObjectPropertyReference | W1 | yes | yes | Held by the stack. |
| Execution_Delay | BACnetARRAY[N] of Unsigned | O1 | no | no | Not presented: a read answers unknown-property. |
| Allow_Group_Delay_Inhibit | Boolean | O | no | no | Not presented: a read answers unknown-property. |
| Channel_Number | Unsigned16 | W | yes | yes | 0 |
| Control_Groups | BACnetARRAY[N] of Unsigned32 | W | yes | yes | 0 |
| Event_Detection_Enable | Boolean | O2,3 | no | no | false |
| Notification_Class | Unsigned | O2,3 | no | no | 0 |
| Event_Enable | BACnetEventTransitionBits | O2,3 | no | no | An empty bit string. |
| Event_State | BACnetEventState | O2,3 | no | no | 0 |
| Acked_Transitions | BACnetEventTransitionBits | O2,3 | no | no | An empty bit string. |
| Notify_Type | BACnetNotifyType | O2,3 | no | no | 0 |
| Event_Time_Stamps | BACnetARRAY[3] of BACnetTimeStamp | O2,3 | no | no | No default: the read fails. |
| Event_Message_Texts | BACnetARRAY[3] of CharacterString | O3 | no | no | "" |
| Event_Message_Texts_Config | BACnetARRAY[3] of CharacterString | O3 | no | no | "" |
| Reliability_Evaluation_Inhibit | Boolean | O4 | no | no | false |
| Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | R | yes | no | Held by the stack. |
| Value_Source | BACnetValueSource | O5,6,7 | no | no | No default: the read fails. |
| Audit_Level | BACnetAuditLevel | O8 | not in profile | not in profile | No default: the read fails. |
| Auditable_Operations | BACnetAuditOperationFlags | O8 | not in profile | not in profile | No default: the read fails. |
| Audit_Priority_Filter | BACnetOptionalPriorityFilter | O8 | 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 | "" |