Panic alarm system
Leads
Contributors
Description
Description
PANIC is a set of tools (api, Tango device server, user interface) that provides:
- Periodic evaluation of a set of conditions.
- Notification (email, sms, pop-up, speakers)
- Keep a log of what happened. (files, Tango Snapshots)
- Taking automated actions (Tango commands / attributes)
- Tools for configuration/visualization.
Documentation
- PANIC on github: https://github.com/tango-controls/PANIC
- Panic Recipes on github
- PANIC presentation at PCAPAC'14: Panic Talk at PCAPAC'14
- The Panic python API: PanicAPI Object
- The PyAlarm User Guide: PyAlarm Device Server User Guide
- The Panic 0.x UI manual: panicdoc.html
Launch your PANIC System in few steps
Dependencies:
You must have PyTango + Tango + MySQL up and running and your TANGO_HOST and PYTHONPATH environment variables properly set.
PyTango is available at PyPI: https://pypi.python.org/pypi/PyTango
Get the code:
You can download PyAlarm and the panic api from tango-ds at sourceforge:
svn co https://svn.code.sf.net/p/tango-ds/code/DeviceClasses/SoftwareSystem/PyAlarm/trunk .
Fandango library (functional tools for tango) is required to be in your PYTHONPATH:
svn co https://svn.code.sf.net/p/tango-cs/code/share/fandango/trunk/fandango fandango
The PANIC User Interface is available in the /clients branch:
svn co https://svn.code.sf.net/p/tango-ds/code/Clients/python/Panic/trunk panic-gui
Setup your Tango database
Create your devices from a python console (or Jive):
import PyTango
db = PyTango.Database()
def add_new_device(server,klass,device):
dev_info = PyTango.DbDevInfo()
dev_info.name = device
dev_info.klass = klass
dev_info.server = server
get_database().add_device(dev_info)
#Create a PyAlarm device
add_new_device('PyAlarm/1','PyAlarm','test/alarms/1')
#I'll add a simulator, but you can't use TangoTest or whatever device you want:
add_new_device('PySignalSimulator/1','PySignalSimulator','test/sim/1')
db.put_device_property('test/sim/1',{'DynamicAttributes':['A=t%100']})
From shell, launch your PyAlarm and Simulator devices
# python PyAlarm/PyAlarm.py 1 &
# python PySignalSimulator/PySignalSimulator.py 1 &
Create a TEST_ALARM using the API:
import panic
alarms = panic.api()
alarms.add('TEST_ALARM',formula='(test/sim/1/A%15 > 5)',description='test',receivers='your@mail')
Run the panic application and configure your Alarms
python panic-gui/gui.py
See the application manual: http://plone.tango-controls.org/tools/panic/panic-ui/
If you want to see faster changes in the alarm cycle try to set the following configuration values (Tools->Adv.Config): PollingPeriod = 1 AlarmThreshold = 1 AutoReset = 5 |
Notification Services
The syntax for sending an email (from linux, you'll need the "mail" command available in the system, from windows you'll have to set as receiver a command from a device running in a linux machine):
DeviceProxy("your/alarm/device").command_inout("SendMail",["Bonjour,\n\nthis is a test message\n\nau revoire","RE: testing","your-name@tango-controls.org"])
The other command we have for notification is SendSMS; but it requires our smslib.py file that is specific to our SMS provider (it uses http transactions to send the messages). If you're interested on it you'll have to write your own smslib.py file to use it.
FestivalDS, Speech and pop-ups
There's another notification device you can use, the FestivalDS. It provides speech synthesizing and pop-ups in a linux environment (it requires "festival" and "libnotify-bin" linux packages):
https://svn.code.sf.net/p/tango-ds/code/DeviceClasses/InputOutput/FestivalDS/trunk
The commands are
Play(string): speech to speakers
Beep(): beep!
Play_sequence(string): it just makes some beeps before and after the speech
PopUp(title,text,[seconds]): shows a pop-up with title/text for the given time
And that's all regarding our current notifiers, for database we don't have anything yet, as we use the device properties to store all the data. You'll find more information in the PyAlarm user guide.