What Who-Is Is
Who-Is is the device-discovery service in BACnet, defined in Clause 16.10 of ANSI/ASHRAE 135-2024. A device sends Who-Is to find the Device object identifier and network address of other devices on the internetwork. It is an unconfirmed service: it is broadcast, and there is no acknowledgment. Devices that match the request answer separately with an I-Am service, which carries their device instance and address.
Who-Is and I-Am are the pair every BACnet network relies on to bootstrap communication. Before a client can read a point from a device, it usually needs the device’s address, and Who-Is is how it learns one.
How It Works
The sender broadcasts a Who-Is, normally to the whole network. The request optionally carries a Device Instance Range Low Limit and Device Instance Range High Limit: when present, only devices whose Device object instance number falls inside that range answer, which keeps a large network from flooding the sender with responses. Omit the range and every device that receives the broadcast is qualified to answer. Each qualifying device replies with an I-Am. A device may also send an unsolicited I-Am at any time, most commonly at power-up, so a client that was listening learns the device without ever asking.
Where You’ll See It
- Tool and BMS startup. When the CAS BACnet Explorer or a head end (the central BMS server) builds its device list, the first traffic on the wire is a Who-Is broadcast and the I-Am responses that come back.
- Cross-subnet discovery. Who-Is is a broadcast, so reaching devices on other IP subnets depends on a working BACnet BBMD design; this is the single most common reason a device is present but undiscovered.
- Range-limited sweeps. Scanning a known instance band (for example 1000 to 1099) on a busy network uses the low and high limit parameters to keep the response burst manageable.
Who-Is Error Codes
Who-Is is an unconfirmed, broadcast service, so it has no acknowledgment and returns no application-layer error. A Who-Is that produces no I-Am response is not a service error; it is a discovery or addressing problem. The usual causes:
- The target is on another IP subnet with no BACnet BBMD path, so the broadcast never reaches it.
- A device-instance range was supplied and the target’s instance falls outside it.
- The device and the sender are on different networks with no router between them.
Profiles That Require It
Who-Is has two directions, and the profiles split by which one they require. Answering a Who-Is (and sending the I-Am back) comes from DM-DDB-B and is required of essentially every device profile that participates in dynamic binding. Sending a Who-Is comes from DM-DDB-A and is required of the client and operator profiles that go looking for devices.
| Direction | Required by | Profiles (examples) |
|---|---|---|
| Execute (answer a Who-Is, send I-Am) | DM-DDB-B | Nearly all device profiles: B-BC, B-AAC, B-ASC, controllers, life-safety and access-control devices, gateways |
| Initiate (send a Who-Is) | DM-DDB-A | Client and operator profiles: B-OD, B-OWS, B-AWS, and the controllers that also act as clients (B-BC, B-AAC) |
A device on an MS/TP segment configured as a subordinate may be exempt from the dynamic-binding requirement; check the specific profile.
What Chipkin Provides
The CAS BACnet Stack supports Who-Is in both directions, sending discovery broadcasts as a client and answering them with I-Am as a server. Talk to us about adding BACnet client or server support to your device.