56 lines
2.4 KiB
Plaintext
56 lines
2.4 KiB
Plaintext
def update_alarms_in_udts(root_path):
|
|
"""This script will update all the alarms under a base path so that the
|
|
alarm is enabled based on the depth from the UDT and the other Meta tag bindings are updated accordingly."""
|
|
|
|
def get_relative_meta_path(depth):
|
|
if depth <= 1:
|
|
return "[.]Meta/"
|
|
return "[.]" + "../" * (depth - 1) + "Meta/"
|
|
|
|
def update_alarm_config(base_path, path, meta_path):
|
|
"""This function will take a tag path as an input and update the alarms with depth-based meta references."""
|
|
configs = system.tag.getConfiguration(path, False)
|
|
|
|
for config in configs:
|
|
if "alarms" in config:
|
|
for alarm in config["alarms"]:
|
|
print alarm
|
|
alarm["Building"] = {"bindType": "Tag", "value": meta_path + "Building"}
|
|
alarm["EqName"] = {"bindType": "Tag", "value": meta_path + "EqName"}
|
|
alarm["AreaServed"] = {"bindType": "Tag", "value": meta_path + "Area Served"}
|
|
alarm["Room"] = {"bindType": "Tag", "value": meta_path + "Room"}
|
|
if "enabled" not in alarm or alarm['enabled']==True:
|
|
alarm["enabled"] = {"bindType": "Tag", "value": meta_path + "Alarms Enabled"}
|
|
else:
|
|
# Check to see if the alarm if false. If false, skip edit.
|
|
if alarm["enabled"]:
|
|
enable_condition = str(alarm["enabled"]["value"])
|
|
alarm["enabled"] = {"bindType": "Expression", "value": "{%sAlarms Enabled} && {%s}" % (meta_path, enable_condition)}
|
|
# take the tag path and use in the expression
|
|
# u'enabled': {u'bindType': u'Expression', u'value': u'{[.]../Meta/Alarms Enabled} && {[.]Communcation Loss}'}
|
|
system.tag.configure(base_path, config, "o")
|
|
print "Updated tag: %s" % config["path"]
|
|
else:
|
|
print "\nERROR: Tag has no alarms: %s\n" % config["path"]
|
|
|
|
def recurse_tags(base_path, udt_depth):
|
|
"""Recursively browse tags and update alarms with respect to UDT depth."""
|
|
tags = system.tag.browse(base_path)
|
|
|
|
for tag in tags:
|
|
tag_type = str(tag["tagType"])
|
|
has_children = tag["hasChildren"]
|
|
full_path = tag["fullPath"]
|
|
|
|
if tag_type == "UdtType":
|
|
# Entering a new UDT, so depth resets to 1
|
|
recurse_tags(full_path, 1)
|
|
elif tag_type == "AtomicTag" and "alarm" in tag["attributes"]:
|
|
meta_path = get_relative_meta_path(udt_depth)
|
|
update_alarm_config(base_path, full_path, meta_path)
|
|
elif has_children:
|
|
# Descending deeper from current UDT level
|
|
recurse_tags(full_path, udt_depth + 1)
|
|
|
|
recurse_tags(root_path, 0)
|
|
|