• P
    Prabhu Hiremath

    When I try to read the object properties from the IP address, I am getting Unable to find router to network 50001
    please help me.

    I am using Bacnet4j 3.2.4.4 library.

    Here is the Code:
    import com.serotonin.bacnet4j.LocalDevice;
    import com.serotonin.bacnet4j.RemoteDevice;
    import com.serotonin.bacnet4j.RemoteObject;
    import com.serotonin.bacnet4j.ServiceFuture;
    import com.serotonin.bacnet4j.event.DeviceEventAdapter;
    import com.serotonin.bacnet4j.exception.BACnetException;
    import com.serotonin.bacnet4j.exception.ErrorAPDUException;
    import com.serotonin.bacnet4j.npdu.ip.IpNetwork;
    import com.serotonin.bacnet4j.service.acknowledgement.ReadPropertyAck;
    import com.serotonin.bacnet4j.service.acknowledgement.ReadPropertyMultipleAck;
    import com.serotonin.bacnet4j.service.confirmed.*;
    import com.serotonin.bacnet4j.service.unconfirmed.WhoIsRequest;
    import com.serotonin.bacnet4j.transport.DefaultTransport;
    import com.serotonin.bacnet4j.transport.Transport;
    import com.serotonin.bacnet4j.type.constructed.ReadAccessResult;
    import com.serotonin.bacnet4j.type.constructed.ReadAccessSpecification;
    import com.serotonin.bacnet4j.type.constructed.SequenceOf;
    import com.serotonin.bacnet4j.type.enumerated.ObjectType;
    import com.serotonin.bacnet4j.type.enumerated.PropertyIdentifier;
    import com.serotonin.bacnet4j.type.enumerated.Segmentation;
    import com.serotonin.bacnet4j.type.primitive.ObjectIdentifier;
    import com.serotonin.bacnet4j.type.primitive.Real;
    import com.serotonin.bacnet4j.util.DiscoveryUtils;

    import java.util.ArrayList;
    import java.util.List;

    public class Bacnet_4_j_test2 {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) throws Exception {
      IpNetwork network = new IpNetwork("172.16.60.195", IpNetwork.DEFAULT_PORT);
      Transport transport = new DefaultTransport(network);
      transport.setTimeout(500000);
      transport.setSegTimeout(15000);
      final LocalDevice localDevice = new LocalDevice(5001, transport);

    localDevice.getEventHandler().addListener(new DeviceEventAdapter() {
    public void iAmReceived(RemoteDevice device) {
    // System.out.println("Discovered device " + 1001);
    localDevice.addRemoteDevice(device);
    final RemoteDevice remoteDevice = localDevice.getRemoteDevice(device.getAddress());
    // System.out.println("hi:"+remoteDevice.getInstanceNumber());

    remoteDevice.setSegmentationSupported(Segmentation.segmentedBoth);
    remoteDevice.setSegmentationSupported(Segmentation.noSegmentation);
    remoteDevice.setSegmentationSupported(Segmentation.segmentedReceive);
    remoteDevice.setSegmentationSupported(Segmentation.segmentedTransmit);
    remoteDevice.setSegmentationSupported(Segmentation.ALL[3]);
    device.setMaxAPDULengthAccepted(100);

    // System.out.println("Hi:"+remoteDevice.getSegmentationSupported());

    new Thread(new Runnable() {
    @Override
    public void run() {
    try {
    try {
    DiscoveryUtils.getExtendedDeviceInformation(localDevice, remoteDevice);
    } catch (BACnetException e) {
    e.printStackTrace();
    }
    System.out.println(remoteDevice.getName() + " " + remoteDevice.getVendorName() + " " + remoteDevice.getModelName() + " " + remoteDevice.getAddress() + " " + remoteDevice.getProtocolRevision() + " " + remoteDevice.getProtocolVersion());

    ReadPropertyAck ack = localDevice.send(remoteDevice, new ReadPropertyRequest(remoteDevice.getObjectIdentifier(), PropertyIdentifier.objectList)).get();
    SequenceOf<ObjectIdentifier> value = (SequenceOf<ObjectIdentifier>) ack.getValue();

    for (ObjectIdentifier id : value) {

    List<ReadAccessSpecification> specs = new ArrayList<ReadAccessSpecification>();
    specs.add(new ReadAccessSpecification(id, PropertyIdentifier.presentValue));
    //specs.add(new ReadAccessSpecification(id, PropertyIdentifier.units));
    specs.add(new ReadAccessSpecification(id, PropertyIdentifier.objectName));
    //specs.add(new ReadAccessSpecification(id, PropertyIdentifier.description));
    //specs.add(new ReadAccessSpecification(id, PropertyIdentifier.objectType));
    //specs.add(new ReadAccessSpecification(id, PropertyIdentifier.eventType));

    ReadPropertyMultipleRequest multipleRequest = new ReadPropertyMultipleRequest(new SequenceOf<ReadAccessSpecification>(specs));

    ReadPropertyMultipleAck send = localDevice.send(remoteDevice, multipleRequest).get();
    SequenceOf<ReadAccessResult> readAccessResults = send.getListOfReadAccessResults();

    System.out.print(id.getInstanceNumber() + " " + id.getObjectType() + ", ");
    for (ReadAccessResult result : readAccessResults) {
    for (ReadAccessResult.Result r : result.getListOfResults()) {
    System.out.print(r.getReadResult() + ", ");
    if(r.getReadResult().toString().contains("T")){

    }

    }
    }
    System.out.println();
    }

    ObjectIdentifier mode = new ObjectIdentifier(ObjectType.analogValue, 11);

    ServiceFuture send = localDevice.send(remoteDevice, new WritePropertyRequest(mode, PropertyIdentifier.presentValue, null, new Real(2), null));
    System.out.println(send.getClass());
    System.out.println(send.get().getClass());

    } catch (ErrorAPDUException e) {
    System.out.println("Could not read value " + e.getApdu().getError() + " " + e);
    } catch (BACnetException e) {
    e.printStackTrace();
    }

    }
    }).start();
    }

    @Override
    public void iHaveReceived(RemoteDevice device, RemoteObject object) {
    System.out.println("Value reported " + device + " " + object);
    }
    });

    localDevice.initialize();
    localDevice.sendGlobalBroadcast(new WhoIsRequest());
    Thread.sleep(60000);

    List<RemoteDevice> remoteDevices = localDevice.getRemoteDevices();
    for (RemoteDevice device : remoteDevices) {
    System.out.println("Remote dev " + device);
    }

    System.in.read();
    localDevice.terminate();
    }

    }

    posted in BACnet4J general discussion read more