Files
Stream_PHX_A7/Gateways/FE/projects/.resources/be98a4708f7c24f4b58ba8caf615f918c9e49a094510c9799b3de48da27e8cb3

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))