What I-Have Is
I-Have is the object-announcement service in BACnet, defined in Clause 16.9 of ANSI/ASHRAE 135-2024. A device sends I-Have to declare that it holds an object with a given Object_Name and Object_Identifier. It is an unconfirmed service, and it is the answer to a Who-Has request, though a device may also send it unsolicited.
I-Have is to objects what I-Am is to devices: the advertisement half of a discovery exchange.
How It Works
A device sends I-Have either to answer a Who-Has that matched one of its objects, or unsolicited to advertise an object’s existence. The message carries the device’s own identity, the object’s identifier, and the object’s name, so a listener learns both what the object is and which device holds it.
Where You’ll See It
- Answering an object search. Every response a tool collects after a Who-Has is an I-Have.
- Advertising a key object. A device announcing an important object at startup so clients can bind to it without asking.
- Name-to-device mapping. Building a map of which device owns which named object across a site.
I-Have Error Codes
I-Have is an unconfirmed, often broadcast service with no acknowledgment and no application-layer error. If an expected I-Have never arrives, the cause is on the discovery side: no device holds a matching object on the reachable network, or the responder is on a subnet the request could not cross without a BACnet BBMD path.
Profiles That Require It
Sending I-Have (in response to Who-Has) comes from DM-DOB-B, the dynamic-object-binding BIBB, and is required of most device profiles that expose objects: B-BC, B-AAC, B-ASC, and B-SA. Receiving and processing I-Have is a client behavior that operator and client tools perform when resolving objects by name.
What Chipkin Provides
The CAS BACnet Stack sends I-Have in response to Who-Has as a server, and the test tooling processes incoming I-Have advertisements. Talk to us about adding BACnet client or server support to your device.