BACnet Who-Has Service

Who-Has is BACnet's object-discovery service (Clause 16.9): how it finds which device holds a named object, and which profiles require it.

What Who-Has Is

Who-Has is the object-discovery service in BACnet, defined in Clause 16.9 of ANSI/ASHRAE 135-2024. Where Who-Is finds devices, Who-Has finds an object: it asks which devices hold an object with a given Object_Name or a given Object_Identifier. It is an unconfirmed service, and devices answer with I-Have.

Who-Has and I-Have are the object-level counterpart to the device-level Who-Is and I-Am pair.

How It Works

The sender broadcasts a Who-Has naming either an object identifier (a type and instance, such as Analog Value 7) or an object name (a text string). An optional device-instance range limits which devices answer. Any device that holds a matching object replies with an I-Have carrying its own device identity and the object it found. A device may also send I-Have unsolicited to advertise an object.

Where You’ll See It

  • Finding a point by name. A tool locating which controller owns a specifically named object without knowing its device instance in advance.
  • Cross-device references. Resolving where a referenced object lives when only its name is known.
  • The broadcast reach limit. Like Who-Is, Who-Has is a broadcast, so reaching other IP subnets depends on a working BACnet BBMD design.

Who-Has Error Codes

Who-Has is an unconfirmed, broadcast service with no acknowledgment and no application-layer error. A Who-Has that yields no I-Have is a discovery problem, not a service error:

  • No device on the reachable network holds an object with that name or identifier.
  • The object exists but on a subnet the broadcast could not reach, usually a missing BACnet BBMD path.
  • A device-instance range was supplied and the holder falls outside it.

Profiles That Require It

Answering Who-Has (and sending the I-Have back) comes from DM-DOB-B, the dynamic-object-binding BIBB, and is required of most device profiles that expose objects, including B-BC, B-AAC, B-ASC, and B-SA. Initiating Who-Has is a client behavior and is not separately required by the standard device profiles, though operator and client tools commonly send it.

What Chipkin Provides

The CAS BACnet Stack answers Who-Has with I-Have as a server, and the test tooling can initiate object discovery. Talk to us about adding BACnet client or server support to your device.