MangoAutomation / BACnet4J

BACnet/IP stack written in Java. Forked from http://sourceforge.net/projects/bacnet4j/
GNU General Public License v3.0
183 stars 110 forks source link

Error writing multistate property 'stateText' #60

Open envas opened 3 years ago

envas commented 3 years ago

Describe the bug Cannot write multistate property stateText

To Reproduce Steps to reproduce the behavior:

  1. Create a MultistateValue object in a device
  2. Connect a BACnet client and try to update stateText from the client
  3. Error is generated in the device (server)
java.lang.ClassCastException: com.serotonin.bacnet4j.type.constructed.SequenceOf cannot be cast to com.serotonin.bacnet4j.type.constructed.BACnetArray
    at com.serotonin.bacnet4j.obj.mixin.MultistateMixin.validateProperty(MultistateMixin.java:63)
    at com.serotonin.bacnet4j.obj.BACnetObject.writeProperty(BACnetObject.java:481)
    at com.serotonin.bacnet4j.service.confirmed.WritePropertyRequest.handle(WritePropertyRequest.java:102)
    at com.serotonin.bacnet4j.transport.DefaultTransport.handleConfirmedRequest(DefaultTransport.java:870)
    at com.serotonin.bacnet4j.transport.DefaultTransport.incomingConfirmedRequest(DefaultTransport.java:827)
    at com.serotonin.bacnet4j.transport.DefaultTransport.receiveAPDU(DefaultTransport.java:640)
    at com.serotonin.bacnet4j.transport.DefaultTransport.receiveImpl(DefaultTransport.java:578)
    at com.serotonin.bacnet4j.transport.DefaultTransport.run(DefaultTransport.java:498)
    at java.lang.Thread.run(Thread.java:748)

Expected behavior I can update stateText from a BACnet client

I logged the request in 'DeviceEventAdapter.allowPropertyWrite()' listener callback and the Property Value is really of the type SequenceOf. The log from my device (server):

2021-04-16 15:09:03,140 - BACnet write property write request received from=192.168.0.130:0xBAC0
2021-04-16 15:09:03,140 -          object-name  : 71L2Az00_plant_mod
2021-04-16 15:09:03,141 -          object-type  : multi-state-value
2021-04-16 15:09:03,141 -          property     : state-text
2021-04-16 15:09:03,141 -          value        : [Anlage Aus, ON-Optimum Start, Ein-Stützbetrieb, Ein-Nachtkühlung, Ein-Zeitprogramm, Ein-Übersteuerung, Ein-Nachlauf]
2021-04-16 15:09:03,141 -          value-type   : SequenceOf