• 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 a encodable value in a array

    BACnet4J general discussion
    2
    15
    6.8k
    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
      Jbacnet
      last edited by

      Hello ,
      I try to read encodable value in a array with

      
      ReadPropertyRequest(ObjectIdentifier objectIdentifier, PropertyIdentifier propertyIdentifier,
                  UnsignedInteger propertyArrayIndex)
      
      

      For an ack requred in notification class i get

      [list]
      com.serotonin.bacnet4j.exception.ErrorAPDUException: ErrorAPDU(choice=12, errorClass=Property, errorCode=Property is not an array)
      at com.serotonin.bacnet4j.LocalDevice.send(LocalDevice.java:434)
      at com.serotonin.bacnet4j.LocalDevice.send(LocalDevice.java:415)
      at com.serotonin.bacnet4j.LocalDevice.send(LocalDevice.java:408)
      at com.sauter_controls.jbacnet.Test.read(Test.java:432)
      at com.sauter_controls.jbacnet.Test.startTest(Test.java:312)
      at com.sauter_controls.jbacnet.Test.<init>(Test.java:94)
      at com.sauter_controls.jbacnet.Test.main(Test.java:75)
      Exception in thread "main" java.lang.NullPointerException
      at com.sauter_controls.jbacnet.Test.read(Test.java:445)
      at com.sauter_controls.jbacnet.Test.startTest(Test.java:312)
      at com.sauter_controls.jbacnet.Test.<init>(Test.java:94)
      at com.sauter_controls.jbacnet.Test.main(Test.java:75)
      [/list]

      For an priority array in Analog output i get

      [list]

      com.serotonin.bacnet4j.exception.BACnetErrorException: Property: Property is not a list
      at com.serotonin.bacnet4j.type.Encodable.readEncodable(Encodable.java:307)
      at com.serotonin.bacnet4j.service.acknowledgement.ReadPropertyAck.<init>(ReadPropertyAck.java:88)
      at com.serotonin.bacnet4j.service.acknowledgement.AcknowledgementService.createAcknowledgementService(AcknowledgementService.java:46)
      at com.serotonin.bacnet4j.apdu.ComplexACK.parseServiceData(ComplexACK.java:191)
      at com.serotonin.bacnet4j.npdu.ip.IpMessageControl.waitForAck(IpMessageControl.java:681)
      at com.serotonin.bacnet4j.npdu.ip.IpMessageControl.send(IpMessageControl.java:300)
      at com.serotonin.bacnet4j.npdu.ip.IpMessageControl.send(IpMessageControl.java:280)
      at com.serotonin.bacnet4j.npdu.ip.IpMessageControl.send(IpMessageControl.java:237)
      at com.serotonin.bacnet4j.LocalDevice.send(LocalDevice.java:425)
      at com.serotonin.bacnet4j.LocalDevice.send(LocalDevice.java:415)
      at com.serotonin.bacnet4j.LocalDevice.send(LocalDevice.java:408)
      at com.sauter_controls.jbacnet.Test.read(Test.java:432)
      at com.sauter_controls.jbacnet.Test.startTest(Test.java:312)
      at com.sauter_controls.jbacnet.Test.<init>(Test.java:94)
      at com.sauter_controls.jbacnet.Test.main(Test.java:75)

      [/list]

      In the class encodable is that ok ?

      
      
              if (propertyArrayIndex != null && !def.isSequence())
              	//return readWrapped(queue, def.getClazz(), contextId);
                  throw new BACnetErrorException(ErrorClass.property, ErrorCode.propertyIsNotAList);
      
      
      

      My code :

      
      		int deviceID = dataForTestAliases.getDev().getInstanceNumber();
      		int objectID = dataForTestAliases.getRo().getObjectIdentifier().getInstanceNumber();
      		int property = dataForTestAliases.getProperty();
      		String index = dataForTestAliases.getIndex();
      		PropertyIdentifier pid = new PropertyIdentifier(property);
      		Encodable value ;
      		ReadPropertyAck readAck = null;
      		try {
      			if (!index.equals("NONE")){	
      				readAck = (ReadPropertyAck) bnet.getLocalDevice().send(dataForTestAliases.getDev(), 
      					new ReadPropertyRequest(dataForTestAliases.getRo().getObjectIdentifier(), pid,
      							new UnsignedInteger(Integer.parseInt(dataForTestAliases.getIndex()))));
      			}
      			else {
      				
      				readAck = (ReadPropertyAck) bnet.getLocalDevice().send(dataForTestAliases.getDev(), 
      						new ReadPropertyRequest(dataForTestAliases.getRo().getObjectIdentifier(), pid));
      			}
      		} catch (BACnetException e2) {
      			// TODO Auto-generated catch block
      			e2.printStackTrace();
      		}
      		value = readAck.getValue();
      

      Thanks for your help

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

        I can't tell what properties you are trying to read, so i can't validate what you are trying to do. Can you provide object types (you said one was AnalogOutput), property identifiers, and property indices?

        Best regards,
        Matthew

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

          
          #alias		device	device ip				obj-type	instance	property	index	format	priority
          dp1			525		192.168.10.149:47808	0			1019		85			NONE	real	8
          dp2			525		192.168.10.149:47808	0			1113		85			NONE	real	8
          dp3 		525		192.168.10.149:47808	1			1000		85			NONE	real	8
          dp3_prio8 	525		192.168.10.149:47808	1			1000		87			8		real	8
          noti1_size	525		192.168.10.149:47808	15			1			1			0		unsigned	8
          noti1_1		525		192.168.10.149:47808	15			1			1			1		unsigned	8
          noti1_2		525		192.168.10.149:47808	15			1			1			2		unsigned	8
          noti1_3		525		192.168.10.149:47808	15			1			1			3		unsigned	8
          

          dp3_prio8 is the analog output index 8
          noti1 the notification class (all index)

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

            For "dp3_prio8", a priority array is an object, not a sequence. It's a tricky thing i guess because the object happens to be a type of a sequence (accessed as an array), but i suppose you need to request the object without an index, cast to a PriorityArray, and then pull the value you want out of it.

            For "noti1", similar problem. The property is a bit string, not a sequence. Solution is similar to above.

            Best regards,
            Matthew

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

              but i suppose you need to request the object without an index

              I need just one value , the value Priorityarray.get(index)

              Bacnet4j should be able to do that ?

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

                Like this:

                
                        ReadPropertyRequest req = new ReadPropertyRequest(new ObjectIdentifier(ObjectType.analogOutput, 1234),
                                PropertyIdentifier.priorityArray);
                        ReadPropertyAck ack = localDevice.send(remoteDevice, req);
                        PriorityArray priorityArray = (PriorityArray) ack.getValue();
                        int priority = priorityArray.get(16).getIntegerValue().intValue();
                
                

                Best regards,
                Matthew

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

                  Note that it is the remote device that is imposing this, not BACnet4J (unless BACnet4J is the implementation in the remote device). The error message about "Property is not an array/list" is being returned by the equipment, which is why you need to do it this way.

                  Best regards,
                  Matthew

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

                    Please see the attached file that show the equipement answer.

                    The error is created by the stack, because of the PriorityArray is not a sequence

                     add(ObjectType.analogOutput, PropertyIdentifier.priorityArray, PriorityArray.class, false, true,  new PriorityArray());
                    
                    

                    Attachment: download link

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

                      Ah, i see. Can you send me the full byte stream and i'll take a look.

                      Best regards,
                      Matthew

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

                        Yes Monday (or tomorrow) i can send you the full byte stream (I have not the station here sorry)

                        Thanks for help and good week-end !

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

                          No problem. If you can please include the request byte stream as well, that may be useful.

                          Best regards,
                          Matthew

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

                            This is my wireshark capture

                            see #21 in this capture.

                            Thanks

                            Attachment: download link

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

                              K. I think it should be better now. This was an issue only with PriorityArray i believe. Changes have been checked into CVS. Please let me know if it helps.

                              Best regards,
                              Matthew

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

                                Thanks it's help !

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