# The Alarm Ecosystem There are several projects related to alarms, which can work together with AlarmHandlers. ## AlarmNotify [alarm-notify](https://gitlab.elettra.eu/cs/ds/alarm-notify) connect to a list of alarm-handler devices and subscribes for the change event of their alarm attributes. It checks whether there are Recipients configured in individual alarms, or interested in alarms belonging to a group, or all alarms, then builds a list of recipients for each alarm state of each alarm. When an event is received, if there are recipients configured for the new alarm state, a command is triggered on a device for notification. A string parameter with a semicolon-separated list of “key=value” fields is passed to the notification command, with the following keys: ``` name=<_tag_>;handler=<AlarmHandler device>;values=<JSON attribute values>url=<_url_>;msg=<_msg_>;formula=<_formula_>;groups=<_groups_>;shlvd_time=<_shlvd_time_>;state=<Alarm state DevEnum label>;ack=<true|false>;time=<timestamp>; ``` See an example of configuration properties:  ## AlarmManager [alarm-manager](https://gitlab.elettra.eu/cs/ds/alarm-manager) is a Tango device server that supports the configuration of AlarmHandlers. AlarmHandlers are designed to be modular, so that different AlarmManagers can be configured to handle different groups/subsets of AlarmHandlers. AlarmManager can display the selected alarm configuration as attributes (_tag_, _formula_, _message_, _priority_, _group_, _shlvd_time_, _on_delay_, _off_delay_, _on_command_, _off_command_, _receivers_) or can Load/Modify alarms with the configuration provided in the attributes (_tag_, _formula_, _message_, ... same list as above) ## AlarmMail [alarm-mail](https://gitlab.elettra.eu/cs/ds/alarm-mail) is a Tango device server which exports commands able to send emails. Its commands can be configured in _on_command_ and _off_command_ properties (deprecated) or called by AlarmNotify. ## AlarmHandlerGUI [alarm-handler-gui](https://gitlab.elettra.eu/cs/gui/alarm-ng) is the default AlarmHandler GUI at [Elettra](www.elettra.eu). It is designed to display different sets of AlarmHandlers. See:  The different lists of AlarmHandlers to use are taken from free properties. Same properties that can be used to configure AlarmManagers. See:  AlarmHandlerGUI is also able to display and search in alarm history stored by HDB++ (MySQL schema only). See:  ## AlarmManagerGUI [alarm-manager-gui](https://gitlab.elettra.eu/cs/gui/alarm-manager) displays in a tree the list of alarms read from the AlarmManager's _alarmList_ attribute. When an alarm is selected in the tree, AlarmManager's _tag_ and _handler_ are written accordingly and all the other attributes contain the updated configuration, see:  This can then be modified or loaded as a new alarm if the _tag_ attribute has changed. ## HDB++ [EventSubscriber](https://gitlab.com/tango-controls/hdbpp/hdbpp-es) can be used to store alarm history: alarm are exported by the AlarmHandler interface as DevEnum attributes whose change and archive events are pushed in the code at any variation. The configuration of HDB++ is independent of the AlarmHandlers, but also AlarmManagerGUI can also do this. ## PANIC [PANIC](https://gitlab.com/tango-controls/panic) is the Alarm System developed at [Alba](https://www.cells.es). Preliminary work has been done to support AlarmHandler as an alarm formula evaluation device for PANIC. Specifically, the _alarmSummary_ attribute, GetAlarmInfo command and alarm Devenum attributes are compatible between the two systems. PANIC should also be able of handle the configuation of AlarmHandlers in attribute properties, but the work has not yet been finalized.