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
| Output | Behavior |
|---|---|
| TCP | The port's TCP server forwards raw MS/TP frames (preamble 55 FF, header CRC, payload, data CRC). |
| MQTT | Publishes decoded frames; subscribes a send topic. |
| REST | Inject frames synchronously. |
| Webhooks | Fan 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. :::