Skip to main content
Version: 2.6.0

BACnet BACnet/IP Integration Guide

MaestroHub integrates natively with BACnet/IP building automation devices. Browse device objects, read property values in batch, and orchestrate building data acquisition inside your pipelines.

Overview

The BACnet/IP connector provides:

  • Direct UDP communication with any ASHRAE Standard 135 compliant device
  • Object discovery via device browsing to enumerate all available objects
  • Batch property reads using ReadPropertyMultiple for efficient data acquisition
  • OS-managed routing by default — bind to all interfaces and let the kernel pick the source per destination; with an explicit interface override for multi-NIC industrial hosts

Connection Configuration

Creating a BACnet/IP Connection

Navigate to ConnectionsNew ConnectionBACnet/IP and configure the device endpoint with the following fields.

BACnet/IP Connection Creation Fields

1. Profile Information
FieldDefaultDescription
Profile NameA descriptive name for this connection profile (required, max 100 characters)
DescriptionOptional description for this BACnet connection
2. BACnet/IP Settings
FieldDefaultDescription
Device IP AddressIPv4 address of the target BACnet device (e.g., 192.168.1.100) — required
Port47808BACnet/IP UDP port on the target device (1–65535)
Device IDBACnet Device Instance ID (0–4194302) — required
Timeout (ms)10000Timeout for all BACnet operations including connect, read, and browse (1000–300000 ms)
3. Advanced

Source-side network controls and read performance tuning live under the dedicated Advanced tab on the connection form. Defaults work for almost every setup — only touch these when you need to pin the outgoing interface on a multi-NIC host, work around a local-port collision, or tune how aggressively a Read Group reads from the device.

FieldDefaultDescription
Network Interface(blank — auto)Name of the local network interface to bind to (e.g. Ethernet 4, eth0). When blank, the connector binds to 0.0.0.0:<localPort> and the OS picks the source IP per destination via its routing table — the right default for almost every deployment, including loopback targets and Docker port-published simulators. Set explicitly when running on a multi-NIC industrial host where source-IP allowlists at the device level require a deterministic source NIC.
Local Port0 (auto-assign)Local UDP source port for outgoing BACnet traffic (0–65535). Leave 0 (recommended) to let the OS auto-assign a free ephemeral port on every connection — this is what lets you run many connections to the same device IP (e.g. dozens of device IDs behind one address), since each connection needs its own local port. Set a fixed port only when upstream firewall rules require a deterministic outgoing port; a fixed port makes the connector walk a window of up to 64 ports (portport+63) and therefore caps the host at a few dozen concurrent BACnet connections.
Max Concurrent Reads4Maximum ReadPropertyMultiple requests in flight at once on this connection (1–16). BACnet field controllers tolerate only a few simultaneous transactions, so keep this low — 4 is safe for most devices. This is the ceiling that protects the device when a Read Group runs many reads in parallel; raise it only for robust controllers, and lower it to 12 if you see dropped packets or timeouts under load.
When to leave Advanced alone
  • Loopback / local simulator (e.g. bacnet-sim published on 127.0.0.1) — leave both blank; the OS routes correctly.
  • Single-NIC host on the same subnet as the device — defaults are correct.
  • Many BACnet connections on one MaestroHub instance (e.g. many device IDs on the same IP) — leave Local Port at 0 (auto-assign). The OS hands each connection its own ephemeral source port, so there is no practical limit. Only set a fixed Local Port if firewall rules require it — but note a fixed port caps the host at a few dozen connections.
4. Connection Labels
FieldDefaultDescription
LabelsKey-value pairs to categorize and organize this BACnet connection (max 10 labels)

Example Labels

  • building: main-campus — Building name
  • floor: 2nd — Floor level
  • system: hvac — Building system
  • location: mechanical-room — Physical location
Notes
  • UDP Protocol: BACnet/IP communicates over UDP. The MaestroHub server must have direct network access to the device on the configured port.
  • No Authentication: BACnet/IP has no built-in authentication — security is managed at the network level.
  • Device ID: The Device Instance ID uniquely identifies the target device on the BACnet network. It can be found in device documentation, the device's configuration interface, or via a BACnet discovery tool.
  • Port 47808: This is the standard BACnet/IP port (0xBAC0). Only change it if the device uses a non-standard port.
  • Timeout: The default 10000 ms (10 seconds) works well for local networks. Increase for slower networks or devices with many objects.
  • Routing: When the Advanced → Network Interface field is left blank, the connector binds to all local interfaces and the OS chooses the source IP per destination. This works correctly on Linux, macOS, and Windows, including loopback targets. Set an explicit interface only when source-side NIC control is required.

Function Builder

Creating BACnet Functions

Once the connection is saved:

  1. Go to the Functions tab → New Function
  2. Choose Read Properties
  3. Configure the read items with names, object types, and property IDs
BACnet Function Creation

Configure BACnet read functions with named items and the browse panel for object discovery

Read Properties Function

Purpose: Read property values from one or more BACnet objects using ReadPropertyMultiple. Each item is given a unique name that becomes the key in the result output.

Configuration Fields

FieldTypeRequiredDefaultDescription
Function NameStringYesA descriptive name for this read function (1–100 characters)
DescriptionStringNoOptional description
Read ItemsArrayYesList of BACnet objects/properties to read (1–50 items)

Read Item Fields

FieldTypeRequiredDefaultDescription
Item NameStringYesUnique name for this item — used as the key in results
Object TypeSelectionYesBACnet object type (e.g., AnalogInput, BinaryInput, Device)
InstanceNumberYesObject instance number
Property IDSelectionNo85 (Present_Value)BACnet property to read
Large reads are split automatically

A single read function can hold up to 50 items. The connector reads the device's accepted APDU size on connect and splits the items into as many ReadPropertyMultiple requests as needed to fit — so a function with many items never fails just because the response would exceed the device's APDU limit. If a chunk still comes back too large, the connector halves it and retries down to single-property reads, and reports per-item errors rather than failing the whole read. To read more than one function's worth of points (hundreds to thousands), use the BACnet Read Group node.

Supported Object Types

CodeNameTypical Use
0AnalogInputTemperature sensors, pressure sensors, flow meters
1AnalogOutputValve positions, damper commands, setpoints
2AnalogValueInternal calculated values, configurable setpoints
3BinaryInputOccupancy sensors, switch states, alarms
4BinaryOutputRelay commands, on/off controls
5BinaryValueInternal binary states, mode flags
8DeviceThe device itself (instance = Device ID)
12LoopPID control loops
13MultiStateInputMulti-position switches, fan speed states
14MultiStateOutputMulti-position actuator commands
17ScheduleWeekly schedules
20TrendLogHistorical data logs

Common Property IDs

IDNameDescription
85Present_ValueCurrent value — the most commonly read property
77Object_NameHuman-readable name of the object
28DescriptionText description of the object
36Event_StateCurrent alarm/event state
103ReliabilityReliability status of the object
111Status_FlagsBitmask: in-alarm, fault, overridden, out-of-service
117UnitsEngineering units (e.g., degrees-Fahrenheit, percent)

Browse Panel

The function configuration page includes a Browse Device Objects panel on the right side. Click Browse to discover all objects on the connected device. You can then:

  • Search/filter objects by name, type, or instance number
  • Click an object to add it as a read item with auto-generated name

Testing Functions

Before saving, you can test your configuration:

  • Per-item testing: Click the test tube icon on any read item to verify it reads correctly
  • Full function test: Click Test Function to execute all items and view results in the test dialog

Pipeline Integration

Use the BACnet Read node inside the Pipeline Designer to incorporate building automation data into your pipelines. Select the connection, choose a read function, and bind parameters to upstream outputs or constants.

To pull many points from one device without wiring dozens of Read nodes, use the BACnet Read Group node — it runs multiple read functions against one connection (manually picked, all functions, or by label), bounded by the connection's Max Concurrent Reads so the device isn't flooded. See BACnet/IP Nodes for details.

For orchestration blueprints that combine BACnet with analytics, SQL, or notification steps, review the Connector Nodes page.

BACnet node in pipeline designer

BACnet Read node with connection binding and function selection

Common Use Cases

HVAC Monitoring

Read temperature, humidity, and airflow values from air handling units (AHUs), rooftop units (RTUs), and variable air volume (VAV) boxes, then push results to dashboards or historians.

Energy Management

Acquire meter readings, power consumption, and demand data from BACnet-enabled meters and submeters for energy analytics and reporting.

Alarm Aggregation

Poll event states and status flags from building controllers to aggregate alarms into a central notification system with escalation workflows.

Occupancy Analytics

Read occupancy sensor data and schedule objects to optimize HVAC and lighting based on real-time building usage patterns.