--- title: "Alarm Pipeline — Groups, Areas, and Items" tags: [alarm, alarms, alert, notification, group, area, limit, digital, pipeline, monitoring] description: "Configure a complete alarm system: groups for severity, areas for organization, items for individual tag monitoring with limit and digital alarm types" version: "1.0" author: "Tatsoft" ---
Set up a complete alarm system from scratch: Groups for severity classification, Areas for plant organization, and Items for individual tag monitoring with limit-based and digital alarm types.
Set up a complete alarm system from scratch. Alarms watch tag values and trigger notifications when conditions are met. The pipeline is: Groups (severity/behavior) → Areas (organization) → Items (individual monitors).
AlarmsGroups (severity, colors, sounds)
??? AlarmsAreas (plant hierarchy — optional)
??? AlarmsItems (one per tag condition)
??? Watches UnsTags values at runtime
Use this skill when:
Do NOT use this skill when:
skill-edge-ml-pipeline)designer_action('navigate', 'AlarmsMonitor'))Category | Items |
|---|---|
Tools |
|
Tables |
|
Groups define severity levels and shared behavior. Create at least Critical, Warning, and Info.
get_table_schema('AlarmsGroups')
{
"table_type": "AlarmsGroups",
"data": [
{
"Name": "Critical",
"Description": "Immediate action required — safety or equipment risk"
},
{
"Name": "Warning",
"Description": "Attention needed — process approaching limits"
},
{
"Name": "Info",
"Description": "Informational — logged but no immediate action"
}
]
}
Key decisions:
Areas organize alarms by plant location or process unit. They can be nested. Skip this step for simple solutions.
get_table_schema('AlarmsAreas')
{
"table_type": "AlarmsAreas",
"data": [
{
"Name": "Plant",
"Description": "Entire plant"
},
{
"Name": "Plant/Reactor1",
"Description": "Reactor 1 process area"
},
{
"Name": "Plant/Utilities",
"Description": "Utility systems"
}
]
}
Key decision: Area paths mirror the tag folder structure for consistency. Plant/Reactor1 area contains alarms for Plant/Reactor1/* tags.
Each item monitors one tag for one condition. The two main types are Limit (analog thresholds) and Digital (boolean state).
get_table_schema('AlarmsItems')
Limit alarms — trigger when a value exceeds a threshold:
Error rendering macro 'code': Invalid value specified for parameter 'com.atlassian.confluence.ext.code.render.InvalidValueException'{
"table_type": "AlarmsItems",
"data": [
{
"Name": "Reactor1_TempHigh",
"Group": "Critical",
"TagName": "Plant/Reactor1/Temperature",
"Type": "HighLimit",
"Limit": 90.0,
"Description": "Reactor 1 temperature exceeded 90°C"
},
{
"Name": "Reactor1_TempWarn",
"Group": "Warning",
"TagName": "Plant/Reactor1/Temperature",
"Type": "HighLimit",
"Limit": 75.0,
"Description": "Reactor 1 temperature approaching limit (75°C)"
},
{
"Name": "Reactor1_PressureHigh",
"Group": "Critical",
"TagName": "Plant/Reactor1/Pressure",
"Type": "HighLimit",
"Limit": 4.5,
"Description": "Reactor 1 pressure exceeded 4.5 bar"
},
{
"Name": "Reactor1_LevelLow",
"Group": "Warning",
"TagName": "Plant/Reactor1/Level",
"Type": "LowLimit",
"Limit": 10.0,
"Description": "Reactor 1 level below 10%"
}
]
}
Digital alarms — trigger on a boolean tag:
Error rendering macro 'code': Invalid value specified for parameter 'com.atlassian.confluence.ext.code.render.InvalidValueException'{
"table_type": "AlarmsItems",
"data": [
{
"Name": "Reactor1_AnomalyDetected",
"Group": "Warning",
"TagName": "Plant/Reactor1/ML/IsAnomaly",
"Type": "Digital",
"Description": "ML model detected anomaly on Reactor 1"
}
]
}
Key decisions:
Type values: HighLimit, LowLimit, HighHighLimit, LowLowLimit, Digital. Always verify with get_table_schema.Limit is required for limit-type alarms, ignored for digital alarms.Name should be descriptive and unique across all alarm items.get_objects('AlarmsGroups')
get_objects('AlarmsItems')
Then start or hot-reload runtime:
designer_action('hot_reload')
get_objects('AlarmsGroups') — confirm groups exist (Critical, Warning, Info)get_objects('AlarmsItems') — confirm all alarm items are configuredget_designer_state() — no errorsAlarmsMonitor → verify alarms trigger when thresholds are crossedbrowse_namespace('Alarm.Group.Critical') — check alarm counts at runtimeMistake | Why It Happens | How to Avoid |
|---|---|---|
Wrong Type string | Guessing enum values instead of checking schema | Always use exact values from |
Missing TagName | Referencing a tag that doesn't exist yet | Create the tag first in UnsTags before creating the alarm |
Limit on Digital alarm | Setting Limit on a Digital type | Digital alarms ignore Limit — they trigger when boolean tag becomes true |
Duplicate alarm names | Alarm names must be globally unique | Names are unique across the entire solution, not just within a group |
Missing Area assignment | Alarms created without area linkage | Check schema for the exact property name to assign an area |
skill-getting-started — Create tags and simulator (prerequisite)skill-edge-ml-pipeline — Add ML-based anomaly detection that feeds into alarmsskill-historian-configuration — Log alarm history for analysis