You can create a device interface (XIF) definition for a BACnet/IP or BACnet MS/TP device.  To create a BACnet XIF definition, you create a CSV file with a .bac extension that defines the device interface for a BACnet device interface (XIF). The BACnet XIF specifies the BACnet device interface name, program ID, and manufacturer, and lists all the BACnet objects to be polled or updated by the SmartServer. To create the file, you will need the manufacturer's BACnet Protocol Implementation Conformance Statement (PICS) for the device, or the BACnet object type and object instance numbers reported by a BACnet workstation. You can download a free BACnet workstation for this purpose here.  

For SmartServer 3.2 and higher, see (Optional) Creating a BACnet Device Interface (XIF) Definition.

This section consists of the following:

Creating a BACnet XIF File

The name of the BACnet XIF file, without the .bac extension, is the name of the BACnet XIF. The extension must be .BAC or .bac. You cannot use a compound extension name such as .bac.csv.  

A BACnet XIF file has the following three sections.

The following figure illustrates the top portion of a BACnet XIF file.

#manufacturer,Contemporary Control Systems
#description,BASR-8M BASremote V3
Object Type,Object Instance,Write Enable,Description,Presentation Type

File Type Specification

The file type specification for a BACnet XIF file is the following:


If you open a CSV file with this line in Excel, it is displayed as two cells, one with #filetype and one with BACnet_xif.

Product Details

The product details identify the product specified by the BACnet XIF file. The product details specification has the following contents:


If you open a CSV file with these lines in Excel, each line is displayed as two cells.

Specify the details as follows:

Following is an example product details specification for a Contemporary Control Systems BASremote:

#manufacturer,Contemporary Control Systems
#description,BASR-8M BASremote V3

Datapoint List

The datapoint list that specifies the datapoints on the device to be available to the SmartServer. The first line of the datapoint list is a header with column headings for a datapoint list. Following is an example datapoint list with a single datapoint defined on the second line:

Object Type,Object Instance,Block Name,Write Enable,Description,Presentation Type

The following table describes the column contents for the datapoint list: 


Object Type


Defines the BACnet object type.  Supported object types are AI, AO, AV, BI, BO, and BV

Object InstanceRequired

Defines the BACnet object instance number.

Block NameOptional

Specifies the block name for the datapoint. You can use blocks to group related datapoints together. You can provide a descriptive name to identify the block. You can specify the same block for multiple datapoints to specify that those datapoints are members of the same block. 

This parameter is available for BACnet with SmartServer 3.0 and higher.
Datapoint NameOptionalSpecifies the datapoint XIF name.  If not included or left blank the datapoint XIF name will be the same name as the Object Type.
This parameter is available for BACnet with SmartServer 3.1 and higher.
Write EnableRequiredSpecifies whether or not the datapoint is writable.  A plus sign ( '+' ) indicates a writable datapoint (required for AO and BO).  A minus sign ( '-' ) indicates a non-writable datapoint (required for AI and BI). 
DescriptionOptionalProvides a description of the device.
Presentation TypeOptional

Specifies whether the presentation type is float, scalar, or boolean.

This parameter is available for BACnet with SmartServer 3.0 and higher.
Priority ArrayOptional

Specifies whether the BACnet device supports priority arrays. true means this datapoint supports priority array. false means this datapoint does not supports priority array. When the Priority Array parameter is not specified, the default is true. Some BACnet devices support priority arrays and some do not – refer to your BACnet device documentation for this information. If a BACnet device does not support priority arrays, add the Priority Array column and set it to false for all datapoints.

This parameter is available for BACnet with SmartServer 3.0 and higher.

Defining the BACnet Program ID

Each BACnet device interface definition requires a unique program ID. Create a BACnet program ID for the BACnet XIF as defined in Device Type Definition.

Application Example

Following is an example of creating a BACnet XIF file for a Contemporary Control Systems BASR-8M BASremote I/O device.

The SmartServer BACnet Configurator discovers and displays the interface to the device as shown in the following figure:

The configurator shows that the BASremote has AI, AO, BI, and BO BACnet objects.  The number shown after the BACnet object type is the BACnet object instance number.  Following is the BACnet XIF file for this device:

#manufacturer,Contemporary Control Systems
#description,BASR-8M BASremote V3
Object Type,Object Instance,Write Enable,Description,Presentation Type

The datapoint names for a BACnet device are all reported in a device block with block index 0 in the form of <BACnet-object-type>:<BACnet-object-instance>.