Skip to main content

BACnet MS/TP

The bacnet-mstp adapter is a full BACnet MS/TP master node. It participates in MS/TP token passing (Poll-For-Master, reply window) per ASHRAE 135 §9.5 and bridges NPDUs to and from BACnet/IP.

Modes

  • gateway (default) — transparent NPDU bridge. The adapter runs as an MS/TP master and opens a BACnet/IP UDP socket (port 47808 by default, configurable). NPDUs received on the MS/TP bus are BVLC-encapsulated and broadcast on the IP network; NPDUs from BACnet/IP are queued and transmitted while OmniBus holds the token.
  • sniffer — passive read-only listen. Decodes MS/TP frames without joining the token ring. Use this while another master drives the trunk.

Application-layer support

The adapter understands the common APDU services: ReadProperty, ReadPropertyMultiple, WriteProperty (commandable points), SubscribeCOV with change-of-value notifications, segmentation, and device discovery. Analog objects carry engineering units, including configurable units for Modbus- and N2-sourced points.

Outputs

OutputBehavior
TCPThe port's TCP server forwards raw MS/TP frames (preamble 55 FF, header CRC, payload, data CRC).
MQTTPublishes decoded frames; subscribes a send topic.
RESTInject frames synchronously.
WebhooksFan out the frame event.

MQTT

  • publish <prefix>/frame — JSON {frameType, src, dest, length, data, dataCrcOk}.
  • subscribe <prefix>/send — JSON {frameType, destination, source, dataHex}, or raw hex of a fully built frame.

REST

POST /api/ports/:path/rest/send
Authorization: Bearer <token>
Content-Type: application/json

{ "frameType": "BACNET_DATA_EXPECTING_REPLY",
"destination": 5, "source": 1, "dataHex": "01020304" }
// or a fully-built frame:
{ "frameHex": "55ff..." }

Limitations

:::caution Single-segment bridge only This is a transparent NPDU bridge for a single MS/TP segment to BACnet/IP. There is no DNET-aware routing, no I-Am-Router-To-Network, and no BBMD support. It covers single-segment MS/TP-to-IP deployments, not multi-network BACnet routers. :::

:::note Port 47808 is mutually exclusive with the MS/TP bridge A single BACnet/IP UDP port (47808) can't be both an independent endpoint and the bridge target at the same time; OmniBus enforces that mutual exclusivity. :::