A cross-platform BACnet browser and testing tool built with Tauri, Rust, and Svelte.
- BACnet/IP — UDP-based communication on standard BACnet ports (47808-47823)
- MS/TP — Full Master-Slave/Token-Passing over RS-485 serial (9600-115200 baud)
- BBMD — BACnet Broadcast Management Device (foreign device registration, forwarding)
- BBMD UI — Right-panel tab for BBMD control: enable/disable, foreign device registration with IP/TTL, FDT viewer with entry management
- BACnet Router — Multi-interface routing with DNET/DADR/SLR support
- Router UI — Right-panel tab for route management: view routing table, interfaces, add/remove routes
- Packet Inspector — Live hex dump of all BACnet traffic with TX/RX coloring, pause/resume, download
- Network Stats — Real-time metrics: packets sent/received, bytes, errors, avg response time
- Who-Is/I-Am — Discover all BACnet devices on the network
- Who-Is Range — Scan specific device instance ranges (e.g., 1000-2000)
- Who-Has/I-Have — Find objects by name or object identifier across the network
- Device Health — Online/offline tracking with consecutive failure detection
- Device Info — Rich device details: vendor, model, firmware, protocol version, APDU config
- 40+ Object Types — All standard BACnet types (AI, AO, AV, BI, BO, BV, MSI, MSO, MSV, Schedule, Calendar, TrendLog, LifeSafety, etc.)
- Object List — Grouped by type, sortable, searchable
- 104 Property IDs — All standard properties with human-readable names
- Dynamic Property Discovery — Reads PropertyList for automatic property enumeration
- Write Protection — Per-device/object/property rules with confirmation dialogs
- Schedule/Calendar Viewer — Specialized view for Schedule/Calendar objects showing PresentValue, DescriptionOfSchedule, and DateList
- ReadProperty — Read any individual property
- ReadPropertyMultiple — Batch-read multiple properties in one request
- WriteProperty — Write with priority array support (1-16)
- WritePropertyMultiple — Atomic write to multiple objects
- Property Value Parsing — Real, Integer, Unsigned, Boolean, String, Enumerated, BitString, ObjectIdentifier
- AtomicReadFile — Read file objects (binary data as hex); key for firmware/trendlog download
- AtomicWriteFile — Write binary data to file objects
- UnconfirmedPrivateTransfer — Vendor-specific broadcast messaging (vendor ID + service number + optional data)
- SubscribeCOV — Subscribe to object-level change notifications
- SubscribeCOVProperty — Subscribe to specific property changes with COV increment
- COV Notification Routing — Decodes and routes unconfirmed COV notifications to subscribers
- Real-time Trending — Poll-based data collection with configurable interval (1-60s)
- Chart.js Integration — Interactive time-series charts with zoom, pan, tooltips
- Multi-Property Overlay — Trend multiple properties simultaneously with color coding
- Visibility Toggle — Show/hide individual trend lines
- CSV Export — Export trend data to CSV files
- Parquet Export — Export trend data to Apache Parquet format
- Event Notification Parsing — Decodes unconfirmed event notifications (initiating device, event object, timestamp, priority, notify type)
- ConfirmedEventNotification — Request event notification data from devices
- AcknowledgeAlarm — Acknowledge alarms with state tracking
- DeviceCommunicationControl — Enable/disable device communication (with password)
- ReinitializeDevice — Coldstart/warmstart/backup/restore operations
- TimeSynchronization — Send local time to individual devices
- UTCTimeSynchronization — Global broadcast of UTC time
- Side-by-Side Object Comparison — Compare properties across 2+ objects from any devices
- Diff Highlighting — Automatically highlights differing values with color-coded cells
- Show Differences Only — Filter to rows with differences
- Export Device Config — Dump all objects and properties to TOML
- Import Device Config — Load and apply TOML configuration
- Resizable Layout — Three-pane layout (device tree, object/properties, trending) with persistence
- Keyboard Shortcuts — Ctrl+D (discover), Ctrl+R (refresh), Ctrl+, (preferences), Ctrl+P (packet inspector)
- Preferences — Auto-refresh, confirm property write, status bar toggle, trending interval
- Cross-Platform — Windows, macOS, Linux (Tauri v2)
- Serial Port Support — Automatic serial port enumeration with USB/PCI/Bluetooth detection
- Network Interface Selection — Choose specific NIC or use all interfaces
- Error Handling — User-friendly error messages with actionable hints (permission denied, port in use, etc.)
- Node.js 18+ and npm
- Rust 1.70+
- System dependencies for Tauri (see Tauri prerequisites)
- Clone the repository:
git clone https://github.com/LeandroMarceddu/baccy.git
cd baccy- Install dependencies:
npm install- Run in development mode:
npm run tauri devBuild for your current platform:
npm run tauri buildThe compiled application will be in src-tauri/target/release/bundle/.
baccy/
├── src/ # Svelte frontend
├── src-tauri/ # Tauri backend
├── crates/ # Rust crates
│ ├── baccy-core/ # Core types
│ ├── baccy-transport/ # Network transport
│ ├── baccy-protocol/ # BACnet protocol
│ └── baccy-app/ # Application logic
└── public/ # Static assets
Yes.
MIT License - see LICENSE file for details.
Contributions are welcome. Please open an issue or pull request on GitHub.