Please Note This forum exists for community support for the Mango product family and the Radix IoT Platform. Although Radix IoT employees participate in this forum from time to time, there is no guarantee of a response to anything posted here, nor can Radix IoT, LLC guarantee the accuracy of any information expressed or conveyed. Specific project questions from customers with active support contracts are asked to send requests to support@radixiot.com.

  • How to tell the client ReadPropertyMultiple is not supported

    3
    0 Votes
    3 Posts
    2k Views
    carnecroC
    Thank you, the right hint! The framework can do it without source code modification: DeviceObject deviceObject = localDevice.getDeviceObject(); ServicesSupported servicesSupported = deviceObject.readProperty(PropertyIdentifier.protocolServicesSupported); servicesSupported.setReadPropertyMultiple(false); Robert
  • 5.0.0 in public repository?

    4
    0 Votes
    4 Posts
    3k Views
    phildunlapP
    I do not believe 4.1.7 was formally released. 4.1.7 is bundled in the latest BACnet module release in Mango, but it's a timestamped version meaning it was not released as 4.1.7 at that time.
  • Realize Connection and object exists check

    check connectio
    4
    0 Votes
    4 Posts
    2k Views
    phildunlapP
    I am saying the only way to detect a spontaneous disconnection, which I think it what you're asking, is to send a request of some sort and have it time out.
  • does bacnet4j support ISO16484-5?

    1
    0 Votes
    1 Posts
    854 Views
    No one has replied
  • This topic is deleted!

    1
    0 Votes
    1 Posts
    3 Views
    No one has replied
  • Request list of object properties

    5
    0 Votes
    5 Posts
    3k Views
    D
    Wish I knew about that before! Thanks heaps for the reference. Gonna put my function here for any future references too. Feel free to point out any improvements. public Map<PropertyIdentifier, Encodable> getObjectPropertyListNotNull(RemoteDevice d, ObjectIdentifier obj) throws BACnetException{ List<ObjectPropertyTypeDefinition> propsDefs = ObjectProperties.getObjectPropertyTypeDefinitions(obj.getObjectType()); ArrayList<PropertyIdentifier> props = new ArrayList<PropertyIdentifier>(propsDefs.size()); Map<PropertyIdentifier, Encodable> propValuesFinal = new HashMap<>(); for(ObjectPropertyTypeDefinition prop : propsDefs){props.add(prop.getPropertyTypeDefinition().getPropertyIdentifier());} if(d.getObject(obj) == null){ Map<PropertyIdentifier, Encodable> propValues = RequestUtils.getProperties(localDevice, d, obj, null, props.toArray(new PropertyIdentifier[props.size()])); propValues.forEach((pid, val) -> { if(val instanceof ErrorClassAndCode) return; propValuesFinal.put(pid, val); d.setObjectProperty(obj, pid, val); }); } else{ for(PropertyIdentifier pid : props){ Encodable val = d.getObject(obj).getProperty(pid); if(val != null){ propValuesFinal.put(pid, val); } } } return propValuesFinal; }
  • No response from Remote Device

    4
    0 Votes
    4 Posts
    2k Views
    phildunlapP
    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
  • sending multiple devices.

    4
    0 Votes
    4 Posts
    2k Views
    phildunlapP
    Hi YEJI, I answered in your other thread, https://forum.infiniteautomation.com/topic/3942/no-response-from-remote-device Adding more information to this thread to get a better chance of response (which you shouldn't attempt to insist upon) is fine, but there's no reason to bump it by adding more threads.
  • RequestUtils sendOneAtATime Error

    2
    0 Votes
    2 Posts
    2k Views
    phildunlapP
    Hi revanreddy, 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.
  • BACnetTimeoutException: No response from instanceId

    3
    0 Votes
    3 Posts
    2k Views
    M
    Thank you, phildunlap. I've got exception stack trace like next. com.serotonin.bacnet4j.exception.BACnetTimeoutException: No response from instanceId XXXXX com.serotonin.bacnet4j.util.RemoteDeviceFinder$DeviceFutureImpl.get(RemoteDeviceFinder.java:176) com.serotonin.bacnet4j.LocalDevice$2.get(LocalDevice.java:705) Also I use timeout related code like the following. Transport transport = new DefaultTransport(network); transport.setTimeout(30000); transport.setSegTimeout(30000); 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.
  • Unable to find router to network

    2
    0 Votes
    2 Posts
    2k Views
    phildunlapP
    Hi davyv, Someone referenced this in another thread and so I thought I'd answer, even though it has been a very long time. My suspicion is that you're not seeing or the devices aren't sending the IAmRouterToNetwork messages. Most likely this has to do with them going to broadcast addresses and your having bound a specific address. So, the operating system may not be delivering those broadcasts to your LocalDevice. You could try binding the address 0.0.0.0 or just zeros in the subnet bits, like 192.168.0.0
  • Unable to find router to the netwrok

    3
    0 Votes
    3 Posts
    2k Views
    phildunlapP
    Hi gquiroz, no need to post it twice. That would suggest to me that the local network number of your configured local device (/system_settings.shtm BACnet Local Devices section) is not 42, and so when the local device wishes to send a message to network 42, it doesn't believe that's the network that it is on, so it looks to see if another device has let the network know that IAmRouterToNetwork 42, which it doesn't find as having happened. What is the local device's network number set to (and it's bind address while we're at it)? Have you tried setting it to 42? When you use the discovery tool, do you find the devices you're expecting?
  • support multiple BBMD Routers/networks over 1 NIC

    10
    0 Votes
    10 Posts
    3k Views
    phildunlapP
    For posterity: another solution was proposed to add more network addresses to the adapter (which both Windows and Linux support), such that they could bind that address and the standard port.
  • Purpose of remote device cache

    2
    0 Votes
    2 Posts
    1k Views
    phildunlapP
    Hi Joshua, It should mostly be managed for you, but you'll probably not get a definite answer to this open-ended question, as the original author of BACnet4J hasn't posted on the forum in quite a while. I know a significant part of its use it to ensure a device configured expecting to be able to find a remote device doesn't flood the network trying to discover it over and over again (assuming the remote device isn't responding). But, you'd have to see how it's used to see the purpose of its design. I wouldn't expect a complete set of declarative sentences to avail itself.
  • Invalid Data Type

    3
    0 Votes
    3 Posts
    2k Views
    J
    @phildunlap Perfect, thank you. Not sure how I missed that file before, but it will be extremely useful in the future. Cheers!
  • Proprietary properties

    2
    0 Votes
    2 Posts
    1k Views
    phildunlapP
    Hi carnecro, Not that I'm aware of. Are you defined custom objects or just properties? I think (and I haven't tried it so I'm not sure) that adding your Objects into com.serotonin.bacnet4j.type.enumerated.ObjectType , your properties into com.serotonin.bacnet4j.type.enumerated.PropertyIdentifier , and their relationship with each other and transmittable data types into com.serotonin.bacnet4j.obj.ObjectProperties you will be well on the way. I didn't see any obvious ways for runtime modification of these mostly static classes and their relationships.
  • Crash after receiving IAmRequest NPDU

    4
    0 Votes
    4 Posts
    2k Views
    phildunlapP
    Certainly! Thanks for sharing the resolution!
  • BACnet4J + Android Things

    7
    0 Votes
    7 Posts
    3k Views
    phildunlapP
    Sure. I meant that as an aside to anyone who may stumble onto this thread and was in need of something like connecting a mstp network and an ip network; to say there is not to my knowledge any prebuilt MSTP-IP converter functionality in the LocalDevice code. Could also have been a useful inclusion if I didn't fully understand your ambition. The sentence does being with 'if' :D
  • Fail to receive 'I am' response

    6
    0 Votes
    6 Posts
    3k Views
    phildunlapP
    It's operating system dependent. As you observed Windows worked with the exact address bound, but Linux did not. I would suspect you could make Linux work with the exact address bound too, if you configure its receiving of the broadcasts. Those are the only three options that really make sense to try, so it's usually not a big deal to do trial and error.
  • Test sample don't compile, please update

    20
    0 Votes
    20 Posts
    7k Views
    phildunlapP
    Do you mean WhoIsRequest? You could elect to send another WhoIs in certain situations (such as not finding all the devices you expect, on a timer, etc) but you'll note that the LocalDevice::getRemoteDevice method calls RemoteDeviceFinder.findDevice (at least in the most recent version of it) which will specifically send the WhoIs for that device. Recall that there is the device cache in the local device to prevent retrying device resolution over and over rapidly if a device isn't found.