Skip to main content

Crate mabi_bacnet

Crate mabi_bacnet 

Source
Expand description

§mabi-bacnet

BACnet/IP simulator for the OTSIM protocol simulator.

This crate provides:

  • BACnet/IP server implementation with UDP networking
  • BACnet object model (AI, AO, BI, BO, AV, BV, MSI, MSO, MSV, Device)
  • Property services (ReadProperty, WriteProperty, ReadPropertyMultiple, WritePropertyMultiple)
  • COV subscriptions and notifications
  • Device discovery (Who-Is/I-Am)
  • BBMD (BACnet Broadcast Management Device) for cross-subnet communication
  • APDU segmentation for large message handling

§Architecture

The crate follows a layered architecture:

┌─────────────────────────────────────────────────────────────┐
│                     BACnet Server                           │
│       (Server, Device Management, Event Handling)          │
└─────────────────────────────────────────────────────────────┘
                             │
          ┌──────────────────┼──────────────────┐
          ▼                  ▼                  ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│  Service Layer  │ │  Object Model   │ │      BBMD       │
│ (Handler Reg.)  │ │ (Registry)      │ │ (Cross-subnet)  │
└─────────────────┘ └─────────────────┘ └─────────────────┘
          │                  │
          ▼                  ▼
┌─────────────────┐ ┌─────────────────┐
│   APDU Layer    │ │ Property Store  │
│ (Segmentation)  │ │ (DashMap-based) │
└─────────────────┘ └─────────────────┘
          │
          ▼
┌─────────────────────────────────────────────────────────────┐
│                    Network Layer                            │
│             (UDP, BVLC, NPDU handling)                     │
└─────────────────────────────────────────────────────────────┘

§Quick Start

use mabi_bacnet::prelude::*;

// Create object registry
let mut registry = ObjectRegistry::new();

// Add analog input object
let ai = AnalogInput::new(1, "Zone Temperature");
ai.set_value(72.5);
registry.register(Arc::new(ai));

// Create and run server
let config = ServerConfig::new(1234);
let server = BACnetServer::new(config, registry);

server.run().await?;

Re-exports§

pub use config::BacnetServerConfig;
pub use device::BacnetDevice;
pub use error::BacnetError;
pub use error::BacnetResult;

Modules§

apdu
APDU (Application Protocol Data Unit) encoding and decoding.
config
BACnet configuration types.
device
BACnet device implementation integrating with the core Device trait.
error
BACnet error types.
network
BACnet/IP network layer implementation.
object
BACnet object model implementation.
prelude
server
BACnet/IP server implementation.
service
BACnet service implementations.