Global name 'status_red' is not defined

And you can edit comments to fix formatting instead of reposting the same thing… ):

ah, sorry everyone.

I think you need to change the bottom part (starting line 64) to:

	data = [{"value": unit, "style": {"classes": color}}
				,{"value": company, "style": {"classes": color}}
				,{"value": location, "style": {"classes": color}}
				,{"value": volts, "style": {"classes": color}}]
	ds.append(data)

Previously you were setting the style key to a value, whereas the value of the style key should be a dictionary/object with keys within it.

You also have a large number of singular tag reads in the script which will significantly impact performance, especially if you have a reasonable number of units. You should consider changing this to read tags all at once and then process the values. As a point of reference, I changed a colleague’s script from reading 5 tags at once, many times over in a loop, to reading all tags at once and it reduced the script runtime to something like 2% of the time.

You’re a genius, it worked, and it took only seconds, on vision it would take like 2 minutes. Thanks all for the help, especially you.jake

It could be much faster than seconds, you could get this down to ms :slight_smile:

Trust me, with vision being so slow this is ridiculously fast. I actually had code to change the button so people knew they had hit it and it would change back after words.

One last thing, I have the columns setup in the table, but they are showing up as column_1 - column_4. Do I need to do something special?Thx, jake

Try this (completely untested, and I haven’t replaced the reads in the getColor function either):

def Load(caller):
	units_tag = caller.session.props.auth.user.userName
	hide_customer = False;
	if units_tag == 'TOPSDemo':
		hide_customer = True
	
	units = system.tag.readBlocking(['[default]' + units_tag + '/Units'])[0].value.split(',')
	
	unitList = caller.getSibling("Units")
	#ds = system.dataset.clearDataset(unitList.props.data)
	ds = []

    units_enabled = [tag.value for tag in system.tag.readBlocking(['[default]' + unit + '.enabled' for unit in units]))
    units_comploc = [tag.value for tag in system.tag.readBlocking(['[default]Disabled-' + unit for unit in units]))
    units_company = [tag.value for tag in system.tag.readBlocking(['[default]' + unit + '/Company' for unit in units]))
    units_location = [tag.value for tag in system.tag.readBlocking(['[default]' + unit + '/Location' for unit in units]))
    units_compv = [tag.value for tag in system.tag.readBlocking(['[default]' + unit + '/CompMainsVoltage' for unit in units]))

	for idx, unit in enumerate(units):
		#system.gui.messageBox(unit)
		color = GetColor(unit)
		company = ""
		location = ""
		volts = ""
		d = units_enabled[idx] #system.tag.readBlocking(['[default]' + unit + '.enabled'])[0].value
		if d == False:
			comploc = units_comploc[idx] #system.tag.readBlocking(['[default]Disabled-' + unit])[0].value.split(',')
			company = comploc[0]
			location = comploc[1]
			volts = "NA"
		else:
			if hide_customer == True:
				company = 'NA'
				location = 'NA'
			else:
				company = units_company[idx] #system.tag.readBlocking(['[default]' + unit + '/Company'])[0].value
				location = units_location[idx] #system.tag.readBlocking(['[default]' + unit + '/Location'])[0].value
			compv = units_compv[idx] #system.tag.readBlocking(['[default]' + unit + '/CompMainsVoltage'])[0]
			if compv and compv.quality.isGood() == True:
				volts = "%4.1f" % compv.value
			else:
				volts = "NA"
		data = [{"value": unit, "style": {"classes": color}}
				,{"value": company, "style": {"classes": color}}
				,{"value": location, "style": {"classes": color}}
				,{"value": volts, "style": {"classes": color}}]
		ds.append(data)

	unitList.props.data = ds

You could go further and combine this into a single read, but this will give a huge improvement as it is

cool, I try that out when optimizations come into play.Thx, any thoughts on the headers not showing up from the controls props?

Whoops, replace this with:

	data = {"Unit": {"value": unit, "style": {"classes": color}}}
			,{"Company": {"value": company, "style": {"classes": color}}}
			,{"Location": {"value": location, "style": {"classes": color}}}
			,{"Volts": {"value": volts, "style": {"classes": color}}}
	ds.append(data)

I edited the other post, removed the outer list brackets []

It doesn’t like it then, the commas confuse it seems like

Silly, I should have replaced the square brackets with curly. Try again, edited post.

That made the list not do anything again. I tried this and it still didn’t work:

unitList.props.data = ds
unitList.props.columns[0].field = "Unit"
unitList.props.columns[0].field = "Company"
unitList.props.columns[0].field = "Location"
unitList.props.columns[0].field = "CompVolts"

It’s really strange.

Got it, thx for the help, this worked, not sure why not before:

		data = {"Unit": {"style": {"classes": color}, "value": unit}
				,"Company": {"style": {"classes": color}, "value": company}
				,"Location": {"style": {"classes": color}, "value": location}
				,"CompVolts": {"style": {"classes": color}, "value": volts}}
1 Like