fh1ch / node-bacstack

A BACnet protocol stack written in pure JavaScript
MIT License
170 stars 97 forks source link

Bacnet device object and properties are not able to access but able to discover the devices #141

Open iliyas18 opened 5 years ago

iliyas18 commented 5 years ago

I am using Yabe bacnet simulator which has both device simulator and explorer. But if I use the bacstack library , I am not able to use the device objects and proeprties. It is discovering the device but not able to load object and properties for usage.

Simulator which I used https://sourceforge.net/projects/yetanotherbacnetexplorer.

But in Yabe device explorer it is working. image

Simulator snap: image

The error which I am getting:

err:  Error: ERR_TIMEOUT
    at Timeout._onTimeout (C:\Users\EpsilonPrime\node_modules\bacstack\lib\client.js:75:16)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)

The nodejs code which I have used:

const bacnet = require('bacstack');

// Initialize BACStack
const client = new bacnet({apduTimeout: 3000});

console.log(client);

//console.log(client.EventEmitter)

// 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);
  console.log('object type---------->  ', device.vendorId);
  console.log('vendorId---------->  ', device.vendorId);
});

client.whoIs();

// Read Device Object
client.readProperty('192.168.14.87', {type: 8, instance: 2195695}, 28, (err, value) => {
  console.log('value: ', value);
  console.log('err: ', err);
});

In the below image it is displaying that it is discovering the devices but it is not able to find objects. 98a2e5579a291af57edf750e1b8f9a52d52d427f

CqnnB

Apollon77 commented 4 years ago

Please check the updated fork on https://github.com/BiancoRoyal/node-bacstack ... I was able successfully to communicate with the Room Simulator ... I only had trouble when it was running on the same device.

jaydenpung commented 3 years ago

I am having the same issue here. I am able to detect the bacnet device with BACnet Explorer: image

There is also whois response: image

However I am getting timeout. How should I troubleshoot this?

UPDATE: Turns out if I close the BACnet Explorer, the library works fine. I guess BACnet only support one poller?

jscott3201 commented 3 years ago

BACnet is a long running UDP process in most stacks that binds to the adapter. Only one service can bind to 47808 at a time. Linux you can use ifconfig and setup a temporary adapter with IP/SUBNET.

192.168.1.1:47808 -> 192.168.1.2:47807 would be a valid path but not using the same source and destination IP. Basically mimicking the loop back behavior of the local machine at that point.

jaydenpung commented 3 years ago

Does this mean if I have two separate machine polling from a bacnet device, it will still work?

jscott3201 commented 3 years ago

Yes you can multiple machines target a device or poll each other. You should always be able to WhoIs your virtual instances as they are required by spec to have a few default fields like Vendor ID. If you want to simulate two devices on a machine you need to setup separate Ethernet interfaces. Something like "sudo ifconfig eth0:1 192.168.1.1/24" would work in Linux. Each instance of the service has to bind to the UDP port.

jaydenpung commented 3 years ago

This is amazing info, really saved me a lot of time, thank you Scott!

Ashok0111 commented 1 year ago

Hey guys , i too have the same issue, but I am running the nodejs code on Mac, and running the YABE on a virtual machine , on the same network. i am able to run whois. but unable to read values. can you help me on this?