Skip to content

BACnet

The BACnet Device component reads one Building Automation and Control Networks (BACnet) device over an Internet Protocol (IP) network and publishes the objects you choose as Profinity tags. BACnet is used for building automation and for heating, ventilation, and air conditioning (HVAC) systems. The component sits in the Industrial Protocols group.

flowchart LR
    Device["BACnet device"]
    subgraph Profinity
        Component["BACnet Device"] --> Tags
    end
    Device --> Component
The BACnet Device component polls the objects in its point map from one BACnet device and publishes each as a Profinity tag

Add one component for each BACnet device you want to read. The component supports BACnet/IP only, not BACnet MS/TP (Master-Slave/Token-Passing). It talks only to the device at the Remote host address you set, so it does not search the network for devices.

Quick start

You need:

  • An edition with the Industrial Protocols licensed component group, and the BACnet plugin installed, as described in Install an industrial protocol plugin.
  • A BACnet/IP device that the computer running Profinity can reach on the network, and its device instance number, which a BACnet configuration tool or the device's own display shows.
  • The Security administration permission to view the component dashboard in step 7.

  • Select ADD COMPONENT, then select BACnet Device in the Industrial Protocols group.

  • In the settings dialog, set Remote host to the IP address of the BACnet device.
  • Set Device instance to the instance number of that device.
  • In the Point map, add one row with a Name, an Object type, and an Instance.
  • Select ADD COMPONENT at the bottom of the dialog.
  • Select Connect / Disconnect from the component's menu. Auto connect is off by default, so the component does not connect on its own.
  • On the component dashboard, check that STATUS shows Connected and CONNECTED is true, and that the tag for your row, under the component's Points folder, shows Good quality.

To change the settings later, select Change Settings from the component's menu, then select SAVE.

Communications settings

Setting Type Default Description
Name Text BACnet Device The name of the component. Must be unique within the profile.
Local UDP port Whole number 47808 The User Datagram Protocol (UDP) port that Profinity uses on this computer, from 1 to 65535. 47808 is the standard BACnet/IP port.
Remote host Text 127.0.0.1 The IP address of the BACnet device. Required. The default is this computer, not the device, and Profinity sends every request to this address, so set it before you connect.
Device instance Whole number 0 The instance number that the device holds in its own Device object, from 0 to 4194302. Set it even when the instance is 0.
Poll interval (ms) Time 1000 How often Profinity reads the point map, in milliseconds, from 50 to 600000.
Request timeout (ms) Time 1000 How long Profinity waits for the device to answer a request, in milliseconds, from 50 to 60000.
Reconnect delay (ms) Time 2000 How long Profinity waits between connection attempts, in milliseconds, from 0 to 600000.
Auto connect On or off Off Connects to the device when the profile loads, and keeps trying when the device is down or the connection is lost. Refer to Connections and reconnecting.

Every BACnet device holds a Device object, which records its identity, including its instance number. Each time Profinity connects, and again after a read fails, it reads the Device object at the Remote host and compares its instance number with Device instance. Profinity reads the device only while the two match, so a changed address never leads to another device being read.

Point map

The point map lists the BACnet objects to read, and each row becomes one tag. For folders and Browse, refer to Industrial protocol components. Browse lists the device's objects only while the component is connected.

Column Type Default Description
Name Text None The name of the tag in the component's Points folder. It must be unique in its folder, and the same name can be used in another folder.
Object type Choice AnalogValue The type of BACnet object: AnalogInput, AnalogOutput, AnalogValue, BinaryInput, BinaryOutput or BinaryValue.
Instance Whole number 0 The instance number of the object in the device.
Writable On or off Off Lets Profinity write the tag value to the object.
Unit Text None An optional unit label for the tag.

Analog objects become number tags, and binary objects become boolean tags. Profinity reads each object's present value, which is the value BACnet reports for the object now, on every Poll interval (ms). It writes to an object only when Writable is on for that row.

Writing to a device

A write can change how the building plant behaves. Turn Writable on only for points that Profinity must control.

Example

This example reads one temperature and writes one setpoint. Add it under components: in the profile.yaml file of the profile.

- component:
    type: BacnetDevice
    id: BacnetDevice1
    name: Plant Room Controller
    tagTreeParentPath: /
    localUdpPort: 47808
    remoteHost: DEVICE_IP_ADDRESS
    deviceInstance: DEVICE_INSTANCE
    pollIntervalMilliseconds: 1000
    requestTimeoutMilliseconds: 1000
    reconnectDelayMilliseconds: 2000
    autoConnect: true
    points:
    - name: SupplyTemperature
      objectType: AnalogInput
      instance: 1
      writable: false
      unit: °C
    - name: TemperatureSetpoint
      objectType: AnalogValue
      instance: 2
      writable: true
      unit: °C

Replace DEVICE_IP_ADDRESS with the IP address of your BACnet device and DEVICE_INSTANCE with its instance number. The other keys match the settings and point map columns in the tables on this page. The two points appear in the tag tree as /Plant Room Controller/Points/SupplyTemperature and /Plant Room Controller/Points/TemperatureSetpoint.

Dashboard

The component dashboard shows the connection STATUS, whether the device is CONNECTED, the number of values read (RECEIVED), and the number written (SENT). Select Connect / Disconnect from the component's menu to start or stop polling. Viewing the dashboard needs the Security administration permission, as described in Roles and permissions.

The point tags work like any other tag, so a dashboard, a logger, a rule, or a script can use them.

Troubleshooting

What you see Cause What to do
A point shows bad quality Remote host is wrong. Set Remote host to the IP address of the BACnet device.
A point shows bad quality, and the other points read The device has no object with that Object type and Instance. Correct the point map row to an object that exists in the device. Browse lists the objects.
Points show bad quality, and reads time out The device does not answer within Request timeout (ms). Check that the device answers at Remote host, or raise Request timeout (ms).
STATUS shows Error with "The device at <address> reports Device instance <number>, but Device instance is set to <number>" Device instance differs from the instance of the device at Remote host, or the device was replaced on the same address. Set Device instance to the number in the message, or correct Remote host if the address now belongs to another device. Profinity tries again after each Reconnect delay (ms), so the component connects at the next attempt.
STATUS shows Error with "The device at <address> did not give its Device object identity" The device does not allow its Device object to be read, or it is older than BACnet protocol revision 4 and does not answer the read that Profinity uses. Check Remote host, and check in the device's configuration tool that the Device object can be read. A device that does not answer this read cannot be used with the component.

For how the log records failed reads and recovery, refer to Connections and reconnecting, and read the messages on the Logs page.

To compare BACnet with the other protocol components, refer to Industrial protocol components.