--- /dev/null
+config.json
#!/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()
--- /dev/null
+{
+ "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"}
+ ]
+ }
+ ]
+}
<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>° C</td>
- </tr>
- <tr>
- <td>External Temperature Momentum</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>Current Setpoint Value</td>
- <td></td>
- <td>° 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>° C</td>
- </tr>
- <tr>
- <td>ID 01</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 02</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 03</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 04</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 05</td>
- <td></td>
- <td>° C</td>
- </tr>
- </tr>
- <tr>
- <td>ID 06</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 07</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 08</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 09</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 10</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 11</td>
- <td></td>
- <td>° C</td>
- </tr>
- </tr>
- <tr>
- <td>ID 12</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 13</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 14</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 15</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 16</td>
- <td></td>
- <td>° C</td>
- </tr>
- <tr>
- <td>ID 17</td>
- <td></td>
- <td>° C</td>
+ <td>{{ PV.name }}</td>
+ <td>{{ PV.value }}</td>
+ <td>{{ PV.unit }}</td>
</tr>
+ {% endfor %}
</table>
</div>
+ {% endfor %}
</div>
<hr/>
<div id="footnote">