Every device. One tool. Pay once. Modbus · BACnet · Siemens S7 · one-time licence · also from us: ModbusManager ↗
// bacnet/ip & ms/tp → mqtt

BACnet to MQTT
& Home Assistant

BACManager's gateway reads BACnet objects — from BACnet/IP controllers, and from MS/TP devices through the RS-485 port — and publishes each present value to an MQTT broker as its own retained topic. With Home Assistant discovery on, Home Assistant creates the entities by itself, with units and device classes. A setpoint changed in Home Assistant goes back to the BACnet object at the priority you choose, not as a blind overwrite. No Node-RED flow, no Python, no second box.

Download free trial Free workspace

Windows 10/11 · one-time license · 14-day trial

// one row per point

Pick the objects, the broker does the rest

Each gateway row names a BACnet object (type and instance on a device you discovered on the BACnet tab) and sends it to MQTT. Read rows publish; write rows also take commands.

BACManager Gateway tab: a BACnet endpoint AHU-1 (device 2001) and eleven rows reading AI, AO and BI objects and writing an AV setpoint and a BV, all with Dest MQTT and a topic per row; the write rows use BACnet priority 8
The free workspace: an air handling unit's temperatures, valve, damper, fan and filter status to MQTT; the supply air setpoint and the loop's auto/manual switch writable from Home Assistant

This is what a subscriber to ahu1/# received from that workspace:

ahu1/status                          online
ahu1/outdoor_air_temperature/state   3.1
ahu1/supply_air_temperature/state    19
ahu1/return_air_temperature/state    21.7
ahu1/filter_pressure_drop/state      312
ahu1/supply_airflow/state            4165
ahu1/heating_valve/state             14
ahu1/outdoor_air_damper/state        35
ahu1/supply_fan_running/state        1
ahu1/filter_alarm/state              1
ahu1/supply_air_setpoint/state       21.5
ahu1/loop_auto/state                 1
// what lands where

Topics and Home Assistant entities

BACnet object, row modeMQTTHome Assistant
AI, AO, AV — read<base>/<topic>/state, a numbersensor with unit and device class
BI, BO, BV — read…/state, 1 or 0binary_sensor
AV (or AO) — writestate + commands on …/setnumber — a setpoint you can change
BV (or BO) — writestate + commands on …/setswitch
The gateway itself<base>/status: online / offline (last will)availability of every entity

Values are published when they change and again every 60 seconds, retained, so anything that subscribes later gets the current state at once. Energy rows (device class energy) are announced as total_increasing for Home Assistant's Energy dashboard. A row you delete disappears from Home Assistant, and when Home Assistant restarts the gateway announces everything again.

// writes that respect the building

Home Assistant writes at a priority, not over everything

A commandable BACnet object has a 16-level priority array. The value that counts is the one at the strongest priority that holds something.

🎯

Your priority, per row

Each write row has its own BACnet priority — 8, Manual Operator, unless you choose another. A setpoint set in Home Assistant goes into that slot and nowhere else.

🕐

Schedules stay in charge

If the controller's own logic writes at a stronger priority, it keeps control and Home Assistant shows the value that actually applies — the row is read back after every write.

📝

Every write logged

Each command from MQTT appears in the gateway log with the object, the value and the priority it was written at; text that is not a number writes nothing.

Writing at priority 8 leaves the value there until something relinquishes it. See the priority array explained for how relinquish and the relinquish default work, and pick the priority with the site's controls engineer.

// step by step

From a BACnet device to Home Assistant

1

Discover the device

On the BACnet tab open BACnet/IP (or MS/TP on a COM port) and run Discover. Note the device instance and the objects you want from the object list.

2

Add the BACnet endpoint and rows

On the Gateway tab add a + BACnet endpoint with the device instance, then a row per object: type, instance, Dest MQTT, a topic, the unit and the Home Assistant class.

3

Broker and start

Enter the broker (Home Assistant's Mosquitto add-on, port 1883), user and password, keep discovery on, and press Start gateway. The device appears in Home Assistant under MQTT.

// free download

The air handling unit workspace

Eleven rows for a typical AHU: outdoor, supply and return air temperature, filter pressure drop, supply airflow, heating valve, outdoor air damper, fan running and filter alarm — plus the supply air setpoint (AV 0) and the loop's auto/manual switch (BV 0) writable from Home Assistant at priority 8. Base topic ahu1, discovery on.

Change the device instance on the endpoint and the object instances to your controller's, enter the broker, and start. The workspace matches the simulated AHU in BACManager's test set, so it also runs as-is against that simulator.

Download workspace
// questions

BACnet to MQTT — FAQ

Can BACManager send BACnet data to MQTT?+
Yes. The gateway reads any BACnet object you add as a row — from BACnet/IP or MS/TP devices — and publishes its present value to an MQTT broker as a retained topic, <base>/<topic>/state.
How do I get BACnet into Home Assistant?+
Point BACManager's gateway at Home Assistant's MQTT broker with discovery on. Every row is announced with its name, unit and device class, and Home Assistant creates the entities under one device — no YAML and no custom integration.
Does it work with BACnet MS/TP devices?+
Yes. BACManager opens MS/TP on an RS-485 port of the PC; once the devices are discovered, their objects are used in gateway rows exactly like BACnet/IP objects.
Can Home Assistant change a BACnet setpoint?+
Yes. A row in write mode appears as a number (or a switch for a binary object). What you set is written to the object at the row's BACnet priority, 8 by default, and read back so Home Assistant shows the value that applies.
Can the same values also go to a PLC or a BMS?+
Yes. Other rows of the same gateway can serve a Modbus TCP map, expose values as a BACnet/IP device, or fill a Siemens S7 data block — see the gateway page.
Is the MQTT output an extra-cost module?+
No. The gateway with MQTT and Home Assistant discovery is part of the standard $149 one-time BACManager license, version 1.4.5 or newer.

Get your BACnet points into Home Assistant

Download the free trial, load the AHU workspace, point it at your broker — the entities appear by themselves. No credit card.

Download free trial See pricing

Windows 10/11 · $149 one-time