bacnet-cli 0.14.0

BACnet command-line tool for device discovery, reading, and writing
bacnet-cli-0.14.0 is not a library.

bacnet-cli

bacnet is the command-line tool of Rusty BACnet, a BACnet protocol stack in Rust. It discovers devices, reads and writes properties, subscribes to COV, handles alarms, files and routing, and decodes captured traffic, as one-shot commands with JSON output, or in a full-screen terminal UI (plain bacnet on a terminal, or bacnet tui).

Install

cargo install bacnet-cli --locked --features sc-tls

The binary is called bacnet. Features:

  • tui (default): the full-screen terminal UI. --no-default-features builds the one-shot commands without it.
  • sc-tls: the BACnet/SC transport (WebSocket over TLS) and offline credential inspection (bacnet sc-check).
  • pcap: bacnet capture, live or from a pcap file. It needs libpcap and its headers (libpcap-dev on Debian and Ubuntu).
  • serial: MS/TP over a serial port (--mstp, mstp-ports, tui --mstp-monitor). The Linux release binaries include it.

Prebuilt binaries are attached to each release.

Example

bacnet discover
bacnet read 192.168.1.100 ai:1 pv
bacnet --json readm 192.168.1.100 ai:1 pv,object-name
bacnet        # on a terminal: the TUI; create/select a B/IP, SC or MS/TP profile
bacnet tui --profile plant-a
bacnet tui --no-profile -i 127.0.0.1 -p 0 -b 127.0.0.255

Named B/IP, BACnet/SC and MS/TP profiles preview resolved settings, check the files they name before anything is sent, and record an explicit first-use authorization. SC profiles store certificate and key paths only, and keep the device UUID they generate. Press p for profiles, x to disconnect and c to reconnect. BACNET_CONFIG_DIR isolates both profiles and workspaces. --no-profile or explicit network flags without --profile retain the nonpersistent connection flow; B/IPv6 uses only that flow. The TUI is read-only until W arms a time-boxed write session on a profile; every write is previewed, kept in a revertible ledger and recorded in an audit log. --passive transmits nothing.

One-shot commands refuse anything that changes a device unless given --allow-write; communication control and reinitialize also need --yes when stdin is not a terminal, or, at one, the device instance typed (the target as given, for an address target). A refused command exits with status 4.

The CLI reference lists every command and option.

With sc-tls, bacnet sc-check --sc-cert node.pem (new in 0.14.0) takes optional --sc-ca and --sc-key files. It reports local certificate observations without a network connection; exit 0 can include warnings and does not predict TLS acceptance. See the SC check guide for human/JSON output and exit statuses.

License

MIT