Surely there is more to your test? This seems to me like the process would exit before any responses would have had a chance to respond.
Assuming the issue isn't your program exiting after the all to initialize the LocalDevice (which send a WhoIS but does not pause the thread that called it to listen for some amount of time for responses, that's handled by another thread elsewhere), then I would guess you may want to try other possible addresses, such as a broadcast of 255.255.255.255 with a bind address of 0.0.0.0
@carnecro I've never actually attempted to do this but from looking at the code it would seem that the returned list of properties for an all request is built from the properties that are added in the ObjectProperties class. The list for an AnalogObjectValue is created on roughly line 706. I would think that if you were to manually add your proprietary properties to this map when you initialize your AnalogValueObject then they will be returned in a request for all properties. So this code, executed once will likely solve your problem:
boolean required = true; //If property is required
PropertyIdentifier yourCustomPropertyId = new PropertyIdentifier(492);
com.serotonin.bacnet4j.obj.ObjectProperties.add(ObjectType.analogValue, yourCustomPropertyId, YourCustomPropertyClass.class, required);
Also as a side note I've dealt with some hardware BACnet devices that don't let you read the PropertyIdentifier.all(#8) which has forced us to not be able to rely on that type of request.
Actually BACnet4J uses Simple Logging Facade for Java (SLF4J) https://www.slf4j.org. In Mango we use the Log4J binding and configure BACnet4Js logging via Log4J.
However if you are only using BACnet4J with no additional logging library you can configure the SLF4J loggers by including a binding. Some bindings require configuration but if you just want to discard all logging messages place the NOP binding on your class path.
See this link https://www.slf4j.org/manual.html#swapping for the various bindings you can choose, all you need to do then is put 1 of these bindings on your class path and configure it if the binding requires it.
Currently, yes, that would be one way to do it (although your withBroadcast arguments seem questionable). You would have to have multiple network interfaces or multiple addresses on an interface. Another way to do it would be to implement your own transport based on routing between the networks that you wished to bridge. It looks like Terry may have fixed a bug concerning reusing the IP address and port recently, so perhaps you can pull and see if that will help you do what you are trying, https://github.com/infiniteautomation/BACnet4J/commit/9cb0864ef25be802b0b2e84ebd7013018bfafac3
Broadcast addresses are all ones in the address bits on a subnet usually, unless there is some unique routing going on there. I.E. 192.168.255.255/16 or 192.168.1.255/24
Please share the entire stack trace and log message when posting exception output. The only error where that would be the first line in the stack trace would be the throw e; in sendOneAtATime which would imply the first request timed out.
Thank you, phildunlap.
I've got exception stack trace like next.
com.serotonin.bacnet4j.exception.BACnetTimeoutException: No response from instanceId XXXXX
Also I use timeout related code like the following.
Transport transport = new DefaultTransport(network);
RemoteDeviceFuture dd = localDevice.getRemoteDevice(XXXXX);
RemoteDevice d = dd.get(90000);
I think this is the bacnet device's problem now, but if I've not use the code correctly, I hope to know about it.