node-bacnet
Version:
The BACnet protocol library written in pure JavaScript.
3,134 lines (951 loc) • 104 kB
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>bacnet - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Montserrat:400,700">
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav >
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="bacnet.html">bacnet</a><ul class='methods'><li data-type='method'><a href="bacnet.html#.close">close</a></li><li data-type='method'><a href="bacnet.html#.confirmedCOVNotification">confirmedCOVNotification</a></li><li data-type='method'><a href="bacnet.html#.deviceCommunicationControl">deviceCommunicationControl</a></li><li data-type='method'><a href="bacnet.html#.iAmResponse">iAmResponse</a></li><li data-type='method'><a href="bacnet.html#.readProperty">readProperty</a></li><li data-type='method'><a href="bacnet.html#.readPropertyMultiple">readPropertyMultiple</a></li><li data-type='method'><a href="bacnet.html#.readPropertyResponse">readPropertyResponse</a></li><li data-type='method'><a href="bacnet.html#.reinitializeDevice">reinitializeDevice</a></li><li data-type='method'><a href="bacnet.html#.resultResponse">resultResponse</a></li><li data-type='method'><a href="bacnet.html#.timeSync">timeSync</a></li><li data-type='method'><a href="bacnet.html#.timeSyncUTC">timeSyncUTC</a></li><li data-type='method'><a href="bacnet.html#.unconfirmedCOVNotification">unconfirmedCOVNotification</a></li><li data-type='method'><a href="bacnet.html#.whoIs">whoIs</a></li><li data-type='method'><a href="bacnet.html#.writeProperty">writeProperty</a></li><li data-type='method'><a href="bacnet.html#.writePropertyMultiple">writePropertyMultiple</a></li></ul></li><li><a href="Client.html">Client</a><ul class='methods'><li data-type='method'><a href="Client.html#.createBitstring">createBitstring</a></li><li data-type='method'><a href="Client.html#acknowledgeAlarm">acknowledgeAlarm</a></li><li data-type='method'><a href="Client.html#addListElement">addListElement</a></li><li data-type='method'><a href="Client.html#confirmedEventNotification">confirmedEventNotification</a></li><li data-type='method'><a href="Client.html#confirmedPrivateTransfer">confirmedPrivateTransfer</a></li><li data-type='method'><a href="Client.html#createObject">createObject</a></li><li data-type='method'><a href="Client.html#deleteObject">deleteObject</a></li><li data-type='method'><a href="Client.html#errorResponse">errorResponse</a></li><li data-type='method'><a href="Client.html#getAlarmSummary">getAlarmSummary</a></li><li data-type='method'><a href="Client.html#getEnrollmentSummary">getEnrollmentSummary</a></li><li data-type='method'><a href="Client.html#getEventInformation">getEventInformation</a></li><li data-type='method'><a href="Client.html#iHaveResponse">iHaveResponse</a></li><li data-type='method'><a href="Client.html#readFile">readFile</a></li><li data-type='method'><a href="Client.html#readRange">readRange</a></li><li data-type='method'><a href="Client.html#removeListElement">removeListElement</a></li><li data-type='method'><a href="Client.html#sendBvlc">sendBvlc</a></li><li data-type='method'><a href="Client.html#simpleAckResponse">simpleAckResponse</a></li><li data-type='method'><a href="Client.html#subscribeCov">subscribeCov</a></li><li data-type='method'><a href="Client.html#subscribeProperty">subscribeProperty</a></li><li data-type='method'><a href="Client.html#unconfirmedEventNotification">unconfirmedEventNotification</a></li><li data-type='method'><a href="Client.html#unconfirmedPrivateTransfer">unconfirmedPrivateTransfer</a></li><li data-type='method'><a href="Client.html#writeFile">writeFile</a></li></ul></li></ul><h3>Events</h3><ul><li><a href="bacnet.html#.event:error">error</a></li><li><a href="bacnet.html#.event:iAm">iAm</a></li><li><a href="bacnet.html#.event:timeSync">timeSync</a></li><li><a href="bacnet.html#.event:whoIs">whoIs</a></li></ul><h3>Global</h3><ul><li><a href="global.html#ApplicationTag">ApplicationTag</a></li><li><a href="global.html#EnableDisable">EnableDisable</a></li><li><a href="global.html#MaxApduLengthAccepted">MaxApduLengthAccepted</a></li><li><a href="global.html#MaxSegmentsAccepted">MaxSegmentsAccepted</a></li><li><a href="global.html#ReinitializedState">ReinitializedState</a></li><li><a href="global.html#usc">usc</a></li></ul>
</nav>
<div id="main">
<h1 class="page-title">bacnet</h1>
<section>
<header>
<h2>
bacnet
</h2>
</header>
<article>
<div class="container-overview">
<h4 class="name" id="bacnet"><span class="type-signature"></span>new bacnet<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="client.js.html">client.js</a>, <a href="client.js.html#line64">line 64</a>
</li></ul></dd>
</dl>
<div class="description">
To be able to communicate to BACNET devices, you have to initialize a new bacnet instance.
</div>
<h5>Example</h5>
<pre class="prettyprint"><code>const bacnet = require('node-bacnet');
const client = new bacnet({
port: 47809, // Use BAC1 as communication port
interface: '192.168.251.10', // Listen on a specific interface
broadcastAddress: '192.168.251.255', // Use the subnet broadcast address
apduTimeout: 6000 // Wait twice as long for response
});</code></pre>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>this._settings</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="default">
</td>
<td class="description last">The options object used for parameterizing the bacnet.</td>
</tr>
<tr>
<td class="name"><code>options.port</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="default">
<code>47808</code>
</td>
<td class="description last">BACNET communication port for listening and sending.</td>
</tr>
<tr>
<td class="name"><code>options.interface</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="default">
</td>
<td class="description last">Specific BACNET communication interface if different from primary one.</td>
</tr>
<tr>
<td class="name"><code>options.broadcastAddress</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="default">
<code>255.255.255.255</code>
</td>
<td class="description last">The address used for broadcast messages.</td>
</tr>
<tr>
<td class="name"><code>options.apduTimeout</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="default">
<code>3000</code>
</td>
<td class="description last">The timeout in milliseconds until a transaction should be interpreted as error.</td>
</tr>
</tbody>
</table>
</div>
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id=".close"><span class="type-signature">(static) </span>close<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="client.js.html">client.js</a>, <a href="client.js.html#line1639">line 1639</a>
</li></ul></dd>
</dl>
<div class="description">
Unloads the current bacnet instance and closes the underlying UDP socket.
</div>
<h5>Example</h5>
<pre class="prettyprint"><code>const bacnet = require('node-bacnet');
const client = new bacnet();
client.close();</code></pre>
<h4 class="name" id=".confirmedCOVNotification"><span class="type-signature">(static) </span>confirmedCOVNotification<span class="signature">(receiver, monitoredObject, subscribeId, initiatingDeviceId, lifetime, values, options<span class="signature-attributes">opt</span>, next)</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="client.js.html">client.js</a>, <a href="client.js.html#line839">line 839</a>
</li></ul></dd>
</dl>
<div class="description">
The confirmedCOVNotification command is used to push notifications to other
systems that have registered with us via a subscribeCOV message.
</div>
<h5>Example</h5>
<pre class="prettyprint"><code>const bacnet = require('node-bacnet');
const client = new bacnet();
const settings = {deviceId: 123}; // our BACnet device
// Items saved from subscribeCOV message
const monitoredObject = {type: 1, instance: 1};
const subscriberProcessId = 123;
client.confirmedCOVNotification(
'192.168.1.43',
monitoredObject,
subscriberProcessId,
settings.deviceId,
30, // should be lifetime of subscription really
[
{
property: { id: bacnet.enum.PropertyIdentifier.PRESENT_VALUE },
value: [
{value: 123, type: bacnet.enum.ApplicationTag.REAL},
],
},
],
(err) => {
console.log('error: ', err);
}
);</code></pre>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>receiver</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
</td>
<td class="description last">IP address of the target device.</td>
</tr>
<tr>
<td class="name"><code>monitoredObject</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
</td>
<td class="description last">The object being monitored, from subscribeCOV.
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>type</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last">Object type.</td>
</tr>
<tr>
<td class="name"><code>instance</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last">Object instance.</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="name"><code>subscribeId</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
</td>
<td class="description last">Subscriber ID from subscribeCOV,</td>
</tr>
<tr>
<td class="name"><code>initiatingDeviceId</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
</td>
<td class="description last">Our BACnet device ID.</td>
</tr>
<tr>
<td class="name"><code>lifetime</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
</td>
<td class="description last">Number of seconds left until the subscription expires.</td>
</tr>
<tr>
<td class="name"><code>values</code></td>
<td class="type">
<span class="param-type">array</span>
</td>
<td class="attributes">
</td>
<td class="description last">values for the monitored object. See example.</td>
</tr>
<tr>
<td class="name"><code>options</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>maxSegments</code></td>
<td class="type">
<span class="param-type"><a href="global.html#MaxSegmentsAccepted">MaxSegmentsAccepted</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The maximimal allowed number of segments.</td>
</tr>
<tr>
<td class="name"><code>maxApdu</code></td>
<td class="type">
<span class="param-type"><a href="global.html#MaxApduLengthAccepted">MaxApduLengthAccepted</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The maximal allowed APDU size.</td>
</tr>
<tr>
<td class="name"><code>invokeId</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The invoke ID of the confirmed service telegram.</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="name"><code>next</code></td>
<td class="type">
<span class="param-type">function</span>
</td>
<td class="attributes">
</td>
<td class="description last">The callback containing an error, in case of a failure and value object in case of success.</td>
</tr>
</tbody>
</table>
<h4 class="name" id=".deviceCommunicationControl"><span class="type-signature">(static) </span>deviceCommunicationControl<span class="signature">(receiver, timeDuration, enableDisable, options<span class="signature-attributes">opt</span>, next)</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="client.js.html">client.js</a>, <a href="client.js.html#line906">line 906</a>
</li></ul></dd>
</dl>
<div class="description">
The deviceCommunicationControl command enables or disables network communication of the target device.
</div>
<h5>Example</h5>
<pre class="prettyprint"><code>const bacnet = require('node-bacnet');
const client = new bacnet();
client.deviceCommunicationControl('192.168.1.43', 0, bacnet.enum.EnableDisable.DISABLE, (err) => {
console.log('error: ', err);
});</code></pre>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>receiver</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
</td>
<td class="description last">IP address of the target device.</td>
</tr>
<tr>
<td class="name"><code>timeDuration</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
</td>
<td class="description last">The time to hold the network communication state in seconds. 0 for infinite.</td>
</tr>
<tr>
<td class="name"><code>enableDisable</code></td>
<td class="type">
<span class="param-type"><a href="global.html#EnableDisable">EnableDisable</a></span>
</td>
<td class="attributes">
</td>
<td class="description last">The network communication state to set.</td>
</tr>
<tr>
<td class="name"><code>options</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>maxSegments</code></td>
<td class="type">
<span class="param-type"><a href="global.html#MaxSegmentsAccepted">MaxSegmentsAccepted</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The maximimal allowed number of segments.</td>
</tr>
<tr>
<td class="name"><code>maxApdu</code></td>
<td class="type">
<span class="param-type"><a href="global.html#MaxApduLengthAccepted">MaxApduLengthAccepted</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The maximal allowed APDU size.</td>
</tr>
<tr>
<td class="name"><code>invokeId</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The invoke ID of the confirmed service telegram.</td>
</tr>
<tr>
<td class="name"><code>password</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The optional password used to set the network communication state.</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="name"><code>next</code></td>
<td class="type">
<span class="param-type">function</span>
</td>
<td class="attributes">
</td>
<td class="description last">The callback containing an error, in case of a failure and value object in case of success.</td>
</tr>
</tbody>
</table>
<h4 class="name" id=".iAmResponse"><span class="type-signature">(static) </span>iAmResponse<span class="signature">(receiver, deviceId, segmentation, vendorId)</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="client.js.html">client.js</a>, <a href="client.js.html#line1535">line 1535</a>
</li></ul></dd>
</dl>
<div class="description">
The iAmResponse command is sent as a reply to a whoIs request.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>receiver</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">address to send packet to, null for local broadcast.</td>
</tr>
<tr>
<td class="name"><code>deviceId</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last">Our device ID.</td>
</tr>
<tr>
<td class="name"><code>segmentation</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last">an enum.Segmentation value.</td>
</tr>
<tr>
<td class="name"><code>vendorId</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last">The numeric ID assigned to the organisation providing this application.</td>
</tr>
</tbody>
</table>
<h4 class="name" id=".readProperty"><span class="type-signature">(static) </span>readProperty<span class="signature">(receiver, objectId, propertyId, options<span class="signature-attributes">opt</span>, next)</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="client.js.html">client.js</a>, <a href="client.js.html#line642">line 642</a>
</li></ul></dd>
</dl>
<div class="description">
The readProperty command reads a single property of an object from a device.
</div>
<h5>Example</h5>
<pre class="prettyprint"><code>const bacnet = require('node-bacnet');
const client = new bacnet();
client.readProperty('192.168.1.43', {type: 8, instance: 44301}, 28, (err, value) => {
console.log('value: ', value);
});</code></pre>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>receiver</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
</td>
<td class="description last">IP address of the target device.</td>
</tr>
<tr>
<td class="name"><code>objectId</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
</td>
<td class="description last">The BACNET object ID to read.
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>type</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last">The BACNET object type to read.</td>
</tr>
<tr>
<td class="name"><code>instance</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last">The BACNET object instance to read.</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="name"><code>propertyId</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
</td>
<td class="description last">The BACNET property id in the specified object to read.</td>
</tr>
<tr>
<td class="name"><code>options</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>maxSegments</code></td>
<td class="type">
<span class="param-type"><a href="global.html#MaxSegmentsAccepted">MaxSegmentsAccepted</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The maximimal allowed number of segments.</td>
</tr>
<tr>
<td class="name"><code>maxApdu</code></td>
<td class="type">
<span class="param-type"><a href="global.html#MaxApduLengthAccepted">MaxApduLengthAccepted</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The maximal allowed APDU size.</td>
</tr>
<tr>
<td class="name"><code>invokeId</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The invoke ID of the confirmed service telegram.</td>
</tr>
<tr>
<td class="name"><code>arrayIndex</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The array index of the property to be read.</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="name"><code>next</code></td>
<td class="type">
<span class="param-type">function</span>
</td>
<td class="attributes">
</td>
<td class="description last">The callback containing an error, in case of a failure and value object in case of success.</td>
</tr>
</tbody>
</table>
<h4 class="name" id=".readPropertyMultiple"><span class="type-signature">(static) </span>readPropertyMultiple<span class="signature">(receiver, propertiesArray, options<span class="signature-attributes">opt</span>, next)</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="client.js.html">client.js</a>, <a href="client.js.html#line737">line 737</a>
</li></ul></dd>
</dl>
<div class="description">
The readPropertyMultiple command reads multiple properties in multiple objects from a device.
</div>
<h5>Example</h5>
<pre class="prettyprint"><code>const bacnet = require('node-bacnet');
const client = new bacnet();
const requestArray = [
{objectId: {type: 8, instance: 4194303}, properties: [{id: 8}]}
];
client.readPropertyMultiple('192.168.1.43', requestArray, (err, value) => {
console.log('value: ', value);
});</code></pre>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>receiver</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
</td>
<td class="description last">IP address of the target device.</td>
</tr>
<tr>
<td class="name"><code>propertiesArray</code></td>
<td class="type">
<span class="param-type">Array.<object></span>
</td>
<td class="attributes">
</td>
<td class="description last">List of object and property specifications to be read.
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>objectId</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">Specifies which object to read.
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>type</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last">The BACNET object type to read.</td>
</tr>
<tr>
<td class="name"><code>instance</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last">The BACNET object instance to read.</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="name"><code>properties</code></td>
<td class="type">
<span class="param-type">Array.<object></span>
</td>
<td class="description last">List of properties to be read.
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>id</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last">The BACNET property id in the specified object to read. Also supports 8 for all properties.</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="name"><code>options</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>maxSegments</code></td>
<td class="type">
<span class="param-type"><a href="global.html#MaxSegmentsAccepted">MaxSegmentsAccepted</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The maximimal allowed number of segments.</td>
</tr>
<tr>
<td class="name"><code>maxApdu</code></td>
<td class="type">
<span class="param-type"><a href="global.html#MaxApduLengthAccepted">MaxApduLengthAccepted</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The maximal allowed APDU size.</td>
</tr>
<tr>
<td class="name"><code>invokeId</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">The invoke ID of the confirmed service telegram.</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="name"><code>next</code></td>
<td class="type">
<span class="param-type">function</span>
</td>
<td class="attributes">
</td>
<td class="description last">The callback containing an error, in case of a failure and value object in case of success.</td>
</tr>
</tbody>
</table>
<h4 class="name" id=".readPropertyResponse"><span class="type-signature">(static) </span>readPropertyResponse<span class="signature">(receiver, invokeId, objectId, property, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="client.js.html">client.js</a>, <a href="client.js.html#line1509">line 1509</a>
</li></ul></dd>
</dl>
<div class="description">
The readPropertyResponse call sends a response with information about one of our properties.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>receiver</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
</td>
<td class="description last">IP address of the target device.</td>
</tr>
<tr>
<td class="name"><code>invokeId</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="attributes">
</td>
<td class="description last">ID of the original readProperty request.</td>
</tr>
<tr>
<td class="name"><code>objectId</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
</td>
<td class="description last">objectId from the original request,</td>
</tr>
<tr>
<td class="name"><code>property</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
</td>
<td class="description last">property being read, taken from the original request.</td>
</tr>
<tr>
<td class="name"><code>options</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">varying behaviour for special circumstances
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>forwardedFrom</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last">If functioning as a BBMD, the IP address this message originally came from.</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h4 class="name" id=".reinitiali