Nuclear Pumpkin Mocha


    0.0.1-beta.22 • Public • Published

    Node BACstack

    A BACnet protocol stack written in pure JavaScript. BACnet is a protocol to interact with building automation devices defined by ASHRAE.


    Add Node BACstack to your project by using:

    npm install --save bacstack

    The API documentation is available under


    The BACNET standard defines a wide variety of services as part of it's specification. While Node BACstack tries to be as complete as possible, following services are already supported at this point in time:

    Service Execute Handle
    Who Is yes yes
    I Am yes¹ yes
    Who Has yes¹ yes¹
    I Have yes¹ yes¹
    Time Sync yes yes
    UTC Time Sync yes yes
    Read Property yes yes¹
    Read Property Multiple yes yes¹
    Read Range yes¹ yes¹
    Write Property yes yes¹
    Write Property Multiple yes yes¹
    Add List Element yes¹ yes¹
    Remove List Element yes¹ yes¹
    Create Object yes¹ yes¹
    Delete Object yes¹ yes¹
    Subscribe COV yes¹ yes¹
    Confirmed COV Notification yes¹ yes¹
    Subscribe Property yes¹ yes¹
    Atomic Read File yes¹ yes¹
    Atomic Write File yes¹ yes¹
    Reinitialize Device yes yes¹
    Device Communication Control yes yes¹
    Get Alarm Summary yes¹ yes¹
    Get Event Information yes¹ yes¹
    Get Enrollment Summary yes¹ yes¹
    Acknowledge Alarm yes¹ yes¹
    Confirmed Event Notification yes¹ yes¹
    Unconfirmed Event Notification yes¹ yes¹
    Unconfirmed Private Transfer yes¹ yes¹
    Confirmed Private Transfer yes¹ yes¹
    Register Foreign Device no yes¹
    Distribute Broadcast to Network no yes¹

    ¹ Support implemented as Beta (untested, undocumented, breaking interface)


    const bacnet = require('bacstack');
    // Initialize BACStack
    const client = new bacnet({apduTimeout: 6000});
    // Discover Devices
    client.on('iAm', (device) => {
      console.log('address: ', device.address);
      console.log('deviceId: ', device.deviceId);
      console.log('maxApdu: ', device.maxApdu);
      console.log('segmentation: ', device.segmentation);
      console.log('vendorId: ', device.vendorId);
    // Read Device Object
    const requestArray = [{
      objectId: {type: 8, instance: 4194303},
      properties: [{id: 8}]
    client.readPropertyMultiple('', requestArray, (err, value) => {
      console.log('value: ', value);


    Implementing and maintaining a protocol stack is a lot of work, therefore any help is appreciated, from creating issues, to contributing documentation, fixing issues and adding new features.

    Please follow the Contribution Guide when submitting any changes.


    The MIT License

    Copyright (c) 2017-2019 Fabio Huser

    Note: This is not an official product of the BACnet Advocacy Group. BACnet® is a registered trademark of American Society of Heating, Refrigerating and Air-Conditioning Engineers (ASHRAE).


    npm i @biancoroyal/bacstack

    DownloadsWeekly Downloads






    Unpacked Size

    310 kB

    Total Files


    Last publish


    • biancode