• Recent
    • Tags
    • Popular
    • Register
    • Login

    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.

    Radix IoT Website Mango 3 Documentation Website Mango 4 Documentation Website Mango 5 Documentation Website

    Read BACnet ObjectValues

    BACnet4J general discussion
    3
    8
    4.5k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      josher
      last edited by

      Hello everyone!
      I am beginning with BACnet4j project. I think it is a great project, so i am very glad with it.
      I am trying to read BACnet object values from my computer with a Java project. My code is:

      
      public class BACnetNetwork {
      	static LocalDevice lDevice;
      	static ResourceBundle resource = ResourceBundle.getBundle("resources/bacnet4j");
      	
      	public BACnetNetwork(){}
      	
      	public static void main(String args[]){
      		initializeDevice();
      	}
      	
      	public static void initializeDevice(){
      		try{
      			System.out.println("Inicializando...");
      			lDevice = new LocalDevice(17800, resource.getString("localDeviceIP"));
      			lDevice.getEventHandler().addListener(new Listener());
      
      			lDevice.initialize();
      			//System.out.println("Remote Devices..."+lDevice.get);
      			
      			@SuppressWarnings("unused")
      			ReadPropertyRequest read = new ReadPropertyRequest(new ObjectIdentifier(ObjectType.analogInput, 243), PropertyIdentifier.presentValue);
      	        getObjectList(lDevice, resource.getString("deviceIP"), Integer.valueOf(resource.getString("port")), 17800);  
      		}catch(Exception e){
      			System.out.println("Error al inicializar "+e.getMessage());
      		}finally{
      			closeDevice();
      		}
      	}
      	
      	public static void closeDevice(){
      		try{
      			lDevice.terminate();
      		}catch(Exception e){
      			System.out.println(e.getMessage());
      		}
      	}
      	
      	private static void getObjectList(LocalDevice localDevice, String ip, int port, int deviceId) throws Exception {  
              InetSocketAddress addr = new InetSocketAddress(InetAddress.getByName(ip), port);
              System.out.println(addr.toString());
             
              ReadPropertyRequest read = new ReadPropertyRequest(new ObjectIdentifier(ObjectType.device, deviceId), PropertyIdentifier.objectList);
              ReadPropertyAck ack = (ReadPropertyAck) localDevice.send(addr, null, 1476, Segmentation.segmentedBoth, read);
              System.out.println("IP: " + ip);
      
              @SuppressWarnings("unchecked")
      		SequenceOf<ObjectIdentifier> oids = (SequenceOf<ObjectIdentifier>) ack.getValue();  
              for (ObjectIdentifier oid : oids) {
                  System.out.println("    " + oid.getObjectType());  
              }  
              
      		PropertyIdentifier pids = (PropertyIdentifier) ack.getValue();  
              System.out.println("    " + pids);    
          } 
      	
      	static class Listener extends DefaultDeviceEventListener {  
              @Override  
              public void iAmReceived(RemoteDevice d) {  
                  System.out.println("I am received" + d);  
              }  
          } 
      

      However, when I run, the output shows:

      
      P: 192.168.107.247
          Device 17800
          Analog Input 0
          Multi-state Input 0
          Analog Input 1
          Trend Log 1
          Trend Log 2
          Trend Log 3
          File 0
      
      

      I have been studying a BACnet frame from Wireshark, but I do not see any value.

      How could I read values from a device?
      Thank you very much!!
      Regards!

      Attachment: download link

      1 Reply Last reply Reply Quote 0
      • M
        mlohbihler
        last edited by

        BACnet4J does not store present values for objects. You need to request them using ReadProperty or ReadPropertyMultiple requests, asking objects for their present value property.

        Best regards,
        Matthew

        1 Reply Last reply Reply Quote 0
        • J
          josher
          last edited by

          @mlohbihler said:

          BACnet4J does not store present values for objects. You need to request them using ReadProperty or ReadPropertyMultiple requests, asking objects for their present value property.

          But in my code I am already using "ReadPropertyRequest". Another option is "ReadPropertyMultipleRequest"
          Thanks!

          1 Reply Last reply Reply Quote 0
          • M
            mlohbihler
            last edited by

            The only property that you are reading is objectList.

            Best regards,
            Matthew

            1 Reply Last reply Reply Quote 0
            • J
              josher
              last edited by

              @mlohbihler said:

              The only property that you are reading is objectList.

              Ok!! Thank you very much!! I solve the problem. So, do I need send a ReadPropertyRequest and a ReadPropertyAck for each property? I have tried with PropertyIdentifier.all, however it throws an Exception. If I send a request for each property I can see that property, but I think it could be a lot of load in BAcnet network...
              Regards!

              1 Reply Last reply Reply Quote 0
              • M
                mlohbihler
                last edited by

                Using the "all" identifier will often result in an exception because the content is too much to put into a single response. BACnet4J will try to compensate in come cases, but it doesn't always work out.

                You can ask for multiple properties with a ReadPropertyMultiple request, as long as your equipment supports it.

                Best regards,
                Matthew

                1 Reply Last reply Reply Quote 0
                • D
                  djrosu
                  last edited by

                  Hello, I am trying to figure out how to use bacnet4j and this thread is helpful however I am still stuck on the various IP addresses and ports used? Can you explain the difference between resource.getString("localDeviceIP"), resource.getString("deviceIP") and resource.getString("port")? Thanks in advance.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post