bacnet icon indicating copy to clipboard operation
bacnet copied to clipboard

Reading Site level and Group level objects using BACnet4j

Open ghost opened this issue 6 years ago • 0 comments

Hi Folks,

I am trying to read Objects and Properties from BACnet interface. We are using example code of BACnet4J where our client code is expected to communicate with BACnet interface provided by LumInsight Desktop(Propriety Software).

So, in our case the device discovery is complete but we are stuck in how to read Site level and Group level information from BACnet interface.

Here is the output I am getting currently:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. initialized Printing address...Address [networkNumber=0, macAddress=[a,2c,37,5,ba,c0]] RemoteDevice(instanceNumber=10001, address=Address [networkNumber=0, macAddress=[a,2c,37,5,ba,c0]]) ObjectIdentifier:Device 10001 getName:LumInsight Virtual Router getModelName:LIBI-01 Remote Device:RemoteDevice(instanceNumber=10001, address=Address [networkNumber=0, macAddress=[a,2c,37,5,ba,c0]]) User data: device retrieved:[Device 10001] property values: PropertyValues [values={ObjectPropertyReference(objectIdentifier=Device 10001, propertyIdentifier=presentValue, propertyArrayIndex=null)=errorClass=Property, errorCode=unknownProperty}] errorClass=Property, errorCode=unknownProperty

The source code which I am referring and modified is as below:

`package org.openmucextensions.driver.bacnet;

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

import com.serotonin.bacnet4j.LocalDevice; import com.serotonin.bacnet4j.RemoteDevice; import com.serotonin.bacnet4j.RemoteObject; import com.serotonin.bacnet4j.ServiceFuture; import com.serotonin.bacnet4j.npdu.ip.IpNetwork; import com.serotonin.bacnet4j.npdu.ip.IpNetworkUtils; import com.serotonin.bacnet4j.service.acknowledgement.ReadPropertyAck; import com.serotonin.bacnet4j.service.acknowledgement.ReadPropertyMultipleAck; import com.serotonin.bacnet4j.service.confirmed.ConfirmedRequestService; import com.serotonin.bacnet4j.service.confirmed.ReadPropertyMultipleRequest; import com.serotonin.bacnet4j.service.confirmed.ReadPropertyRequest; import com.serotonin.bacnet4j.service.confirmed.WritePropertyRequest; import com.serotonin.bacnet4j.transport.DefaultTransport; import com.serotonin.bacnet4j.transport.Transport; import com.serotonin.bacnet4j.type.constructed.Address; 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.primitive.ObjectIdentifier; import com.serotonin.bacnet4j.type.primitive.Real; import com.serotonin.bacnet4j.util.DiscoveryUtils; import com.serotonin.bacnet4j.util.PropertyReferences; import com.serotonin.bacnet4j.util.PropertyValues; import com.serotonin.bacnet4j.util.RequestUtils;

public class ConnectDeviceSample {

static LocalDevice localDevice1;

public static void main(String[] args) {

    IpNetwork network1 = new IpNetwork("10.44.55.5", 12345);
    Transport transport1 = new DefaultTransport(network1);
    transport1.addNetworkRouter(7771, IpNetworkUtils.toOctetString("10.44.55.5:47808"));

    localDevice1 = new LocalDevice(92068, transport1);

    try {
        localDevice1.initialize();
        System.out.println("initialized");
        Address address1 = new Address(IpNetworkUtils.toOctetString("10.44.55.5:47808"));
        System.out.println("Printing address..."+address1);
        RemoteDevice d1 = localDevice1.findRemoteDevice(address1, 10001);
        System.out.println(d1);
        
        final ObjectIdentifier oi=d1.getObjectIdentifier();
        DiscoveryUtils.getExtendedDeviceInformation(localDevice1, d1);
        System.out.println("ObjectIdentifier:" +oi);
        System.out.println("getName:"+d1.getName());
        System.out.println("getModelName:"+d1.getModelName());
        System.out.println("Remote Device:"+d1);
        System.out.println("User data:");
        
        /*retrieves device object*/
        List<ObjectIdentifier> oids = ((SequenceOf<ObjectIdentifier>) RequestUtils.sendReadPropertyAllowNull(
                localDevice1, d1, d1.getObjectIdentifier(), PropertyIdentifier.objectList)).getValues();
        
        System.out.println("device retrieved:"+oids);
        
        
        
        

        
        /*Read multiple values*/
        PropertyReferences references = new PropertyReferences();

        for (ObjectIdentifier objectIdentifier : oids) {
        	references.add(objectIdentifier, PropertyIdentifier.presentValue);
        }
            	
        PropertyValues values = RequestUtils.readProperties(localDevice1, d1, references, null);
        System.out.println("property values: "+values);

        for (ObjectIdentifier objectIdentifier : oids) {
        	System.out.println(values.getString(objectIdentifier, PropertyIdentifier.presentValue));
        }
        
        
        
        


    } catch (Exception e) {
        System.out.println(e.toString());
        
        
    } finally {
        localDevice1.terminate();
    }
}

}`

Please find our device hierarchy in the image attached along with. Any kind of help/advice is highly appreciated . Thanks in advance.

yabe_device_object_structure

ghost avatar Aug 01 '17 07:08 ghost