BACnet Server API: Linux

The BACnet Server API is a shared library for Linux which can be used to build a BACnet Server, a Gateway or a BACnet Client Application using C/C++, JAVA or Lua. It's purpose is to make real time information available via BACnet Services so that other BACnet devices can read/write to the BACnet Server. It's most common use would be as a gateway for a Non BACnet system to allow other BAcnet Devices to monitor and control the Non BACnet system. It supports BACnet/IP, BACnet Ethernet, BACnet MSTP, BACnet PTP and the Anex H Data Link Layers.


The SDK includes a license of the BACnet Operator Workstation, BACnet device simulator and Linux development board.


Real Time Data from the Non BACnet system is stored inside BACnet Objects which are accessible from other devices on the network. The information can be stored in Analog or Binary Objects in one or more internal devices. The BACnet Server has the ability to act as more than 1 device to allow points to be grouped in a logical manner. An example of this might be for a gateway to monitor 6 identical Chillers each with 500 internal points. 6 internal Devices can be created each with 500 BACnet objects. Each of the 6 devices can be given a name to represent the 6 Chillers, and the same addressing and object names can be used for the 500 BACnet objects for each Chiller. This simplifies the gateway and reduces the size of the object list which has a size of 500 per chiller rather than 3000 if all points were inside the same device. Evaluation copy evalable for download.

Frequently Asked Questions

Click here for Frequently Asked Questions.

BACnet Server API

The BACnet Server API is broken up into 4 components as follows.

Internal Objets

The Internal BACnet Objects module of the BACnet Server API can be used to interact with BACnet Objects that are internal to the server. The Internal Objects can be Analog or Binary Objects and can be accessed from other BACnet Devices on the network.

API - Cache

The Cache module of the BACnet Server API can be used to read/write to local or remote BACnet Objects using the BACnet Server cache. The cache in the BACnet Server is optimised to use the service appriopriate to the device from which information is being requested. The cache locates a device using the whoIs/Iam service, and then checks to see if readPropertyMultiple messages can be sent. After the device capabilities are known, the BACnet Server will issue the appropriate service to retreive the information.

API - Service Indication

The Service Indication module of the BACnet Server API can be used to receive Service Messages that are initiated by internal or remote BACnet Devices. Typical uses are for confirmed/unconfirmedEventNotifications for Alarms and confirmed/unconfirmedCOVNotifications for COV notifications. The messages can be used to write to a database etc.

API - Service Request

The Service Request module of the BACnet Server API is used to send BACnet Services to a local or remote devices on the BACnet network. The services operate synchronously, they do not return until a response has been returned or a timeout takes place.

Sample Source Code

There are many samples available in our help documentation which is available from our downloads page on this site.

BACnet 2008 Version 1 Revision 7

Click here for the BACnet Protocol Implementation Conformance Statement (PIC).

Click here for the revision history.

BACnet 2016 Version 1 Revision 18

Click here for the revision history.