53 lines
2.4 KiB
Plaintext
53 lines
2.4 KiB
Plaintext
def main(originalDeviceTagpaths, deviceTagpaths, tagsToRead, tagToWrite):
|
|
"""
|
|
originalDeviceTagpaths: List; a list of qualified tagpaths without their provider remapped.
|
|
deviceTagpaths: List; a list of qualified device tagpaths, i.e ['[default]RM2505/PHXA2_RM2505_FCU_4'].
|
|
tagsToRead: List; a list of atomic tag names, i.e ['/Meta/EqName', '/Space Temperature', '/System Mode']
|
|
tagToWrite: String; the tagPath of where to write the device data, i.e '[PHXA2_IG_COMN]System/VAV' where the tag is a DynamicDeviceSet
|
|
"""
|
|
# Format the atomic tag name from a full tagpath. i.e:
|
|
# "[PHXA2_IG_COMN]RM224/[..]/RTU_01/Space Temperature" -> "spaceTemperature"
|
|
def getTagName(tagPath):
|
|
name = tagPath.split('/')[-1]
|
|
words = name.split()
|
|
return words[0].lower() + ''.join(word.capitalize() for word in words[1:])
|
|
|
|
# Append atomic tag names to each device, returning a fully qualified tagpath.
|
|
tagPaths = []
|
|
for device in deviceTagpaths:
|
|
for tag in tagsToRead:
|
|
tagPaths.append(str(device) + str(tag))
|
|
|
|
tagsPerDevice = len(tagsToRead)
|
|
tagData = system.tag.readBlocking(tagPaths)
|
|
logger = system.util.getLogger('Tagpaths Script')
|
|
|
|
# batch read alarm status
|
|
activeAlarmsTagpaths = list(map(lambda x: str(x) + '/AlarmSummary/ActiveAlarms', tagPaths)) # Generate tagPaths to ActiveAlarms.
|
|
activeAlarmData = system.tag.readBlocking(activeAlarmsTagpaths) # Read tag data.
|
|
activeAlarmData = [x.value for x in activeAlarmData] # Get .value from each QualifiedObject.
|
|
activeAlarmData = list(map(lambda x: len(x.keys()) != 0, activeAlarmData)) # Check if length > 0, if true, device isAlarmed.
|
|
|
|
res = []
|
|
for batchIndex in range(len(tagPaths) / tagsPerDevice): # read all tags per device
|
|
startIndex = batchIndex * tagsPerDevice
|
|
endIndex = startIndex + tagsPerDevice
|
|
val = {'value': {}, 'style': {}}
|
|
|
|
# If device is alarmed, highlight red.
|
|
val['style'] = {'backgroundColor': '#FF4747', 'color': 'white'} if activeAlarmData[batchIndex] else {}
|
|
|
|
# Map original tagpath without tag provider reassigned.
|
|
# This is necessary for the L4 popup.
|
|
originalTagpath = originalDeviceTagpaths[batchIndex]
|
|
val['value']['tagPath'] = originalTagpath
|
|
|
|
# Map tag name to respective tag value.
|
|
for i in range(startIndex, endIndex):
|
|
tagName = getTagName(tagPaths[i])
|
|
tagValue = tagData[i].value
|
|
val['value'][tagName] = tagValue
|
|
|
|
res.append(val)
|
|
|
|
system.tag.writeBlocking(tagToWrite, system.util.jsonEncode(res)) |