Skip to content

Capability tables

Evaluate and get help / Capability tables

These tables list what the code implements: the object types it can construct, the services each surface executes, initiates or sends, and the data links each artifact is built with. They are generated from the code, not written by hand. A row records a capability, not tested behaviour and not interoperability with other vendors’ devices: read what a result proves before relying on one, and generate a PICS to describe a configured device. The sample PICS shows that output for one reference configuration, a database holding one object of each type below.

Each row is a type that bacnet-objects can construct, one object of each from its catalogue (bacnet_objects::catalogue::representatives), and whether the full server’s CreateObject and DeleteObject reach it, as its PICS generator reports. The count is of constructible types. It is not a count of tested behaviour: a row says the type exists and a server can hold it, not that every property behaves as a test suite expects. The caption names the standard types the crate doesn’t build.

64 constructible object types; not built: Network Security (38)
Object typeType numberCreateObjectDeleteObject
Analog Input0YesYes
Analog Output1YesYes
Analog Value2NoYes
Binary Input3YesYes
Binary Output4YesYes
Binary Value5YesYes
Calendar6NoYes
Command7NoYes
Device8NoNo
Event Enrollment9NoYes
File10NoYes
Group11NoYes
Loop12NoYes
Multi State Input13YesYes
Multi State Output14YesYes
Notification Class15NoYes
Program16NoYes
Schedule17NoYes
Averaging18NoYes
Multi State Value19YesYes
Trend Log20NoYes
Life Safety Point21NoYes
Life Safety Zone22NoYes
Accumulator23NoYes
Pulse Converter24NoYes
Event Log25NoYes
Global Group26NoYes
Trend Log Multiple27NoYes
Load Control28NoYes
Structured View29NoYes
Access Door30NoYes
Timer31NoYes
Access Credential32NoYes
Access Point33NoYes
Access Rights34NoYes
Access User35NoYes
Access Zone36NoYes
Credential Data Input37NoYes
Bitstring Value39NoYes
Characterstring Value40NoYes
Datepattern Value41NoYes
Date Value42NoYes
Datetimepattern Value43NoYes
Datetime Value44NoYes
Integer Value45NoYes
Large Analog Value46NoYes
Octetstring Value47NoYes
Positive Integer Value48NoYes
Timepattern Value49NoYes
Time Value50NoYes
Notification Forwarder51NoYes
Alert Enrollment52NoYes
Channel53NoYes
Lighting Output54NoYes
Binary Lighting Output55NoYes
Network Port56NoNo
Elevator Group57NoYes
Escalator58NoYes
Lift59NoYes
Staging60NoYes
Audit Log61NoYes
Audit Reporter62NoYes
Color63NoYes
Color Temperature64NoYes

Each surface is a different part of the stack, and a service in one column says nothing about another:

  • Full server executes: what bacnet-server runs when a request arrives (bacnet_objects::device::EXECUTED_SERVICES, which a test ties to its dispatch). Its Device object advertises the same list.
  • Full server initiates: the requests the server can build and send itself, its PICS initiator column (PicsGenerator::INITIATED_SERVICES, which a test ties to the server’s outbound requests). Some go out only when configured: COV and event notifications need a subscription or a recipient, audit notifications need audit reporting, and WriteProperty, ReadProperty and Who-Is need a Command action or a Channel member in another device.
  • Client sends: the services a bacnet-client method sends (bacnet_client::client::SENT_SERVICES, which a test ties to the methods). confirmed_request and unconfirmed_request send any other service from octets the application encodes. An application that runs a client beside a server initiates both columns.
  • Endpoint responder executes: the bounded responder a shared endpoint runs instead of the full server (bacnet_endpoint::RESPONDER_SERVICES). An opt-in row names the EndpointSession method that turns it on. The column lists only what the responder executes; the endpoint also sends some services itself, such as I-Am and audit notifications.
  • Python client sends: the methods of the Python BACnetClient, matched to services by name in the type stub. Some of them, such as the VT, text message and private transfer methods, send through the Rust client’s generic confirmed_request and unconfirmed_request, so Python shows Yes where the Rust client shows No. The Python BACnetServer wraps the full server.
31 confirmed services, by surface
ServiceFull server executesFull server initiatesClient sendsEndpoint responder executesPython client sends
AcknowledgeAlarmYesNoYesNoYes
AddListElementYesNoYesNoYes
AtomicReadFileYesNoYesNoYes
AtomicWriteFileYesNoYesNoYes
AuditLogQueryYesNoYesNoYes
ConfirmedAuditNotificationYesYesYesNoYes
ConfirmedCOVNotificationNoYesNoNoNo
ConfirmedCOVNotificationMultipleNoYesNoNoNo
ConfirmedEventNotificationYesYesNoNoNo
ConfirmedPrivateTransferNoNoNoNoYes
ConfirmedTextMessageYesNoNoNoYes
CreateObjectYesNoYesNoYes
DeleteObjectYesNoYesNoYes
DeviceCommunicationControlYesNoYesNoYes
GetAlarmSummaryYesNoYesNoYes
GetEnrollmentSummaryYesNoYesNoYes
GetEventInformationYesNoYesNoYes
LifeSafetyOperationYesNoNoNoYes
ReadPropertyYesYesYesAlwaysYes
ReadPropertyMultipleYesNoYesNoYes
ReadRangeYesNoYesNoYes
ReinitializeDeviceYesNoYesOpt-in: with_reinitialize()Yes
RemoveListElementYesNoYesNoYes
SubscribeCOVYesNoYesNoYes
SubscribeCOVPropertyYesNoYesNoNo
SubscribeCOVPropertyMultipleYesNoNoNoYes
VT-CloseNoNoNoNoYes
VT-DataNoNoNoNoYes
VT-OpenNoNoNoNoYes
WritePropertyYesYesYesOpt-in: with_device_writes()Yes
WritePropertyMultipleYesNoYesNoYes
14 unconfirmed services, by surface
ServiceFull server executesFull server initiatesClient sendsEndpoint responder executesPython client sends
I-AmNoYesNoNoNo
I-HaveNoYesNoNoNo
TimeSynchronizationYesNoYesNoYes
UTCTimeSynchronizationYesNoYesNoYes
UnconfirmedAuditNotificationYesYesYesNoYes
UnconfirmedCOVNotificationNoYesNoNoNo
UnconfirmedCOVNotificationMultipleNoYesNoNoNo
UnconfirmedEventNotificationYesYesNoNoNo
UnconfirmedPrivateTransferNoNoNoNoYes
UnconfirmedTextMessageYesNoNoNoYes
Who-Am-INoNoNoNoYes
WhoHasYesNoYesNoYes
WhoIsYesYesYesNoYes
WriteGroupYesNoYesNoYes

A Rust application picks the bacnet-transport features it builds. The Python wheel and the CLI executables are built with fixed features, which the generator resolves from their manifests and from the release build’s list of CLI features for each target. Transport boundaries gives each link’s platform limits and evidence.

A missing object type, service or data-link behaviour is tracked as an issue with the conformance-gap label, where its evidence and discussion live. This page keeps no list of its own: see the open gaps.

A generator in the integration tests builds the page’s data file, and the sample PICS, from the object catalogue and the PICS generator, the service lists named above, the Python type stub, and the Cargo manifests and release scripts. A workspace test regenerates both and fails when a committed copy differs, so a change that adds a service, an object type or a data link has to regenerate them: run cargo run -p bacnet-integration-tests --example support-tables.

Release v0.15.0 ·Build and integrate. Pre-1.0 APIs; partial conformance.Support & limitations