Build.gradle
repositories { maven { url "https://maven.mangoautomation.net/repository/ias-release/" } }
compile group: 'com.serotonin', name: 'bacnet4j', version: '4.0.1'
Read and Write Values
public class Main { private static LocalDevice localDevice; private static RemoteDevice remoteDevice; public static void main(String[] args) { try { IpNetwork network = new IpNetworkBuilder(). withBroadcast("192.168.1.255", 24). build(); Transport transport = new DefaultTransport(network); localDevice = new LocalDevice(6, transport); localDevice.initialize(); remoteDevice = localDevice.getRemoteDeviceBlocking(6); DiscoveryUtils.getExtendedDeviceInformation(localDevice, remoteDevice); /*List oids = ((SequenceOf) RequestUtils.sendReadPropertyAllowNull(localDevice, remoteDevice, remoteDevice.getObjectIdentifier(), PropertyIdentifier.objectList)).getValues();*/ List<ObjectIdentifier> objectIdentifierList = new ArrayList<ObjectIdentifier>(); /*for (Object obj : oids) { if (obj.getClass().equals(ObjectIdentifier.class)) { ObjectIdentifier oid = (ObjectIdentifier) obj; if (oid.getInstanceNumber() == 85) { if (oid.getObjectType() == ObjectType.binaryOutput) { objectIdentifierList.add(oid); } } } }*/ ObjectIdentifier objectIdentifier = new ObjectIdentifier(ObjectType.binaryOutput, 85); objectIdentifierList.add(objectIdentifier); readPresentValues(objectIdentifierList); //readPresentValue(objectIdentifier); } catch (Exception ex) { ex.printStackTrace(); } } private static void readPresentValues(List<ObjectIdentifier> oids) throws BACnetException { PropertyReferences references = new PropertyReferences(); for (ObjectIdentifier oid : oids) { references.add(oid, PropertyIdentifier.presentValue); } PropertyValues values = RequestUtils.readProperties(localDevice, remoteDevice, references, null); for (ObjectIdentifier oid : oids) { System.out.println(values.getString(oid, PropertyIdentifier.presentValue)); } } private static void readPresentValue(ObjectIdentifier oid) throws Exception { ReadPropertyRequest rpr = new ReadPropertyRequest(oid, PropertyIdentifier.presentValue); ReadPropertyAck ack = (ReadPropertyAck) localDevice.send(remoteDevice, rpr); System.out.println("Present value: " + ack.getValue()); } private static void setPresentValue(ObjectIdentifier oid, Encodable value, int priority) throws Exception { WritePropertyRequest wpr = new WritePropertyRequest(oid, PropertyIdentifier.presentValue, null, value, new UnsignedInteger(priority)); localDevice.send(remoteDevice, wpr); } private static void getPriorityArray(ObjectIdentifier oid) throws Exception { ReadPropertyRequest rpr = new ReadPropertyRequest(oid, PropertyIdentifier.priorityArray); ReadPropertyAck ack = (ReadPropertyAck) localDevice.send(remoteDevice, rpr); System.out.println("Priority array: " + ack.getValue()); } }
References
https://github.com/infiniteautomation/BACnet4J
https://www.csimn.com/CSI_pages/BACnet101.html
https://github.com/openmucextensions/bacnet/wiki