20260505 Backup
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
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))
|
||||
Reference in New Issue
Block a user