sending multiple devices.
-
Hello, I'm trying to make multiple BACnet devices in my IP, like(192.168.1.101:1234)(192.168.1.101:1235)(192.168.1.101:1236)
I made one local device in instance number 1234, but I figured out that I can't make multiple local devices in just one IP. (If it can, someone tell me how to do it. I get bind error in initializing.)so, I made some remote device(instance number 1235) to bind to my local device(instance number 1234), but i can't just add present value to my remote device or just find the remote device.
this is my code. I got sample code from "RemoteDeviceTest.java" file. I don't need assert function to check values.
final IpNetwork network = new IpNetworkBuilder() .withBroadcast(properties.getProperty("bacnetBroadcasting"), 16).withPort(47808) .withLocalBindAddress(properties.getProperty("bacnetBroadcastingIp")).build(); transport = new DefaultTransport(network); localDevice = new LocalDevice(Integer.parseInt(properties.getProperty("deviceId")), transport); final RemoteDevice rd = new RemoteDevice(localDevice, 1236); final ObjectIdentifier ai1 = new ObjectIdentifier(ObjectType.analogInput, 0); final ObjectIdentifier ai2 = new ObjectIdentifier(ObjectType.analogInput, 1); final ObjectIdentifier ai3 = new ObjectIdentifier(ObjectType.analogInput, 2); final ObjectIdentifier ai4 = new ObjectIdentifier(ObjectType.analogInput, 3); final ObjectIdentifier ai5 = new ObjectIdentifier(ObjectType.analogInput, 4); ai1.write(new ByteQueue(new byte[] { 0 }), 0); ai2.write(new ByteQueue(new byte[] { 1 }), 1); ai3.write(new ByteQueue(new byte[] { 2 }), 2); ai4.write(new ByteQueue(new byte[] { 3 }), 3); ai5.write(new ByteQueue(new byte[] { 4 }), 4); rd.setDeviceProperty(PropertyIdentifier.objectList, UnsignedInteger.ZERO, new UnsignedInteger(5)); rd.setDeviceProperty(PropertyIdentifier.objectList, new UnsignedInteger(3), ai3); final SequenceOf<ObjectIdentifier> objectList = rd.getDeviceProperty(PropertyIdentifier.objectList); rd.setDeviceProperty(PropertyIdentifier.objectList, new SequenceOf<>(ai1, ai2, ai3, ai4, ai5)); try { localDevice.initialize(); System.out.println(localDevice.getRemoteDevice(1)); localDevice.startRemoteDeviceDiscovery((r) -> { System.out.println(r.getInstanceNumber()); }); localDevice.getRemoteDevice(0).get(); localDevice.getRemoteDevice(1).get(); localDevice.sendGlobalBroadcast(new WhoIsRequest()); } catch (Exception e1) { LOGGER.info(e1.toString()); localDevice.terminate(); } localDevice.getEventHandler().addListener(new Listener()); localDevice.sendGlobalBroadcast(new WhoIsRequest()); LOGGER.info("Initialized");
and I get this console output.
and If I use YABE, I don't get anything from remote device. I just get local device values.
I want to add some multiple devices to my local device, and send some present values from remote devices.
Can anybody teach me about how to get it?Thank you. :)
-
I think I got more closer to answer (or more messed up) but still not working.
final IpNetwork network = new IpNetworkBuilder() .withBroadcast(properties.getProperty("bacnetBroadcasting"), 16).withPort(47808) .withLocalBindAddress(properties.getProperty("bacnetBroadcastingIp")).build(); transport = new DefaultTransport(network); localDevice = new LocalDevice(Integer.parseInt(properties.getProperty("deviceId")), transport); final byte[] a=hexStringToByteArray("10264661021061036466103105103103"); final Address macAddress = new Address(a); final RemoteDevice rd = new RemoteDevice(localDevice, 1236, macAddress); final ObjectIdentifier ai1 = new ObjectIdentifier(ObjectType.analogInput, 0); final ObjectIdentifier ai2 = new ObjectIdentifier(ObjectType.analogInput, 1); final ObjectIdentifier ai3 = new ObjectIdentifier(ObjectType.analogInput, 2); final ObjectIdentifier ai4 = new ObjectIdentifier(ObjectType.analogInput, 3); final ObjectIdentifier ai5 = new ObjectIdentifier(ObjectType.analogInput, 4); ai1.write(new ByteQueue(new byte[] { 0 }), 0); ai2.write(new ByteQueue(new byte[] { 1 }), 1); ai3.write(new ByteQueue(new byte[] { 2 }), 2); ai4.write(new ByteQueue(new byte[] { 3 }), 3); ai5.write(new ByteQueue(new byte[] { 4 }), 4); // Verify try { // Set the object to something else. localDevice.send(rd, new WritePropertyRequest(new ObjectIdentifier(ObjectType.multiStateValue, 0), PropertyIdentifier.presentValue, null, new UnsignedInteger(2), new UnsignedInteger(8))).get(); localDevice.send(rd, new WritePropertyRequest(new ObjectIdentifier(ObjectType.multiStateValue, 0), PropertyIdentifier.presentValue, null, new UnsignedInteger(4), new UnsignedInteger(98))).get(); } catch (BACnetException e2) { e2.printStackTrace(); } rd.setDeviceProperty(PropertyIdentifier.objectList, UnsignedInteger.ZERO,new UnsignedInteger(5)); rd.setDeviceProperty(PropertyIdentifier.objectList, new UnsignedInteger(3), ai3); final SequenceOf<ObjectIdentifier> objectList = rd.getDeviceProperty(PropertyIdentifier.objectList); rd.setDeviceProperty(PropertyIdentifier.objectList, new SequenceOf<>(ai1, ai2, ai3, ai4, ai5)); rd.setObjectProperty(ai1, PropertyIdentifier.presentValue, new Real(1)); rd.getObject(ai1); try { localDevice.initialize(); System.out.println(localDevice.getRemoteDevice(1)); localDevice.startRemoteDeviceDiscovery((r) -> { System.out.println(r.getInstanceNumber()); }); localDevice.getRemoteDevice(0).get(); localDevice.getRemoteDevice(1).get(); localDevice.sendGlobalBroadcast(new WhoIsRequest()); } catch (Exception e1) { LOGGER.info(e1.toString()); localDevice.terminate(); } localDevice.getEventHandler().addListener(new Listener()); localDevice.sendGlobalBroadcast(new WhoIsRequest()); LOGGER.info("Initialized");
-
I got error message.
com.serotonin.bacnet4j.exception.BACnetTimeoutException: Timeout waiting for response. at com.serotonin.bacnet4j.transport.ServiceFutureImpl.get(ServiceFutureImpl.java:69) at bacnetTest.DispFrame$2.actionPerformed(DispFrame.java:120) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) 6312 [BACnet4J transport for device 1234] ERROR com.serotonin.bacnet4j.transport.DefaultTransport - Error during send: OutgoingConfirmed [maxAPDULengthAccepted=-1, segmentationSupported=null, service=Encodable(com.serotonin.bacnet4j.service.confirmed.WritePropertyRequest), consumer=com.serotonin.bacnet4j.transport.ServiceFutureImpl@4bdafb61, address=Address [networkNumber=0, macAddress=[10,26,46,61,2,10,61,3,64,66,10,31,5,10,31,3]], linkService=null] 6312 [BACnet4J transport for device 1234] ERROR com.serotonin.bacnet4j.transport.DefaultTransport - Original send stack java.lang.Exception at com.serotonin.bacnet4j.transport.DefaultTransport.send(DefaultTransport.java:266) at com.serotonin.bacnet4j.transport.DefaultTransport.send(DefaultTransport.java:257) at com.serotonin.bacnet4j.LocalDevice.send(LocalDevice.java:970) at bacnetTest.DispFrame$2.actionPerformed(DispFrame.java:119) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) com.serotonin.bacnet4j.LocalDevice$2@3cc018c2 0 1 12684 [BACnet4J transport for device 1234] ERROR com.serotonin.bacnet4j.transport.DefaultTransport - Error during expire messages: java.lang.NullPointerException at com.serotonin.bacnet4j.npdu.Network.sendAPDU(Network.java:103) at com.serotonin.bacnet4j.transport.DefaultTransport.sendForResponse(DefaultTransport.java:896) at com.serotonin.bacnet4j.transport.DefaultTransport.expire(DefaultTransport.java:855) at com.serotonin.bacnet4j.transport.DefaultTransport.run(DefaultTransport.java:460) at java.lang.Thread.run(Unknown Source) 12776 [pool-1-thread-2] WARN com.serotonin.bacnet4j.service.unconfirmed.IAmRequest - Error in device 1234 while discovering extended device information from 1 at Address [networkNumber=0, macAddress=[c0,a8,1,d,ba,c0]] 18696 [BACnet4J transport for device 1234] ERROR com.serotonin.bacnet4j.transport.DefaultTransport - Error during expire messages: java.lang.NullPointerException at com.serotonin.bacnet4j.npdu.Network.sendAPDU(Network.java:103) at com.serotonin.bacnet4j.transport.DefaultTransport.sendForResponse(DefaultTransport.java:896) at com.serotonin.bacnet4j.transport.DefaultTransport.expire(DefaultTransport.java:855) at com.serotonin.bacnet4j.transport.DefaultTransport.run(DefaultTransport.java:460) at java.lang.Thread.run(Unknown Source)
-
Hi YEJI,
I answered in your other thread, https://forum.infiniteautomation.com/topic/3942/no-response-from-remote-device
Adding more information to this thread to get a better chance of response (which you shouldn't attempt to insist upon) is fine, but there's no reason to bump it by adding more threads.