Industrial IoT

BACnet vs Modbus: Protocol Comparison for Facilities and Plants

A practical BACnet vs Modbus comparison covering data models, transports, discovery, security and typical use, with a clear pattern for translating both protocols into MQTT topics for a cloud broker.

Split illustration of a building automation controller and a factory PLC connected to one gateway, comparing BACnet vs Modbus
Run this on your own MQTT brokerGet a private, managed MQTT broker on the Free plan and start from ready-made code samples.
Try it free Code samples No card required

BACnet vs Modbus is a question every facilities engineer, systems integrator and plant automation team runs into sooner or later, usually when a chiller speaks one protocol and the energy meters speak the other. This guide compares the two protocols on data model, transport, discovery, security and day-to-day effort, then shows how a gateway translates both into MQTT so the data lands in one place. By the end you will know which protocol fits which job and how to bring both into a modern telemetry pipeline.

Two Protocols, Two Different Worlds

Modbus was created in the late 1970s for programmable controllers. It is deliberately minimal: a client asks a server for a block of 16-bit registers or single bits, and the server answers. There are no names, no units and no descriptions on the wire. Everything that gives the numbers meaning lives in a register map, usually a PDF from the device vendor.

BACnet (Building Automation and Control networks) was developed by ASHRAE for HVAC, lighting, access control and fire systems, and is standardized as ASHRAE 135 and ISO 16484-5. It was designed from the start for interoperability between vendors in large buildings. Instead of anonymous registers, a BACnet device exposes typed objects with named properties, and devices can discover each other on the network.

That difference in philosophy explains almost everything else in the comparison. Modbus is simple to implement and nearly universal on meters, drives and PLCs. BACnet is richer and self-describing, and dominates building management systems.

BACnet vs Modbus at a Glance

Aspect Modbus BACnet
Origin and domain Industrial controllers, meters, drives Building automation: HVAC, lighting, access, fire
Data model Coils, discrete inputs, holding and input registers (16-bit) Objects (Analog Input, Binary Output, Schedule, Trend Log...) with properties
Self-description None, needs a register map Object names, units, descriptions readable from the device
Discovery None, you must know addresses Who-Is / I-Am and Who-Has / I-Have broadcasts
Serial transport Modbus RTU over RS-485 MS/TP over RS-485
IP transport Modbus TCP, port 502 BACnet/IP over UDP, port 47808 (0xBAC0)
Change notification None, polling only Change of Value (COV) subscriptions
Alarms and schedules Not part of the protocol Native objects and services for alarms, events, schedules, trends
Security None in classic Modbus; Modbus/TCP Security adds TLS on port 802 None in classic BACnet/IP; BACnet Secure Connect (BACnet/SC) adds TLS over WebSockets
Implementation effort Very low Higher, especially for full device profiles

Data Models: Registers versus Objects

The data model is where the BACnet vs Modbus decision is usually made, because it determines how much integration work every new device costs.

Modbus: numbers at addresses

A Modbus energy meter might expose voltage at holding register 3000 as a 32-bit float spread over two registers. To use it you need to know the address, the function code, the data type, the word order and any scale factor. Get the word order wrong and 230 V reads as a nonsense value. Every new device model means reading a new register map and encoding it in your gateway configuration.

The upside is predictability: every PLC, SCADA package and gateway speaks it.

BACnet: typed objects with properties

A BACnet controller exposes something like analog-input,3 with properties such as object-name ("AHU-1 Supply Air Temp"), present-value (13.4), units (degrees-Celsius), status-flags and reliability. A client can enumerate the device's object-list and read names and units without any external document. Writes go through a priority array with 16 levels, so a life-safety override at priority 1 wins over a scheduled setpoint at priority 16, and relinquishing a priority lets the next level take over.

That richness costs complexity: stacks are larger, device profiles define which services must exist, and large sites need careful management of device instance and network numbers.

Transports and Networking

Both protocols have a serial variant and an IP variant, and the pairs look similar on paper.

  • Modbus RTU vs BACnet MS/TP. Both run on RS-485 daisy chains. Modbus RTU uses a single master that polls slaves in turn. MS/TP is token passing among masters, so several controllers can initiate traffic, with slaves allowed as passive nodes. MS/TP trunks are common for field controllers on VAV boxes and fan coils.
  • Modbus TCP vs BACnet/IP. Modbus TCP is a plain TCP connection to port 502, which crosses routers and firewalls easily. BACnet/IP uses UDP on port 47808 and relies on broadcasts for discovery. Broadcasts do not cross subnets, which is why BACnet sites use BACnet Broadcast Management Devices (BBMDs) or Foreign Device Registration to stitch subnets together.

For remote access, both classic protocols are a poor fit for the internet. Neither has built-in authentication or encryption, and exposing port 502 or 47808 publicly is a well-known way to get a building or plant scanned and probed. The modern answer is to keep them on the local network and move data outward over an encrypted, authenticated protocol, which is where MQTT comes in.

Polling versus Change of Value

Modbus has no notion of events. If you want to know when a temperature changes, you poll it every few seconds and compare. That is fine for a handful of meters and wasteful for thousands of points.

BACnet offers COV subscriptions: a client subscribes to an object, and the device sends a notification when the value moves beyond its COV increment or the status flags change. Subscriptions have lifetimes and must be renewed, and not every device supports COV on every object type, so production gateways usually combine COV where available with polling as a fallback.

This matters for MQTT, which is event-driven: turning COV notifications or deadband-filtered polls into publishes keeps bandwidth low. See the report-by-exception guide for deadband tuning.

When to Choose Which

Use this checklist when you have a choice, for example when specifying a new installation:

  1. Is the system primarily HVAC, lighting or building services? Prefer BACnet. Your building management system, its graphics and its alarm handling will expect BACnet objects.
  2. Is it a meter, drive, inverter or simple sensor? Modbus is often the only option and is perfectly adequate. Most building management systems integrate Modbus devices through a gateway or a driver.
  3. Do you need schedules, trends and alarms inside the field devices? BACnet has native objects for them; with Modbus you implement them in the PLC or SCADA.
  4. Will different vendors' controllers need to interoperate directly? BACnet, with BTL-listed devices.
  5. Is the integration budget per device tight and the point list small? Modbus is quicker to wire and configure.
  6. Do you need secure transport on the local network? Look for BACnet/SC or Modbus/TCP Security support, and plan network segmentation either way.

In practice most sites run both. The real question is not BACnet vs Modbus but how to get both into a single, well-named data layer.

Bridging BACnet and Modbus to MQTT

A protocol gateway sits on the local network, speaks BACnet and Modbus downward, and publishes MQTT upward to a broker. It can be a commercial building gateway, an industrial PC running Node-RED or a small Python service. The pattern is the same:

  1. Poll Modbus registers on a schedule, decode them into engineering values and apply a deadband.
  2. Subscribe to BACnet COV where supported and poll the rest.
  3. Normalize both into one payload format with value, unit, quality and timestamp.
  4. Publish to topics that describe the asset, not the protocol.

The last point is the important one. Consumers should not care whether supply air temperature came from analog-input,3 or from holding register 3000. A topic tree based on location and equipment, in the spirit of ISA-95 MQTT topics, hides the protocol completely:

connectmq/demo/a7f3k2/campus1/building-b/floor3/ahu1/supply-air-temp
connectmq/demo/a7f3k2/campus1/building-b/floor3/ahu1/fan-status
connectmq/demo/a7f3k2/campus1/building-b/plantroom/meter1/active-power
connectmq/demo/a7f3k2/campus1/building-b/plantroom/meter1/voltage-l1

A normalized payload from either side looks like this:

{
  "value": 13.4,
  "unit": "degC",
  "quality": "good",
  "ts": "2026-10-16T09:41:07Z",
  "source": "bacnet:device-120001/analog-input:3"
}

Try the topic layout on a test broker

Before connecting real equipment, you can validate the topic design against the public MQTT test broker at broker.connectmq.com. Use a random prefix, because the public area is readable by everyone:

# Terminal 1: watch everything under your test prefix
mosquitto_sub -h broker.connectmq.com -p 1883 -i bms-watch-a7f3k2 \
  -t 'connectmq/demo/a7f3k2/#' -v

# Terminal 2: simulate one BACnet point and one Modbus point
mosquitto_pub -h broker.connectmq.com -p 1883 -i bms-sim-a7f3k2 \
  -t 'connectmq/demo/a7f3k2/campus1/building-b/floor3/ahu1/supply-air-temp' \
  -m '{"value":13.4,"unit":"degC","quality":"good"}'
mosquitto_pub -h broker.connectmq.com -p 1883 -i bms-sim2-a7f3k2 \
  -t 'connectmq/demo/a7f3k2/campus1/building-b/plantroom/meter1/active-power' \
  -m '{"value":42.7,"unit":"kW","quality":"good"}'

Count your topic levels as you design: the public broker allows up to 8 levels, so long building hierarchies may need to be flattened for testing. Production brokers on your own plan do not share that test limit.

For the Modbus side in detail, see Modbus TCP to MQTT and Modbus RTU to MQTT.

Production: a private broker

For real buildings and plants, point the gateway at a private broker with credentials and TLS on port 8883. With ConnectMQ you create a broker in the portal, copy the generated username, password and client ID into the gateway, and immediately see the incoming topics in the live topic explorer. Threshold alert rules in the portal can flag a supply air temperature or a power reading that crosses a limit, while historians, dashboards and analytics subscribe as ordinary MQTT clients. If you want to understand the hosting trade-offs first, read about the benefits of a fully managed MQTT service.

Common Pitfalls When Integrating Both

  • Modbus word order and scaling. Verify each 32-bit value against the device display before trusting it.
  • Duplicate BACnet device instances. Two controllers with the same instance number cause intermittent, confusing behavior. Audit before you integrate.
  • Writing to the wrong BACnet priority. A gateway that writes at a high priority and never relinquishes can lock out the building schedule.
  • Polling too fast. A shared RS-485 trunk can be starved by an aggressive gateway.
  • Flat topic names. Topics like modbus/40001 are impossible to consume at scale. Name by asset.

For the broader picture of how these pieces fit together in a plant, the industrial IoT with MQTT guide walks through architecture, edge gateways and data modeling end to end.

Get Started with ConnectMQ

Once your gateway translates BACnet and Modbus into clean MQTT topics, it needs a reliable MQTT broker in the cloud to publish to. Create a free Serverless broker at app.connectmq.com, no credit card required, and connect your gateway with TLS in minutes. ConnectMQ gives you the live topic explorer and threshold alerts to verify every point as it comes online.

Frequently Asked Questions

Is BACnet better than Modbus?

Neither is better in general. BACnet is richer and self-describing, which suits building automation; Modbus is simpler and nearly universal on meters, drives and PLCs.

Can BACnet and Modbus devices talk to each other directly?

No, they are different protocols. You need a gateway or a controller that speaks both, or you can bring both into MQTT and let consumers work with one normalized data layer.

What port do BACnet/IP and Modbus TCP use?

BACnet/IP uses UDP port 47808 and Modbus TCP uses TCP port 502. Neither should be exposed to the internet; send data outward over MQTT with TLS instead.

Does BACnet support event-driven updates?

Yes, through Change of Value (COV) subscriptions, though support varies by device and object type. Modbus has no equivalent and always relies on polling.

Related articles

IIoT Edge Gateway: What It Does and How to Choose One

An IIoT edge gateway connects machines that speak Modbus, OPC UA or proprietary protocols to MQTT and the cloud. Learn its core roles, common architectures and how to choose the right one.

7 min read

All articles →

Your private MQTT broker is a few clicks away

Create an account, get your broker credentials and connect your first device — no servers to install, patch or scale.