What the Device Object Is
The Device object, defined in Clause 12.11 of ANSI/ASHRAE 135-2024, is the one object every BACnet device has exactly one of. It carries the device’s identity (who it is, who made it, what firmware it runs), its capabilities (which services and object types it supports), its object list, and the network parameters other devices need to talk to it.
The Device object’s instance number is the device’s network-wide identity: the number a client learns from an I-Am and uses to address it. When a tool discovers a device, the first object it reads is the Device object, because everything else about the device is described there.
Where You’ll See It
- Discovery and identification. The device list in a tool like the CAS BACnet Explorer is built from each device’s Device object identity properties.
- Capability checks. Confirming a device supports a service or object type before relying on it means reading
Protocol_Services_SupportedandProtocol_Object_Types_Supported. - Commissioning. Setting the device instance, name, and APDU parameters, and reading
Protocol_Revisionto know which edition of the standard the device implements.
Required Properties
Clause 12.11 requires every Device object to provide these properties. Datatypes are the spec’s names: Unsigned is an integer, CharacterString is text, and the BACnet-prefixed types are structured values defined by the standard.
| Property | Datatype | What it holds |
|---|---|---|
Object_Identifier | BACnetObjectIdentifier | The device instance, this device’s network-wide identity |
Object_Name | CharacterString | The device name, unique across the internetwork |
Object_Type | BACnetObjectType | Always device for this object |
System_Status | BACnetDeviceStatus | The device’s overall state (operational, download-in-progress, non-operational) |
Vendor_Name | CharacterString | The manufacturer’s name |
Vendor_Identifier | Unsigned | The manufacturer’s BACnet vendor ID, assigned by ASHRAE |
Model_Name | CharacterString | The product model |
Firmware_Revision | CharacterString | The device firmware version |
Application_Software_Version | CharacterString | The application or configuration version |
Protocol_Version | Unsigned | The BACnet protocol version (1) |
Protocol_Revision | Unsigned | The BACnet protocol revision, which edition of the standard the device implements |
Protocol_Services_Supported | BACnetServicesSupported | A bit string of which BACnet services the device supports |
Protocol_Object_Types_Supported | BACnetObjectTypesSupported | A bit string of which object types the device supports |
Object_List | BACnetARRAY[N] of BACnetObjectIdentifier | Every object the device contains |
Max_APDU_Length_Accepted | Unsigned | The largest message the device accepts in one exchange |
Segmentation_Supported | BACnetSegmentation | Whether the device can split large messages across packets, and in which direction |
APDU_Timeout | Unsigned | How long the device waits for a reply before retrying, in milliseconds |
Number_Of_APDU_Retries | Unsigned | How many times the device retries a request |
Device_Address_Binding | BACnetLIST of BACnetAddressBinding | The device’s cache of other devices’ instance-to-address bindings |
Database_Revision | Unsigned | A counter that changes when the device’s object database changes |
Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | The list of properties this Device object implements |
Object_List is often too large to read in one response; a client reads it by array index (index 0 gives the count) or uses ReadRange, which is why segmentation support matters. Reading Device 4194303 (the wildcard instance) with ReadProperty makes any device answer as its own Device object, the standard way to learn a device’s instance number.
Optional Properties
The Device object has a large optional set covering time, backup and restore, restart, and event reporting. The properties integrators meet most are Location and Description, the time properties (Local_Time, Local_Date, UTC_Offset), Max_Master and Max_Info_Frames on MS/TP devices, and Last_Restart_Reason.
| Property | Datatype | Group |
|---|---|---|
Location | CharacterString | General |
Description | CharacterString | General |
Serial_Number | CharacterString | General |
Structured_Object_List | BACnetARRAY[N] of BACnetObjectIdentifier | General |
Max_Segments_Accepted | Unsigned | Segmentation and APDU |
APDU_Segment_Timeout | Unsigned | Segmentation and APDU |
Max_Master | Unsigned | Segmentation and APDU |
Max_Info_Frames | Unsigned | Segmentation and APDU |
Local_Time | Time | Time |
Local_Date | Date | Time |
UTC_Offset | INTEGER | Time |
Daylight_Savings_Status | BOOLEAN | Time |
Time_Synchronization_Recipients | BACnetLIST of BACnetRecipient | Time |
UTC_Time_Synchronization_Recipients | BACnetLIST of BACnetRecipient | Time |
Time_Synchronization_Interval | Unsigned | Time |
Align_Intervals | BOOLEAN | Time |
Interval_Offset | Unsigned | Time |
Configuration_Files | BACnetARRAY[N] of BACnetObjectIdentifier | Backup and restore |
Last_Restore_Time | BACnetTimeStamp | Backup and restore |
Backup_Failure_Timeout | Unsigned | Backup and restore |
Backup_Preparation_Time | Unsigned | Backup and restore |
Restore_Preparation_Time | Unsigned | Backup and restore |
Restore_Completion_Time | Unsigned | Backup and restore |
Backup_And_Restore_State | BACnetBackupState | Backup and restore |
Last_Restart_Reason | BACnetRestartReason | Restart |
Time_Of_Device_Restart | BACnetTimeStamp | Restart |
Restart_Notification_Recipients | BACnetLIST of BACnetRecipient | Restart |
Active_COV_Subscriptions | BACnetLIST of BACnetCOVSubscription | COV reporting |
Active_COV_Multiple_Subscriptions | BACnetLIST of BACnetCOVMultipleSubscription | COV reporting |
Status_Flags | BACnetStatusFlags | Intrinsic reporting |
Event_State | BACnetEventState | Intrinsic reporting |
Reliability | BACnetReliability | Intrinsic reporting |
Event_Detection_Enable | BOOLEAN | 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 |
Reliability_Evaluation_Inhibit | BOOLEAN | Intrinsic reporting |
VT_Classes_Supported | BACnetLIST of BACnetVTClass | Virtual terminal (legacy) |
Active_VT_Sessions | BACnetLIST of BACnetVTSession | Virtual terminal (legacy) |
Audit_Level | BACnetAuditLevel | Auditing |
Auditable_Operations | BACnetAuditOperationFlags | Auditing |
Tags | BACnetARRAY[N] of BACnetNameValue | Tagging and profile |
Profile_Location | CharacterString | Tagging and profile |
Deployed_Profile_Location | CharacterString | Tagging and profile |
Profile_Name | CharacterString | Tagging and profile |
Related Objects
- Network Port: carries the per-network address, port, and datalink settings the Device object summarizes.
- Analog Input and the other object types: the points a Device object’s
Object_Listenumerates.
What Chipkin Provides
The Device object, including the full identity, capability, time, and backup-and-restore property set, is implemented in the CAS BACnet Stack; it is the foundation every device built on the stack exposes. Talk to us about modeling your device’s points.