]> jspc29.x-matter.uni-frankfurt.de Git - mvd_epics.git/commitdiff
DASH: dynamic status updates from EPICS CA
authorOle Artz <ole.artz@t-online.de>
Wed, 2 Aug 2017 13:35:16 +0000 (15:35 +0200)
committerOle Artz <ole.artz@t-online.de>
Wed, 2 Aug 2017 13:35:16 +0000 (15:35 +0200)
python_suite/dashboard/.gitignore [new file with mode: 0644]
python_suite/dashboard/dashboard.py
python_suite/dashboard/example.config.json [new file with mode: 0644]
python_suite/dashboard/views/pv_overview.jinja2

diff --git a/python_suite/dashboard/.gitignore b/python_suite/dashboard/.gitignore
new file mode 100644 (file)
index 0000000..d344ba6
--- /dev/null
@@ -0,0 +1 @@
+config.json
index 8d41242dd71a1e3f8c95a78c78f247b61ad5fef3..f43c7b1837a0f11d031ad6dacd390f7b206a76cc 100755 (executable)
@@ -1,15 +1,50 @@
 #!/usr/bin/env python
 
+import json
+import epics
+
 from bottle import route, run, static_file
 from bottle import jinja2_view as view
 
+CONFIG = None
+
 @route('/')
 @view('pv_overview.jinja2')
 def index():
-    return {}
+    global CONFIG
+    for group in CONFIG['groups']:
+        for pv in group['PVs']:
+            p = epics.PV(pv['name'])
+            p.get_ctrlvars()
+            if 'enum' in p.type:
+                pv['value'] = p.get(as_string=True)
+            else:
+                pv['value'] = p.get()
+            pv['unit'] = p.units or ''
+    return CONFIG
 
 @route('/static/<path:path>')
 def static_content(path):
     return static_file(path, root='./static/')
 
-run(host='', port=8080)
+def main():
+    global CONFIG
+
+    import argparse
+    parser = argparse.ArgumentParser()
+    parser.add_argument('--host', default='',
+          help='The host (IP address) the web server should listen on.')
+    parser.add_argument('--port', default=4913,
+          help='The port the web server should listen on.')
+    parser.add_argument('--config', '-c', required=True,
+          help='The config file with the definition of process variables and EPICS hosts.')
+    parser.add_argument('--debug', action='store_true',
+          help='Set the debug mode of the web server.')
+    args = parser.parse_args()
+
+    with open(args.config, 'r') as f:
+        CONFIG = json.load(f)
+
+    run(host=args.host, port=args.port, debug=args.debug)
+
+if __name__ == "__main__": main()
diff --git a/python_suite/dashboard/example.config.json b/python_suite/dashboard/example.config.json
new file mode 100644 (file)
index 0000000..8fb5bd0
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "groups": [
+               {
+                       "name": "Cooling",
+                       "PVs": [
+                               {"name": "CBM:MVD:COOLING:CC405:BathTemperatureMom"},
+                               {"name": "CBM:MVD:COOLING:CC405:ExternalTemperatureMom"}
+                               ]
+               },
+               {
+                       "name": "Pressure",
+                       "PVs": [
+                               {"name": "CBM:MVD:VACUUM:PRESTO_RECIPIENT:A:TPR2:Voltage"},
+                               {"name": "CBM:MVD:VACUUM:RECIPIENT:3:Pressure"},
+                               {"name": "CBM:MVD:VACUUM:RECIPIENT:3:Status"}
+                               ]
+               }
+  ]
+}
index 13ff0c2d2d664f60cf47bd24233e56eb6c0ff85a..90dd9e9c15afdef1c2a6bf9f392fb48df77f78a2 100644 (file)
@@ -37,9 +37,9 @@
                        <br/>of the Compressed Baryonic Matter</h1>
                </div>
                <div id="PVs">
-                       <div id="Cooling">
-                               <h2>Cooling</h2>
-                                       <p>HUBER_COOLING</p>
+                       {% for group in groups %}
+                       <div id="{{ group.name }}">
+                               <h2>{{ group.name }}</h2>
                                         <table style="width:100%">
                                                <colgroup>
                                                        <col span="1" style="width: 60%;">
                                                        <th>Value</th>
                                                        <th>Unit</th>
                                                </tr>
+                                               {% for PV in group.PVs %}
                                                <tr>
-                                                       <td>Bath Temperature Momentum</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>External Temperature Momentum</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>Current Setpoint Value</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                       </table>
-                                       <p>FLOW_METER</p>
-                                               <table style="width:100%">
-                                               <colgroup>
-                                                       <col span="1" style="width: 60%;">
-                                                       <col span="1" style="width: 25%;">
-                                                       <col span="1" style="width: 15%;">
-                                               </colgroup>
-                                               <tr>
-                                                       <th>Process Variable</th>
-                                                       <th>Value</th>
-                                                       <th>Unit</th>
-                                               </tr>
-                                               <tr>
-                                                       <td>Flow Input</td>
-                                                       <td></td>
-                                                       <td>l/min</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>Flow Output</td>
-                                                       <td></td>
-                                                       <td>l/min</td>
-                                               </tr>
-                                       </table>
-                       </div>
-                       <div id="Pressure">
-                               <h2>Pressure</h2>
-                                       <p>BALZERS_PKG020</p>                   
-                                       <table style="width:100%">
-                                               <colgroup>
-                                                       <col span="1" style="width: 60%;">
-                                                       <col span="1" style="width: 25%;">
-                                                       <col span="1" style="width: 15%;">
-                                               </colgroup>
-                                               <tr>
-                                                       <th>Process Variable</th>
-                                                       <th>Value</th>
-                                                       <th>Unit</th>
-                                               </tr>
-                                               <tr>
-                                                       <td>Side A - IKR Voltage </td>
-                                                       <td></td>
-                                                       <td>V</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>Side A - TPR2 Voltage</td>
-                                                       <td></td>
-                                                       <td>V</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>Side B - IKR Voltage</td>
-                                                       <td></td>
-                                                       <td>V</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>Side B - TPR2 Voltage</td>
-                                                       <td></td>
-                                                       <td>V</td>
-                                               </tr>
-
-                                       </table>
-                                       <p>VACOM_MVC3</p>
-                       </div>
-                       <div id="Temperature">
-                               <h2>Temperature</h2>
-                                       <p>PT100_BOARD</p>
-                                       <table style="width:100%">
-                                               <colgroup>
-                                                       <col span="1" style="width: 60%;">
-                                                       <col span="1" style="width: 25%;">
-                                                       <col span="1" style="width: 15%;">
-                                               </colgroup>
-                                               <tr>
-                                                       <th>Process Variable</th>
-                                                       <th>Value</th>
-                                                       <th>Unit</th>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 00</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 01</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 02</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 03</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 04</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 05</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 06</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 07</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 08</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 09</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 10</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 11</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 12</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 13</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 14</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 15</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 16</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
-                                               </tr>
-                                               <tr>
-                                                       <td>ID 17</td>
-                                                       <td></td>
-                                                       <td>&#176 C</td>
+                                                       <td>{{ PV.name }}</td>
+                                                       <td>{{ PV.value }}</td>
+                                                       <td>{{ PV.unit }}</td>
                                                </tr>
+                                               {% endfor %}
                                        </table>
                        </div>
+                       {% endfor %}
                </div>
 <hr/>
                <div id="footnote">