Device
The Device object describes the BACnet device itself: who made it, what it supports and which objects it holds. Every device has exactly one. Clients read it first to learn what they are talking to, then read its Object_List to find the rest.
Typical uses
Section titled “Typical uses”- Identify the vendor and model
- List every object the product exposes
- Check which services the device supports
- Detect that the configuration changed
- Read the device’s local date and time
Key properties
Section titled “Key properties”| Property | What it holds |
|---|---|
| Object_List | Every object in the device. Clients read it to discover the device’s points. |
| Vendor_Identifier | The number ASHRAE assigned to the manufacturer. |
| Protocol_Services_Supported | Which BACnet services the device accepts. |
| Protocol_Object_Types_Supported | Which object types the device can hold. |
| Database_Revision | Changes whenever the object list or object names change. Clients use it to know when to re-read. |
| System_Status | Whether the device is operational, in a backup or restore, or otherwise limited. |
How it behaves
Section titled “How it behaves”The standard defines no event algorithm for a Device. Clients cannot create or delete a Device object.
With the CAS BACnet Stack
Section titled “With the CAS BACnet Stack”Call BACnetStack_AddDevice once, before any other setup call. A second call is rejected. Add further logical devices with BACnetStack_AddDeviceToVirtualNetwork. The stack keeps Object_Identifier, Object_Type, Object_List, System_Status and Device_Address_Binding, and updates Database_Revision as objects are added. It also holds the segmentation properties, which you set with BACnetStack_SetSegmentationEnabled. Your callbacks serve the rest: Vendor_Name and Model_Name through the callback you register with BACnetStack_RegisterCallbackGetPropertyCharacterString, and Vendor_Identifier through the BACnetStack_RegisterCallbackGetPropertyUnsignedInteger callback. Until they answer, the stack serves the defaults in the table below, which name Chipkin, so serve your own. APDU_Timeout and Number_Of_APDU_Retries default to 10000 ms and 3 unless you serve them. The standard applies no event algorithm to a Device and the stack serves no event state for it, so there is nothing to arm: BACnetStack_SetAlarmsAndEventsForObjectEnabled accepts the object but changes nothing a client can see.
Related object types
Section titled “Related object types”Network Port, File, Notification Class, Calendar
Properties
Section titled “Properties”The properties ASHRAE 135-2024 clause 12.11 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 | "Chipkin BACnet Device" |
| Object_Type | BACnetObjectType | R | yes | no | Held by the stack. |
| System_Status | BACnetDeviceStatus | R | yes | no | Held by the stack. |
| Vendor_Name | CharacterString | R | yes | no | "Chipkin Automation Systems" |
| Vendor_Identifier | Unsigned16 | R | yes | no | 389 |
| Model_Name | CharacterString | R | yes | no | "CAS BACnet Stack" |
| Firmware_Revision | CharacterString | R | yes | no | The stack version as four numbers, such as "6.0.0.0". |
| Application_Software_Version | CharacterString | R | yes | no | "v1" |
| Location | CharacterString | O | no | no | "" |
| Description | CharacterString | O | no | no | "" |
| Protocol_Version | Unsigned | R | yes | no | 1 |
| Protocol_Revision | Unsigned | R | yes | no | 30, the stack’s protocol revision. |
| Protocol_Services_Supported | BACnetServicesSupported | R | yes | no | Computed from the services that are enabled. |
| Protocol_Object_Types_Supported | BACnetObjectTypesSupported | R | yes | no | Computed from the object types that are supported. |
| Object_List | BACnetARRAY[N] of BACnetObjectIdentifier | R | yes | no | Held by the stack. |
| Structured_Object_List | BACnetARRAY[N] of BACnetObjectIdentifier | O | no | no | No default: the read fails. |
| Max_APDU_Length_Accepted | Unsigned | R | yes | no | 1476 |
| Segmentation_Supported | BACnetSegmentation | R | yes | no | Held by the stack: 0 (segmented-both) in a build with segmentation, otherwise 3 (no segmentation). Change it with BACnetStack_SetSegmentationEnabled. |
| Max_Segments_Accepted | Unsigned | O1 | yes in a build with segmentation, which a default device supports (Table 12-13 footnote 1); no when the device is set to no segmentation | no | Held by the stack: 16 in a build with segmentation, otherwise not served. Change it with BACnetStack_SetSegmentationEnabled. |
| VT_Classes_Supported | BACnetLIST of BACnetVTClass | O2 | no | no | 0 |
| Active_VT_Sessions | BACnetLIST of BACnetVTSession | O2 | no | no | No default: the read fails. |
| Local_Time | Time | O3,4,12 | no | no | No default: value-not-initialized until a callback or a client write supplies one. |
| Local_Date | Date | O3,4,12 | no | no | No default: value-not-initialized until a callback or a client write supplies one. |
| UTC_Offset | Integer | O4 | no | no | 0 |
| Daylight_Savings_Status | Boolean | O4 | no | no | false |
| APDU_Segment_Timeout | Unsigned | O1 | yes in a build with segmentation, which a default device supports (Table 12-13 footnote 1); no when the device is set to no segmentation | no | Held by the stack: 5000 (ms) in a build with segmentation, otherwise not served. Change it with BACnetStack_SetSegmentationEnabled. |
| APDU_Timeout | Unsigned | R | yes | no | 10000 (ms) |
| Number_Of_APDU_Retries | Unsigned | R | yes | no | 3: a confirmed request is sent up to four times. Serve 0 to send it once. |
| Time_Synchronization_Recipients | BACnetLIST of BACnetRecipient | O5 | no | yes | Held by the stack. |
| Max_Manager | Unsigned(0..127) | O6 | no | no | 0 |
| Max_Info_Frames | Unsigned | O6 | no | no | 0 |
| Device_Address_Binding | BACnetLIST of BACnetAddressBinding | R | yes | no | Held by the stack. |
| Database_Revision | Unsigned | R | yes | no | Held by the stack; a Get callback that answers wins. |
| Configuration_Files | BACnetARRAY[N] of BACnetObjectIdentifier | O7 | no | no | Held by the stack. |
| Last_Restore_Time | BACnetTimeStamp | O7 | no | no | Held by the stack. |
| Backup_Failure_Timeout | Unsigned16 | O8 | no | yes | Held by the stack. |
| Backup_Preparation_Time | Unsigned16 | O13 | no | no | Held by the stack. |
| Restore_Preparation_Time | Unsigned16 | O13 | no | no | Held by the stack. |
| Restore_Completion_Time | Unsigned16 | O13 | no | no | Held by the stack. |
| Backup_And_Restore_State | BACnetBackupState | O7 | no | no | Held by the stack. |
| Active_COV_Subscriptions | BACnetLIST of BACnetCOVSubscription | O9 | no | no | Held by the stack. |
| Last_Restart_Reason | BACnetRestartReason | O10 | no | no | 0 |
| Time_Of_Device_Restart | BACnetTimeStamp | O10 | no | no | No default: the read fails. |
| Restart_Notification_Recipients | BACnetLIST of BACnetRecipient | O14 | no | no | No default: the read fails. |
| UTC_Time_Synchronization_Recipients | BACnetLIST of BACnetRecipient | O5 | no | yes | Held by the stack. |
| Time_Synchronization_Interval | Unsigned | O5 | no | yes | 0 |
| Align_Intervals | Boolean | O5 | no | yes | false |
| Interval_Offset | Unsigned | O5 | no | yes | 0 |
| Serial_Number | CharacterString | O11 | no | no | "" |
| Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | R | yes | no | Held by the stack. |
| Status_Flags | BACnetStatusFlags | O15 | no | no | Built by the stack from your callbacks. |
| Event_State | BACnetEventState | O15 | no | no | 0 |
| Reliability | BACnetReliability | O15 | no | no | 0 |
| Event_Detection_Enable | Boolean | O15,16 | no | no | false |
| Notification_Class | Unsigned | O15,16 | no | no | 0 |
| Event_Enable | BACnetEventTransitionBits | O15,16 | no | no | An empty bit string. |
| Acked_Transitions | BACnetEventTransitionBits | O15,16 | no | no | An empty bit string. |
| Notify_Type | BACnetNotifyType | O15,16 | no | no | 0 |
| Event_Time_Stamps | BACnetARRAY[3] of BACnetTimeStamp | O15,16 | no | no | No default: the read fails. |
| Event_Message_Texts | BACnetARRAY[3] of CharacterString | O16 | no | no | "" |
| Event_Message_Texts_Config | BACnetARRAY[3] of CharacterString | O16 | no | no | "" |
| Reliability_Evaluation_Inhibit | Boolean | O17 | no | no | false |
| Active_COV_Multiple_Subscriptions | BACnetLIST of BACnetCOVMultipleSubscription | O18 | no | no | Held by the stack. |
| Audit_Notification_Recipient | BACnetRecipient | O19,20 | no | yes | No default: the read fails. |
| Audit_Level | BACnetAuditLevel | O21 | not in profile | not in profile | No default: the read fails. |
| Auditable_Operations | BACnetAuditOperationFlags | O21 | not in profile | not in profile | No default: the read fails. |
| Device_UUID | OctetString (Size(16)) | O22 | no | no | An empty octet string. |
| Authorization_Server | BACnetAuthorizationServer | O23 | no | no | No default: the read fails. |
| Authorization_Status | BACnetAuthorizationStatus | O23 | no | no | No default: the read fails. |
| Authorization_Policy | BACnetARRAY of BACnetAuthorizationPolicy | O | no | no | No default: the read fails. |
| Authorization_Scope | BACnetARRAY of BACnetAuthorizationScopeDescription | O | no | no | No default: the read fails. |
| Authorization_Cache | BACnetLIST of BACnetAccessToken | O24 | no | no | No default: the read fails. |
| Authorization_Groups | BACnetARRAY of Unsigned | O | no | no | 0 |
| Max_Proxied_I_Ams_Per_Second | Unsigned | O25 | no | yes | 0 |
| Device_Address_Proxy_Table | BACnetLIST of BACnetDeviceAddressProxyTableEntry | O26 | no | no | No default: the read fails. |
| Tags | BACnetARRAY[N] of BACnetNameValue | O | no | no | No default: the read fails. |
| Profile_Location | CharacterString | O | no | no | "" |
| Deployed_Profile_Location | CharacterString | O19 | no | yes | "" |
| Profile_Name | CharacterString | O | no | no | "" |