Created
June 23, 2016 21:14
-
-
Save splatch/3216feba4bcad3cfd741644552f93870 to your computer and use it in GitHub Desktop.
This is example of bacnet4j 3.2.4 api usage to interact with Komfovent C4/Ping module to read present values og gauges and also set mode.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
/** | |
* @author Łukasz Dywicki <luke@code-house.org> | |
*/ | |
public class Main { | |
public static void main(String[] args) throws Exception { | |
IpNetwork network = new IpNetwork("192.168.2.255", IpNetwork.DEFAULT_PORT); | |
Transport transport = new DefaultTransport(network); | |
transport.setTimeout(500000); | |
transport.setSegTimeout(15000); | |
final LocalDevice localDevice = new LocalDevice(1338, transport); | |
localDevice.getEventHandler().addListener(new DeviceEventAdapter() { | |
@Override | |
public void iAmReceived(RemoteDevice device) { | |
System.out.println("Discovered device " + device); | |
localDevice.addRemoteDevice(device); | |
final RemoteDevice remoteDevice = localDevice.getRemoteDevice(device.getAddress()); | |
remoteDevice.setSegmentationSupported(Segmentation.segmentedBoth); | |
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 = 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)); | |
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() + ", "); | |
} | |
} | |
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()); | |
List<RemoteDevice> remoteDevices = localDevice.getRemoteDevices(); | |
for (RemoteDevice device : remoteDevices) { | |
System.out.println("Remote dev " + device); | |
} | |
System.in.read(); | |
localDevice.terminate(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment