65 lines
1.7 KiB
Plaintext
65 lines
1.7 KiB
Plaintext
import system
|
|
import generate
|
|
|
|
BASE_TAGS = [
|
|
"SetEnable",
|
|
"Color"
|
|
]
|
|
|
|
def getStatus(*args):
|
|
if len(args) % 5 <> 0:
|
|
raise ValueError('Argument list must be a multiple of (path, rowstart, rowend, colstart, colend) pairs')
|
|
groups = [args[i:i+5] for i in range(0, len(args), 5)]
|
|
|
|
# Produce tags:
|
|
tags = []
|
|
for (path, rowstart, rowend, colstart, colend) in groups:
|
|
for col in range(colstart, colend+1):
|
|
for row in range(rowstart, rowend+1):
|
|
spiral = "CH_2{:02d}{:02d}".format(row, col)
|
|
prefix = "[default]"+path+"/"+spiral+"/"+spiral+"/CH/"
|
|
tags.extend([prefix+tag for tag in BASE_TAGS])
|
|
|
|
# Get values
|
|
values = [val for val in system.tag.readBlocking(tags)]
|
|
|
|
# Produce status:
|
|
unknown = 0
|
|
faulted = 0
|
|
disabled = 0
|
|
full = 0
|
|
fullWarn = 0
|
|
jammed = 0
|
|
enabled = 0
|
|
for (SetEnable, Color) in (values[i:i+len(BASE_TAGS)] for i in range(0, len(values), len(BASE_TAGS))):
|
|
# Ignore those that don't have SetEnable:
|
|
if not SetEnable.quality.isBad():
|
|
if SetEnable.quality.isError() or Color.quality.isError():
|
|
unknown += 1
|
|
elif Color.value == 1024:
|
|
faulted += 1
|
|
elif Color.value == 512:
|
|
jammed += 1
|
|
elif not SetEnable.value:
|
|
disabled += 1
|
|
elif Color.value == 128:
|
|
full += 1
|
|
elif Color.value == 64:
|
|
fullWarn += 1
|
|
else:
|
|
enabled += 1
|
|
|
|
|
|
headers = ["status", "count", "percent"]
|
|
total = max(1, float(unknown + faulted + jammed + disabled + full + fullWarn + enabled))
|
|
values = [
|
|
["Enabled", enabled, enabled/total],
|
|
["50% Full", fullWarn, fullWarn/total],
|
|
["100% Full", full, full/total],
|
|
["Disabled", disabled, disabled/total],
|
|
["Jammed", jammed, jammed/total],
|
|
["Faulted", faulted, faulted/total],
|
|
["Unknown", unknown, unknown/total],
|
|
]
|
|
return system.dataset.toDataSet(headers, values)
|