{"id":29637491,"url":"https://github.com/bastiaanv/bacnet-driver","last_synced_at":"2025-08-22T01:18:23.226Z","repository":{"id":42246933,"uuid":"289477524","full_name":"bastiaanv/bacnet-driver","owner":"bastiaanv","description":"A BACnet protocol stack written in pure typescript with RXJS and Promises. BACnet is a protocol to interact with building automation devices defined by ASHRAE.","archived":false,"fork":false,"pushed_at":"2023-04-21T09:09:37.000Z","size":94,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-01-27T07:40:43.937Z","etag":null,"topics":["bacnet","bacnet-ip"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bastiaanv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-08-22T11:45:44.000Z","updated_at":"2022-05-26T11:03:52.000Z","dependencies_parsed_at":"2023-12-16T00:06:52.856Z","dependency_job_id":"69b23f36-0890-4b78-8842-c0dcf967356d","html_url":"https://github.com/bastiaanv/bacnet-driver","commit_stats":{"total_commits":45,"total_committers":3,"mean_commits":15.0,"dds":0.2222222222222222,"last_synced_commit":"8f1867260a4a137229403f2d56be5f1e1ecab09b"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bastiaanv/bacnet-driver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastiaanv%2Fbacnet-driver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastiaanv%2Fbacnet-driver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastiaanv%2Fbacnet-driver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastiaanv%2Fbacnet-driver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bastiaanv","download_url":"https://codeload.github.com/bastiaanv/bacnet-driver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastiaanv%2Fbacnet-driver/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266353491,"owners_count":23915995,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-21T11:47:31.412Z","response_time":64,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bacnet","bacnet-ip"],"created_at":"2025-07-21T18:38:06.664Z","updated_at":"2025-07-21T18:38:07.927Z","avatar_url":"https://github.com/bastiaanv.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bacnet-driver\n\nA BACnet protocol stack written in pure typescript with RXJS and promises. BACnet is a protocol to interact with building automation devices defined by ASHRAE. Big shout out to FH1CH for making the [node-bacstack library](https://github.com/fh1ch/node-bacstack). A lot of priniciples there, are used here.\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/bastiaanv/bacnet-driver/actions?query=workflow%3A%22Build+npm+package%22\"\u003e\u003cimg src=\"https://github.com/bastiaanv/bacnet-driver/workflows/Build%20npm%20package/badge.svg\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Table of Contents\n\n- [Usage](#Usage)\n- [Features](#Features)\n- [API Basic](#API--Basic)\n  - [Who Is](#Who-Is)\n  - [Read property](#Read-Property)\n  - [Write property](#Write-Property)\n  - [Subscribe COV](#Subscribe-COV)\n- [API Extended](#API---Extended)\n  - [Read Object List](#Read-Object-List)\n  - [Read Present Value](#Read-Present-Value)\n  - [Activate Notification Class](#Activate-Notification-Class)\n  - [Set Alarming](#Set-Alarming)\n- [Events](#Events)\n  - [I Am Subject](#I-Am-Subject)\n  - [Cov Subject](#Cov-Subject)\n  - [Alarm Subject](#Alarm-Subject)\n  - [Error Subject](#Error-Subject)\n- [License](#License)\n\n## Usage\n\nAdd Bacnet-driver to your project by:\n\n1. Login to the Github Packages registry:\n\n```bash\nnpm login --registry=https://npm.pkg.github.com\n```\n\n2. Adding the .npmrc file:\n\n```\nregistry=https://npm.pkg.github.com/bastiaanv\n```\n\n3. Running the following npm command:\n\n```bash\nnpm i @bastiaanv/bacnet-driver\n```\n\n## Features\n\n**NOTE** this library is still in pre-alpa and is not recommended in poduction usages. For those case, please use the [node-bacstack library](https://github.com/fh1ch/node-bacstack).\n\n| Service       | Receive | execute |\n| ------------- | ------- | ------- |\n| whoIs         | No      | Yes     |\n| iAm           | Yes     | No      |\n| readProperty  | No      | Partly  |\n| writeProperty | No      | Partly  |\n| readMultiple  | No      | No      |\n| writeMultiple | No      | No      |\n| Subscribe COV | No      | Yes     |\n\nreadProperty: This service can only read unsigned integers, floats, booleans, strings and ObjectIndentifiers\n\nwriteProperty: Unsupported types: TIMESTAMP, OCTET_STRING, OBJECTIDENTIFIER, COV_SUBSCRIPTION, READ_ACCESS_RESULT, READ_ACCESS_SPECIFICATION\n\n## API - Basic\n\n### Who Is\n\nThe whoIs command discovers all BACNET devices in a network. BACNET devices who has received this command will sent a [IAm command](#I-Am-Subject).\n\n#### Example\n\n```js\nimport { BacnetDriver } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDriver({});\nbacnetDriver.whoIs();\n```\n\n#### Parameters\n\n| Name    | Type    | Description                                                                              |\n| ------- | ------- | ---------------------------------------------------------------------------------------- |\n| address | string? | An optional parameter to which send the WhoIs command directly, instead of broadcasting. |\n\n#### Returns\n\n| Name       | Type | Description                               |\n| ---------- | ---- | ----------------------------------------- |\n| `response` | void | Can trigger [IAm commands](#I-Am-Subject) |\n\n### Read Property\n\nThe readProperty command reads a single property of an object from a device.\nNote, the device should have been found first via the [WhoIs command](#Who-Is) before the read property command can be used.\n\n#### Example\n\n```js\nimport { BacnetDriver, ObjectType, PropertyIdentifier } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDiver({});\nbacnetDriver\n  .readProperty({\n    address: '192.168.1.2',\n    deviceId: 2000,\n    objectType: ObjectType.ANALOG_INPUT,\n    objectInstance: 1,\n    propertyId: PropertyIdentifier.PRESENT_VALUE,\n  })\n  .then(console.log);\n```\n\n#### Parameters - `ReadPropertyOptions`\n\n| Name                     | Type   | Description                                                                                                        |\n| ------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------ |\n| `options`                | object |                                                                                                                    |\n| `options.address`        | string | IP address of the target device.                                                                                   |\n| `options.deviceId`       | number | The device ID of the target device.                                                                                |\n| `options.objectType`     | number | The object ID to read. The `ObjectType` could be used from the bacnetDriver enum.                                  |\n| `options.objectInstance` | number | The object instance to read.                                                                                       |\n| `options.propertyId`     | number | The property ID in the specified object to read.The `PropertyIdentifier` could be used from the bacnetDriver enum. |\n\n#### Returns\n\nThe returned value depens on the propertyID you have read. This is why the this method returns the `Promise\u003cany\u003e`. But when you you the [BacnetDriverExtended](#API---Extended) you can use the predefined methods and will get the correct return type.\n| Name | Type | Description |\n|------------|-------------------------------------------------------------------------------------------|-------------|\n| `response` | Promise\\\u003cany\\\u003e \\| Promise\\\u003cReadString\\\u003e \\| Promise\\\u003cReadNumber\\\u003e \\| Promise\\\u003cReadObject\\\u003e | |\n\n### Write Property\n\nThe writeProperty command writes a single property of an object to a device.\nPlease note, that the following `ApplicationTags` are not supported (yet): TIMESTAMP, OBJECTIDENTIFIER, COV_SUBSCRIPTION, READ_ACCESS_RESULT, READ_ACCESS_SPECIFICATION.\nAlso, the device should have been found first via the [WhoIs command](#Who-Is) before the write property command can be used.\n\n#### Example\n\n```js\nimport { BacnetDriver, ObjectType, PropertyIdentifier, ApplicationTags } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDiver({});\nbacnetDriver\n  .writeProperty({\n    address: '192.168.1.2',\n    deviceId: 2000,\n    objectType: ObjectType.ANALOG_INPUT,\n    objectInstance: 1,\n    propertyId: PropertyIdentifier.OUT_OF_SERVICE,\n    values: [{ type: ApplicationTags.BOOLEAN, value: true }],\n  })\n  .then(console.log);\n```\n\n#### Parameters - `WritePropertyOptions`\n\n| Name                     | Type   | Description                                                                                                        |\n| ------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------ |\n| `options`                | object |                                                                                                                    |\n| `options.address`        | string | IP address of the target device.                                                                                   |\n| `options.deviceId`       | number | The device ID of the target device.                                                                                |\n| `options.objectType`     | number | The object ID to read. The `ObjectType` could be used from the bacnetDriver enum.                                  |\n| `options.objectInstance` | number | The object instance to read.                                                                                       |\n| `options.propertyId`     | number | The property ID in the specified object to read.The `PropertyIdentifier` could be used from the bacnetDriver enum. |\n| `options.values`         | array  |                                                                                                                    |\n| `options.values.type`    | number | The data-type of the value to be written. The `ApplicationTags` could be used from the bacnetDriver enum.          |\n| `options.values.value`   | any    | The actual value to be written.                                                                                    |\n\n#### Returns\n\n| Name       | Type            | Description |\n| ---------- | --------------- | ----------- |\n| `response` | Promise\\\u003cvoid\\\u003e |             |\n\n### Subscribe COV\n\nThe Subscribe COV command subscribes your application to a specific object in the BACNET device.\nIf a value in the object changes, a [covObservable](#Cov-Subject) will be fired.\nNote, the device should have been found first via the [WhoIs command](#Who-Is) before the subscribe COV command can be used.\n\n#### Example\n\n```js\nimport { BacnetDriver, ObjectType } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDiver({});\nbacnetDriver\n  .subscribeCov({\n    address: '192.168.1.2',\n    deviceId: 2000,\n    monitoredObject: { type: ObjectType.ANALOG_INPUT, instance: 8 },\n    cancellable: { issueConfirmedNotifications: false, lifetime: 120 },\n  })\n  .then(console.log);\n```\n\n#### Parameters - `COVOptions`\n\n| Name                                              | Type    | Description                                                                       |\n| ------------------------------------------------- | ------- | --------------------------------------------------------------------------------- |\n| `options`                                         | object  |                                                                                   |\n| `options.address`                                 | string  | IP address of the target device.                                                  |\n| `options.deviceId`                                | number  | The device ID of the target device.                                               |\n| `options.monitoredObject`                         | object  |                                                                                   |\n| `options.monitoredObject.type`                    | number  | The object ID to read. The `ObjectType` could be used from the bacnetDriver enum. |\n| `options.monitoredObject.instance`                | number  | The object instance to read.                                                      |\n| `options.processId`                               | number? | The process ID to use. When not given, the bacnet driver will generate one.       |\n| `options.cancellable`                             | object? | Optional                                                                          |\n| `options.cancellable.issueConfirmedNotifications` | boolean | Determines is the subscription should use confirmed or unconfirmed notifications  |\n| `options.cancellable.lifetime`                    | number  | The lifetime of the subscription                                                  |\n\n#### Returns\n\n| Name       | Type            | Description |\n| ---------- | --------------- | ----------- |\n| `response` | Promise\\\u003cvoid\\\u003e |             |\n\n## API - Extended\n\nThe BacnetDriverExtended has predefined BACNET methods for you to use, like: `readObjectList` or `readPresentValue`. Each of these methods make use of the `readProperty` or `writeProperty` method.\n\n### Read Object List\n\nThe readObjectList command reads the object list of a BACNET device.\n\n#### Example\n\n```js\nimport { BacnetDriverExtended, ObjectType, PropertyIdentifier } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDriverExtended({});\nbacnetDriver\n  .readObjectList({\n    address: '192.168.1.2',\n    deviceId: 2000,\n  })\n  .then(console.log);\n```\n\n#### Parameters\n\n| Name               | Type   | Description                         |\n| ------------------ | ------ | ----------------------------------- |\n| `options`          | object |                                     |\n| `options.address`  | string | IP address of the target device.    |\n| `options.deviceId` | number | The device ID of the target device. |\n\n#### Returns\n\n| Name       | Type                  | Description |\n| ---------- | --------------------- | ----------- |\n| `response` | Promise\u003cReadObject[]\u003e |             |\n\n### Read Present Value\n\nThe readPresentValue command reads the object list of a BACNET device.\n\n#### Example\n\n```js\nimport { BacnetDriverExtended, ObjectType } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDriverExtended({});\nbacnetDriver\n  .readPresentValue({\n    address: '192.168.1.2',\n    deviceId: 2000,\n    objectType: ObjectType.ANALOG_INPUT,\n    objectInstance: 100,\n  })\n  .then(console.log);\n```\n\n#### Parameters\n\n| Name                     | Type   | Description                                                                       |\n| ------------------------ | ------ | --------------------------------------------------------------------------------- |\n| `options`                | object |                                                                                   |\n| `options.address`        | string | IP address of the target device.                                                  |\n| `options.deviceId`       | number | The device ID of the target device.                                               |\n| `options.objectType`     | number | The object ID to read. The `ObjectType` could be used from the bacnetDriver enum. |\n| `options.objectInstance` | number | The object instance to read.                                                      |\n\n#### Returns\n\n| Name       | Type                | Description |\n| ---------- | ------------------- | ----------- |\n| `response` | Promise\u003cReadNumber\u003e |             |\n\n### Activate Notification Class\n\nThe activateNotificationClass command subscribes your application to limit alarms. This functions should be combined [setAlarming](#Set-Alarming) with the corresponding BACnet objects.\n\n#### Example\n\n```js\nimport { BacnetDriverExtended, ObjectType } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDriverExtended({});\nbacnet\n  .activateNotificationClasses({\n    address: '192.168.0.1',\n    deviceId: 1,\n    objectInstances: [100, 101, 102],\n    ipAddress: '192.168.0.254',\n  })\n  .then(() =\u003e {\n    /* REST OF CODE */\n  });\n```\n\n#### Parameters - ActivateNotificationClass\n\n| Name                             | Type     | Description                                                                                                  |\n| -------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------ |\n| `options`                        | object   |                                                                                                              |\n| `options.address`                | string   | IP address of the target device.                                                                             |\n| `options.deviceId`               | number   | The device ID of the target device.                                                                          |\n| `options.objectInstances`        | number[] | The notification classes that should be activated.                                                           |\n| `options.ipAddress`              | string   | The IP address of this devices's BACnet interface                                                            |\n| `options.port`                   | number?  | The port of this device's BACnet interface. Default: 0xBAC0                                                  |\n| `options.fromTime`               | Date?    | The start date from which to recieve alarm notifications. Default: 00:00:00.000                              |\n| `options.toTime`                 | Date?    | The end date from which to recieve alarm notifications. Default: 23:59:59.000                                |\n| `options.transition`             | object?  |                                                                                                              |\n| `options.transition.toNormal`    | boolean  | Determines whether to recieve an alarm notification when the state changes to Normal state. Default: true    |\n| `options.transition.toOffNormal` | boolean  | Determines whether to recieve an alarm notification when the state changes to OffNormal state. Default: true |\n| `options.transition.toFault`     | boolean  | Determines whether to recieve an alarm notification when the state changes to Fault state. Default: true     |\n| `options.days`                   | object?  |                                                                                                              |\n| `options.days.monday`            | boolean  | Determines whether to recieve an alarm notification on Mondays. Default: true                                |\n| `options.days.tuesday`           | boolean  | Determines whether to recieve an alarm notification on Tuesdays. Default: true                               |\n| `options.days.wednesday`         | boolean  | Determines whether to recieve an alarm notification on Wednesdays. Default: true                             |\n| `options.days.thursday`          | boolean  | Determines whether to recieve an alarm notification on Thursdays. Default: true                              |\n| `options.days.friday`            | boolean  | Determines whether to recieve an alarm notification on Fridays. Default: true                                |\n| `options.days.saturday`          | boolean  | Determines whether to recieve an alarm notification on Saturdays. Default: true                              |\n| `options.days.sunday`            | boolean  | Determines whether to recieve an alarm notification on Sundays. Default: true                                |\n\n#### Returns\n\n| Name       | Type          | Description                                                                                        |\n| ---------- | ------------- | -------------------------------------------------------------------------------------------------- |\n| `response` | Promise\u003cvoid\u003e | Combined with [an active limit object](#Set-Alarming) can trigger an [Alarm event](#Alarm-Subject) |\n\n### Set Alarming\n\nThe setAlarming command subscribes your application to limit alarms. This functions should be combined [activateNotificationClass](#Activate-Notification-Class) with the corresponding BACnet notification classes.\n\n#### Example\n\n```js\nimport { BacnetDriverExtended, ObjectType } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDriverExtended({});\nbacnet.setAlarming({\n    address: '192.168.0.1',\n    deviceId: 1,\n    objectType: ObjectType.ANALOG_INPUT\n    objectInstance: 1,\n    lowlimit: { enable: true, overwriteLimitValue: 0 },\n    highlimit: { enable: true, overwriteLimitValue: 100 },\n}).then(() =\u003e { /* REST OF CODE */ });\n```\n\n#### Parameters - SetAlarming\n\n| Name                                    | Type    | Description                                                                       |\n| --------------------------------------- | ------- | --------------------------------------------------------------------------------- |\n| `options`                               | object  |                                                                                   |\n| `options.address`                       | string  | IP address of the target device.                                                  |\n| `options.deviceId`                      | number  | The device ID of the target device.                                               |\n| `options.objectType`                    | number  | The object ID to read. The `ObjectType` could be used from the bacnetDriver enum. |\n| `options.objectInstance`                | number  | The object instance to read.                                                      |\n| `options.lowLimit`                      | object  |                                                                                   |\n| `options.lowLimit.enable`               | boolean | Enables or disables low limit alarming                                            |\n| `options.lowLimit.overwriteLimitValue`  | number? | Optional parameter to overwrite the current low limit alarming value.             |\n| `options.highLimit`                     | object  |                                                                                   |\n| `options.highLimit.enable`              | boolean | Enables or disables hihg limit alarming                                           |\n| `options.highLimit.overwriteLimitValue` | number? | Optional parameter to overwrite the current low high alarming value.              |\n\n#### Returns\n\n| Name       | Type          | Description                                                                                                                |\n| ---------- | ------------- | -------------------------------------------------------------------------------------------------------------------------- |\n| `response` | Promise\u003cvoid\u003e | Combined with [an activated notification class](#Activate-Notification-Class) can trigger an [Alarm event](#Alarm-Subject) |\n\n## Events\n\nThis library makes use of [RXJS](https://rxjs-dev.firebaseapp.com/guide/overview) library for event handling.\n\n### I Am Subject\n\nThis subject will fire, when a devices react to the [WhoIs command](#Who-Is) over the network or when a BACNET device has booted.\n\n#### Example\n\n```js\nimport { BacnetDriver } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDriver({});\nbacnetDrive.iAmObservable.subscribe(console.log);\nbacnetDriver.whoIs();\n```\n\n#### Returns - `IAmEvent`\n\n| Name                | Type   | Description                         |\n| ------------------- | ------ | ----------------------------------- |\n| `response`          | object |                                     |\n| `response.address`  | string | IP address of the target device.    |\n| `response.deviceId` | number | The device ID of the target device. |\n\n### Cov Subject\n\nThis subject will fire, when a object in the BACNET device has been changed and the Bacnet driver has a active subscription, see more (Subscribe Cov)[#Subscribe-Cov].\n\n#### Example\n\n```js\nimport { BacnetDriver, ObjectType } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDiver({});\nbacnetDriver.covObservable.subscribe(console.log);\nbacnetDriver\n  .subscribeCov({\n    address: '192.168.1.2',\n    deviceId: 2000,\n    monitoredObject: { type: ObjectType.ANALOG_INPUT, instance: 8 },\n    cancellable: { issueConfirmedNotifications: false, lifetime: 120 },\n  })\n  .then(console.log);\n```\n\n#### Returns - `COVEvent`\n\n| Name                                | Type   | Description                                                                                                  |\n| ----------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------ |\n| `response`                          | object |                                                                                                              |\n| `response.processId`                | number | The process id used for this subscription.                                                                   |\n| `response.device`                   | object |                                                                                                              |\n| `response.device.instance`          | number | The instance of the target device.                                                                           |\n| `response.device.type`              | number | The object ID of the target device. NOTE: this value will always be 8, since it is given by the BACNET specs |\n| `response.monitoredObject`          | object |                                                                                                              |\n| `response.monitoredObject.type`     | number | The object type of the changed object                                                                        |\n| `response.monitoredObject.instance` | number | The object instance of the changed object.                                                                   |\n| `response.timeRemaining`            | number | The remaining time of the subscription in seconds                                                            |\n| `response.cov`                      | array  |                                                                                                              |\n| `response.cov.propertyType`         | number | The property type for the changed value                                                                      |\n| `response.cov.value`                | any    | The new value of the changed property. The type depends on the property.                                     |\n\n### Alarm Subject\n\nThis subject will fire, when a object in the BACNET device has changed its state. From normal -\u003e off normal, for example. In order for this to work, the correct Notification class needs to be activated (see, [activateNotificationClass](#Activate-Notification-Class)) and the BACnet object need to have limit alarm enabled (see [setAlarming](#Set-Alarming)). NOTE: CURRENT THIS IS NOT IMPLEMENTED YET...\n\n#### Example\n\n```js\nimport { BacnetDriverExtended, ObjectType } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDriverExtended({});\nbacnetDriver.alarmingObservable.subscribe(console.log)\nbacnet.setAlarming({\n    address: '192.168.0.1',\n    deviceId: 1,\n    objectType: ObjectType.ANALOG_INPUT\n    objectInstance: 1,\n    lowlimit: { enable: true, overwriteLimitValue: 0 },\n    highlimit: { enable: true, overwriteLimitValue: 100 },\n});\nbacnet.activateNotificationClasses({\n    address: '192.168.0.1',\n    deviceId: 1,\n    objectInstances: [ 100, 101, 102],\n    ipAddress: '192.168.0.254',\n});\n```\n\n#### Returns - `AlarmingEvent`\n\n| Name                         | Type   | Description                                                                                              |\n| ---------------------------- | ------ | -------------------------------------------------------------------------------------------------------- |\n| `response`                   | object |                                                                                                          |\n| `response.processNumber`     | number | The processNumber of the subscription                                                                    |\n| `response.device`            | object | The device from which the notification came from                                                         |\n| `response.device.instance`   | number | The instance number of the device                                                                        |\n| `response.device.type`       | number | The type of the device (which will always be 8)                                                          |\n| `response.object`            | object | The object from which the notification came from                                                         |\n| `response.object.instance`   | number | The instance number of the object                                                                        |\n| `response.object.type`       | number | The type of the object                                                                                   |\n| `response.date`              | Date   | The date on which the notification has been send                                                         |\n| `response.priority`          | number | The priority given to the notification                                                                   |\n| `response.notificationClass` | number | The instance of the notificationClass the notification came from                                         |\n| `response.eventType`         | number | The eventType of the notification. The complete eventType list can be found under the Enum's `EventType` |\n| `response.notificationType`  | number | The notification type of the notification. Complete list can be found under the Enum's `NotifyType`      |\n| `response.fromState`         | number | The state the object was in. Complete list can be found under the Enum's `EventState`                    |\n| `response.toState`           | number | The state the object is in now. Complete list can be found under the Enum's `EventState`                 |\n\n### Error Subject\n\nThis subject will fire, when the UDP transporter has failed to send your message. This can occure when you gave this transporter an invalid IP address.\n\n#### Example\n\n```js\nimport { BacnetDriver } from '@bastiaanv/bacnet-driver';\n\nconst bacnetDriver = new BacnetDriver({});\nbacnetDrive.errorObservable.subscribe(console.log);\n```\n\n#### Returns\n\n| Name       | Type  | Description                |\n| ---------- | ----- | -------------------------- |\n| `response` | Error | The error that has occured |\n\n## License\n\n[The GNU GPL v2.0](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)\n\nCopyright (c) 2020 Bastiaan Verhaar \u003cverhaar.bastiaan@gmail.com\u003e\n\n**Note:** This is not an official product of the BACnet Advocacy Group. BACnet®\nis a registered trademark of American Society of Heating, Refrigerating and\nAir-Conditioning Engineers (ASHRAE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbastiaanv%2Fbacnet-driver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbastiaanv%2Fbacnet-driver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbastiaanv%2Fbacnet-driver/lists"}