# Enumeration of BACnet MultiState Points

**URL:** <https://forum.inductiveautomation.com/t/enumeration-of-bacnet-multistate-points/70252>\
**Category:** Ignition\
**Created:** [February 23, 2023, 10:48pm UTC](https://forum.inductiveautomation.com/t/enumeration-of-bacnet-multistate-points/70252 "2023-02-23T22:48:35Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Craig\_Rathbone](https://avatars.discourse-cdn.com/v4/letter/c/3ec8ea/32.png) [@Craig\_Rathbone](https://forum.inductiveautomation.com/u/Craig_Rathbone)\
**Post date:** [February 23, 2023, 10:48pm UTC](https://forum.inductiveautomation.com/t/enumeration-of-bacnet-multistate-points/70252/1 "2023-02-23T22:48:35Z")

</div>

Hi,  
I'm building UDTs for our sites that have Siemens PXC BACnet controllers on them. One datatype we have is a fair few MultiStateValue points. The driver currently lets me pull out ALMOST everything (current value, alarm state, priority array etc. etc.) however there is no path to the state\_text which has the controller enumeration of each state value:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/4/8/4879ce55475d39c8269b9c3d58190252967b091f.png)

All the examples of MultiState points I can find online on Bacnet BMS devices show State\_Text as being the location of the enumeration. Ignition has a reference to Present\_Value.EnumStrings which on everything I have here on site returns a Null:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/e/4/e4902b9636545c002f4e719b5cf91dfa73e096ae.png)

To work around this at the moment I have added a dataset within my UDT for the enumeration mapping, but this is a manual step to fill in the data. it would be preferable to have it access the actual enumerations in the controller at runtime (just in case something changes in the field), can this state\_text be configured to be available in the BACnet driver or am I missing an obvious way to access this??

Happy to help test if needed!  
(Running 8.1.25)

---

<div class="post-metadata">

**Author:** ![Craig\_Rathbone](https://avatars.discourse-cdn.com/v4/letter/c/3ec8ea/32.png) [@Craig\_Rathbone](https://forum.inductiveautomation.com/u/Craig_Rathbone)\
**Post date:** [February 27, 2023, 8:41pm UTC](https://forum.inductiveautomation.com/t/enumeration-of-bacnet-multistate-points/70252/2 "2023-02-27T20:41:57Z")

</div>

Workaround found using system.bacnet.readRaw():

I have a subtag called PointState in this UDT that holds the Present\_Value integer.  
In the onchange script I have used system.bacnet.readRaw() to read the State\_text object and put it in to my array in the UDT sub tag (text array) called StateEnum

```auto
	sController=tag['parameters']['ControllerName']
	iObjectID=int(tag['parameters']['PointNumber'])

	iObjectType=system.bacnet.enumerated.ObjectType.multiStateValue
	StateText=system.bacnet.enumerated.PropertyIdentifier.stateText
	
	#enumerate the state						
	arrayStateText=system.bacnet.readRaw(sController, iObjectType, iObjectID, StateText)

	arrayList=[]
	for line in arrayStateText:
		arrayList.append(line)

	if arrayList:
		system.tag.write("[.]StateEnum",arrayList)

```

As I run this without checking if it's an initial change it propagates as soon as the tag is refreshed and also any time the pointstate changes.

I also do this with PriorityArray values and using bacnet.writeRaw as bacnet.writeWithPriority does not work on my multistate values if I need to set the Priority Array from 8 back to 14 (placing tag value back in to auto):

```auto
#Unset Priority Array (Place in to Default mode)|
system.bacnet.writeRaw(sController,iObjectType,iObjectID,ipresentValue,None,8)|

```

Hope this helps somebody someday!
