I'm not sure what this test program was intended for, but it has revealed an odd condition. The property identifiers "all", "required" and "optional" are special in that they refer to multiple properties rather than one. As such, a ReadProperty request cannot be used to retrieve them since the response can only contain a single property.
But, the LocalDevice.readProperties method detects when a single property identifier was provided, and uses a ReadProperty request for efficiency. I will enhance the method to detect these properties. In the meantime, you can explicitly use a ReadPropertyMultiple request to retrieve "all" object properties.
Thanks for your comments. The fact of the matter is that BACnet4J was born out of a need for an operator-side protocol implementation. This is why to date there is device-side functionality that is not implemented. OutOfService remains undone only because no one has yet ask for it - until now.
When time permits i can take a look at it, but having something for tomorrow is unlikely. If you end up doing it yourself and want to contribute the code back, it would be welcome.
Except for the guy supporting it. In general i don't have the information you are requesting. Not everyone who uses the software tells me so, much less describes how they are using it with detailed equipment lists and such.
Also, I apologize for the lack of documentation. I'm still waiting on someone who freely uses the software to contribute such a thing back to the project.
Hi, I have the same problem. I have a Johnson Controls FX40 and set up some analogue temperature BACNet points on the FX40.
The FX40 is attached to a fixed IP address wireless router and I can easy get in there to change the logic or monitor the logic.
I tried to setup a BACNet point using mango and in the Device ID I enter 5667 which is the device ID and in broadcast address I enter in the fixed IP address where I want to connect too.
What do I enter in the port address, at this time its 47808 and as for the wireless fixed IP address router I only port forward, 8080, 3011, 1911, 9973 to the FX40 and that’s all that is needed.
I can enable the device and no warnings or alarms appear, and when i change the port to 8080 or use whois i get "Address already in use: Cannot bind" and i get that on all the above port addresses 8080, 3011, 1911, 9973.
Thank you for the quick reply and the info. Indeed if the organization I belong to did decide to work on a Java 1.4 port, we would hopefully be able to contribute this back to the community.
Thank you again !
That's a good question. I don't believe there are any specified requirements in this regard.
But when we look at the WhoHas service, there is a device id range (meaning your device id should be consistent), and there is a Choice object which can be either object identifier or name. So, theoretically either should do, but for maximum compatibility they should probably both remain the same for your object.
I guess what I really need to do (if it's not cost prohibitive) is get a hold of some of the BACnet monitoring tools and see how folks monitor and administer BACnet devices. I would guess the configuration of a hard wire BACnet device rarely changes and one can form dependencies on the object ids. If I need to maintain the mapping between my analog sensors and an arbitrary object instance id, I can do that - I just don't know if it's necessary.
Yes, that certainly was a bug. I've applied your fixes with a small difference.
Your code locates all instances where the given object matches the current object in the list, and shifts all remaining objects on the right one slot to the left to affect the remove. However, the implementation of the remove(int indexBase1) sets the value at the index to null and then trims nulls from the end of the list.
The remove implementation that i've applied will only remove the first occurrence of a matching object (from left to right), and will remove it by setting it to null (via a call to the remove(int) method, so trimming of nulls on the right will also occur). This is only for consistency sake.
I've also implemented your original code, but renamed it removeAll(E). The code changes have been checked into the CVS repo. Let me know if this doesn't work for your purposes and we'll figure something out.