]> jspc29.x-matter.uni-frankfurt.de Git - mvd_epics.git/commitdiff
DASH: huge change of config file structure
authorOle Artz <ole.artz@t-online.de>
Tue, 15 Aug 2017 13:43:02 +0000 (15:43 +0200)
committerOle Artz <ole.artz@t-online.de>
Tue, 15 Aug 2017 13:43:02 +0000 (15:43 +0200)
python_suite/dashboard/dashboard.py
python_suite/dashboard/example.config.json
python_suite/dashboard/views/pv_overview.jinja2

index 6eea4933c62847895f27f7a0e7b07764bcdb1175..a3d957c041cad493e68766a3dd751f80b5546b95 100755 (executable)
@@ -3,7 +3,7 @@
 import json, threading, time
 import epics
 
-from bottle import route, run, static_file
+from bottle import route, run, static_file, redirect, abort
 from bottle import jinja2_view as view
 
 CONFIG = None
@@ -22,62 +22,66 @@ def cb_connection_change(**kwargs):
             p.get_ctrlvars()
             #end = time.time()
             #print("Finished thread for ", kwargs['pvname'], " in ", end-start, " s. Unit: ", p.units)
-            #for group in CONFIG['groups']:
-            #    for pv in group['PVs']:
-            #        if pv['name'] != kwargs['pvname']: continue
-            #        pv['unit'] = p.units or ''
+            #for pv in CONFIG['PVs']:
+            #    if pv['name'] != kwargs['pvname']: continue
+            #    pv['unit'] = p.units or ''
         tid = threading.Thread(target=fetch_ctrlvars)
         tid.daemon = True
         tid.start()
         return
 
     # Otherwise: we are disconnected from the IOC!
-    for group in CONFIG['groups']:
-        for pv in group['PVs']:
-            if pv['name'] != kwargs['pvname']: continue
+    for pv in CONFIG['PVs']:
+        if pv['name'] != kwargs['pvname']: continue
 
-            pv['value'] = '- disconnected -'
-            pv['unit'] = ''
-            pv['classes'] = 'disconnected'
-            pv['precision'] = None
+        pv['value'] = '- disconnected -'
+        pv['unit'] = ''
+        pv['classes'] = 'disconnected'
+        pv['precision'] = None
 
 
 def cb_value_update(**kwargs):
     global CONFIG
-    for group in CONFIG['groups']:
-        for pv in group['PVs']:
-            if pv['name'] != kwargs['pvname']: continue
-
-            class_map = {
-              epics.NO_ALARM :      "",
-              epics.MINOR_ALARM :   "minor_alarm",
-              epics.MAJOR_ALARM :   "major_alarm",
-              epics.INVALID_ALARM : "invalid_alarm",
-              None : "disconnected",
-            }
-            pv['classes'] = class_map[kwargs['severity']]
-            #print(kwargs['pvname'], kwargs['type'])
-            #print(kwargs)
-            if 'enum' in kwargs['type']:
-                if type(kwargs['char_value']) is bytes:
-                     pv['value'] = kwargs['char_value'].decode('ascii')
-                else:
-                     pv['value'] = kwargs['char_value']
+    for pv in CONFIG['PVs']:
+        if pv['name'] != kwargs['pvname']: continue
+
+        class_map = {
+          epics.NO_ALARM :      "",
+          epics.MINOR_ALARM :   "minor_alarm",
+          epics.MAJOR_ALARM :   "major_alarm",
+          epics.INVALID_ALARM : "invalid_alarm",
+          None : "disconnected",
+        }
+        pv['classes'] = class_map[kwargs['severity']]
+        #print(kwargs['pvname'], kwargs['type'])
+        #print(kwargs)
+        if 'enum' in kwargs['type']:
+            if type(kwargs['char_value']) is bytes:
+                 pv['value'] = kwargs['char_value'].decode('ascii')
             else:
-                pv['value'] = kwargs['value']
-            pv['precision'] = kwargs['precision']
-            #if type(kwargs['precision']) == int and ('double' in kwargs['type'] or 'float' in kwargs['type']):
-            #    pv['value'] = round(pv['value'], kwargs['precision'])
-            if kwargs['enum_strs'] == (b'OFF', b'ON'):
-                pv['classes'] += ' switch'
-            if pv['value'] is None: pv['value'] = '- disconnected -'
-            pv['unit'] = kwargs['units'] or ''
-            if pv['unit'] == 'deg C': pv['unit'] = '&degC'
-            if pv['unit'] == 'g/m3': pv['unit'] = 'g/m&sup3'
+                 pv['value'] = kwargs['char_value']
+        else:
+            pv['value'] = kwargs['value']
+        pv['precision'] = kwargs['precision']
+        #if type(kwargs['precision']) == int and ('double' in kwargs['type'] or 'float' in kwargs['type']):
+        #    pv['value'] = round(pv['value'], kwargs['precision'])
+        if kwargs['enum_strs'] == (b'OFF', b'ON'):
+            pv['classes'] += ' switch'
+        if pv['value'] is None: pv['value'] = '- disconnected -'
+        pv['unit'] = kwargs['units'] or ''
+        if pv['unit'] == 'deg C': pv['unit'] = '&degC'
+        if pv['unit'] == 'g/m3': pv['unit'] = 'g/m&sup3'
+
 @route('/')
-@view('pv_overview.jinja2')
 def index():
-    return CONFIG
+    redirect('/list/general_overview')
+
+@route('/list/<page>')
+@view('pv_overview.jinja2')
+def list_pvs(page):
+    if page not in CONFIG['pages']:
+        return abort(404, 'Page not found')
+    return {'config': CONFIG, 'req_page': page}
 
 @route('/api/values.json')
 def index():
@@ -110,13 +114,15 @@ def main():
             sys.stderr.write(str(e) + "\n")
             sys.exit(1)
 
-    for group in CONFIG['groups']:
-        for pv in group['PVs']:
-            pv['value'] = '- disconnected (initial) -'
-            pv['unit'] = ''
-            pv['precision'] = None
-            pv['classes'] = 'disconnected'
-            PVS[pv['name']] = epics.PV(pv['name'], auto_monitor=True, form='ctrl', callback=cb_value_update, connection_callback=cb_connection_change)
+    CONFIG['PV_lookup'] = {}
+
+    for i, pv in enumerate(CONFIG['PVs']):
+        pv['value'] = '- disconnected (initial) -'
+        pv['unit'] = ''
+        pv['precision'] = None
+        pv['classes'] = 'disconnected'
+        PVS[pv['name']] = epics.PV(pv['name'], auto_monitor=True, form='ctrl', callback=cb_value_update, connection_callback=cb_connection_change)
+        CONFIG['PV_lookup'][pv['name']] = i
 
     run(host=args.host, port=args.port, debug=args.debug)
 
index dcc62e08973fd5bddc733bb83f14ede7406da847..8db1f20b13a2274644f113687eecf3ae31890663 100644 (file)
 {
-       "groups": [
-               {
-                       "name": "EXAMPLE",
-                       "PVs": [
-                               {"name": "CBM:MVD:EXAMPLE:DISCONECTED_EXAMPLE"}
+       "PVs": [
+               {"name": "CBM:MVD:EXAMPLE:DISCONECTED_EXAMPLE"},
+
+               {"name": "CBM:MVD:COOLING:CC405:BathTemperatureMom", "alias": "Current Heat Bath Temperature", "descr": ""},
+               {"name": "CBM:MVD:COOLING:CC405:ExternalTemperatureMom"},
+               {"name": "CBM:MVD:COOLING:CC405:SetpointMom"},
+               {"name": "CBM:MVD:COOLING:CC405:FLOW:IN:Flow"},
+               {"name": "CBM:MVD:COOLING:CC405:FLOW:IN:Total"},
+               {"name": "CBM:MVD:COOLING:CC405:FLOW:OUT:Flow"},
+               {"name": "CBM:MVD:COOLING:CC405:FLOW:OUT:Total"},
+
+               {"name": "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_A:IKR:Voltage"},
+               {"name": "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_A:TPR2:Voltage"},
+               {"name": "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_B:IKR:Voltage"},
+               {"name": "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_B:TPR2:Voltage"},
+
+               {"name": "CBM:MVD:VACUUM:RECIPIENT:1:Pressure"},
+               {"name": "CBM:MVD:VACUUM:RECIPIENT:1:Status"},
+               {"name": "CBM:MVD:VACUUM:RECIPIENT:2:Pressure"},
+               {"name": "CBM:MVD:VACUUM:RECIPIENT:2:Status"},
+               {"name": "CBM:MVD:VACUUM:RECIPIENT:3:Pressure"},
+               {"name": "CBM:MVD:VACUUM:RECIPIENT:3:Status"},
+       
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:GetGeneralOutput"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOutput"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOutput"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOutput"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetVoltage"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetVoltage"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetVoltage"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetCurrent"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetCurrent"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetCurrent"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:MeasuredVoltage"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:MeasuredVoltage"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:MeasuredVoltage"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:MeasuredCurrent"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:MeasuredCurrent"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:MeasuredCurrent"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPVoltage"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPVoltage"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPVoltage"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPVoltageMin"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPVoltageMin"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPVoltageMin"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPVoltageMax"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPVoltageMax"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPVoltageMax"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPMode"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPMode"},
+               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPMode"},
+       
+               {"name": "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:Temperature"},
+               {"name": "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:Dewpoint"},
+               {"name": "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:AbsoluteHumidity"},
+               {"name": "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:RelativeHumidity"},
+               {"name": "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:BatteryVoltage"},
+
+               {"name": "CBM:MVD:COOLING:CC405:Verify"},
+               {"name": "CBM:MVD:COOLING:CC405:Firmware"},
+               {"name": "CBM:MVD:COOLING:CC405:V"},
+               {"name": "CBM:MVD:COOLING:CC405:HT"},
+               {"name": "CBM:MVD:COOLING:CC405:Heating"},
+               {"name": "CBM:MVD:COOLING:CC405:unknown1"},
+               {"name": "CBM:MVD:COOLING:CC405:unknown2"},
+               {"name": "CBM:MVD:COOLING:CC405:F"},
+               {"name": "CBM:MVD:COOLING:CC405:T0"},
+               {"name": "CBM:MVD:COOLING:CC405:TC"},
+               {"name": "CBM:MVD:COOLING:CC405:T1"},
+               {"name": "CBM:MVD:COOLING:CC405:TIntern"},
+               {"name": "CBM:MVD:COOLING:CC405:TProcess"},
+               {"name": "CBM:MVD:COOLING:CC405:TU"},
+               {"name": "CBM:MVD:COOLING:CC405:TX1"},
+               {"name": "CBM:MVD:COOLING:CC405:TX0"},
+               {"name": "CBM:MVD:COOLING:CC405:Pressure"},
+               {"name": "CBM:MVD:COOLING:CC405:PumpSpeed"},
+               {"name": "CBM:MVD:COOLING:CC405:I"},
+               {"name": "CBM:MVD:COOLING:CC405:AIF_IN"},
+               {"name": "CBM:MVD:COOLING:CC405:TemperatureControl"},
+               {"name": "CBM:MVD:COOLING:CC405:MinimumValue"},
+               {"name": "CBM:MVD:COOLING:CC405:MaximumValue"}
+       ],
+       "pages": {
+                       "general_overview": {
+                               "name": "General System Overview",
+                               "groups": [
+                                       "example",
+                                       "cooling",
+                                       "low_voltage",
+                                       "pressure",
+                                       "environment"
                                ]
-               },
-               {
-                       "name": "Cooling",
-                       "PVs": [
-                               {"name": "CBM:MVD:COOLING:CC405:BathTemperatureMom"},
-                               {"name": "CBM:MVD:COOLING:CC405:ExternalTemperatureMom"},
-                               {"name": "CBM:MVD:COOLING:CC405:SetpointMom"},
-                               {"name": "CBM:MVD:COOLING:CC405:FLOW:IN:Flow"},
-                               {"name": "CBM:MVD:COOLING:CC405:FLOW:IN:Total"},
-                               {"name": "CBM:MVD:COOLING:CC405:FLOW:OUT:Flow"},
-                               {"name": "CBM:MVD:COOLING:CC405:FLOW:OUT:Total"}
+                       },
+                       "cooling_system": {
+                               "name": "Details Cooling System",
+                               "groups": [
+                                       "cooling_extended"
                                ]
+                       }
                },
-               {
-                       "name": "Pressure",
-                       "PVs": [
-                               {"name": "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_A:IKR:Voltage"},
-                               {"name": "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_A:TPR2:Voltage"},
-                               {"name": "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_B:IKR:Voltage"},
-                               {"name": "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_B:TPR2:Voltage"},
-                               {"name": "CBM:MVD:VACUUM:RECIPIENT:1:Pressure"},
-                               {"name": "CBM:MVD:VACUUM:RECIPIENT:1:Status"},
-                               {"name": "CBM:MVD:VACUUM:RECIPIENT:2:Pressure"},
-                               {"name": "CBM:MVD:VACUUM:RECIPIENT:2:Status"},
-                               {"name": "CBM:MVD:VACUUM:RECIPIENT:3:Pressure"},
-                               {"name": "CBM:MVD:VACUUM:RECIPIENT:3:Status"}
+       "groups": {
+                       "example": {
+                               "name": "EXAMPLE",
+                               "PVs": [
+                                       "CBM:MVD:EXAMPLE:DISCONECTED_EXAMPLE"
                                ]
-               },
-               {
-                        "name": "Low Voltage",
-                        "PVs": [
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:GetGeneralOutput"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOutput"},  
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOutput"},  
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOutput"},  
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetVoltage"},
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetVoltage"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetVoltage"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetCurrent"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetCurrent"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetCurrent"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:MeasuredVoltage"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:MeasuredVoltage"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:MeasuredVoltage"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:MeasuredCurrent"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:MeasuredCurrent"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:MeasuredCurrent"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPVoltage"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPVoltage"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPVoltage"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPVoltageMin"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPVoltageMin"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPVoltageMin"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPVoltageMax"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPVoltageMax"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPVoltageMax"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPMode"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPMode"}, 
-                               {"name": "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPMode"}
-                               ]
-               },
-               {
-                        "name": "Enviroment",
-                        "PVs": [
-                               {"name": "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:Temperature"},
-                               {"name": "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:Dewpoint"},
-                                {"name": "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:AbsoluteHumidity"},
-                               {"name": "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:RelativeHumidity"},
-                               {"name": "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:BatteryVoltage"}
+                       },
+                       "cooling": {
+                               "name": "Cooling",
+                               "PVs": [
+                                       "CBM:MVD:COOLING:CC405:BathTemperatureMom",
+                                       "CBM:MVD:COOLING:CC405:ExternalTemperatureMom",
+                                       "CBM:MVD:COOLING:CC405:SetpointMom",
+                                       "CBM:MVD:COOLING:CC405:FLOW:IN:Flow",
+                                       "CBM:MVD:COOLING:CC405:FLOW:IN:Total",
+                                       "CBM:MVD:COOLING:CC405:FLOW:OUT:Flow",
+                                       "CBM:MVD:COOLING:CC405:FLOW:OUT:Total"
+                               ]
+                       },
+                       "cooling_extended": {
+                               "name": "Cooling (extended)",
+                               "PVs": [
+                                       "CBM:MVD:COOLING:CC405:BathTemperatureMom",
+                                       "CBM:MVD:COOLING:CC405:ExternalTemperatureMom",
+                                       "CBM:MVD:COOLING:CC405:SetpointMom",
+                                       "CBM:MVD:COOLING:CC405:Verify",
+                                       "CBM:MVD:COOLING:CC405:Firmware",
+                                       "CBM:MVD:COOLING:CC405:V",
+                                       "CBM:MVD:COOLING:CC405:HT",
+                                       "CBM:MVD:COOLING:CC405:Heating",
+                                       "CBM:MVD:COOLING:CC405:unknown1",
+                                       "CBM:MVD:COOLING:CC405:unknown2",
+                                       "CBM:MVD:COOLING:CC405:F",
+                                       "CBM:MVD:COOLING:CC405:T0",
+                                       "CBM:MVD:COOLING:CC405:TC",
+                                       "CBM:MVD:COOLING:CC405:T1",
+                                       "CBM:MVD:COOLING:CC405:TIntern",
+                                       "CBM:MVD:COOLING:CC405:TProcess",
+                                       "CBM:MVD:COOLING:CC405:TU",
+                                       "CBM:MVD:COOLING:CC405:TX1",
+                                       "CBM:MVD:COOLING:CC405:TX0",
+                                       "CBM:MVD:COOLING:CC405:Pressure",
+                                       "CBM:MVD:COOLING:CC405:PumpSpeed",
+                                       "CBM:MVD:COOLING:CC405:I",
+                                       "CBM:MVD:COOLING:CC405:AIF_IN",
+                                       "CBM:MVD:COOLING:CC405:TemperatureControl",
+                                       "CBM:MVD:COOLING:CC405:MinimumValue",
+                                       "CBM:MVD:COOLING:CC405:MaximumValue",
+                                       "CBM:MVD:COOLING:CC405:FLOW:IN:Flow",
+                                       "CBM:MVD:COOLING:CC405:FLOW:IN:Total",
+                                       "CBM:MVD:COOLING:CC405:FLOW:OUT:Flow",
+                                       "CBM:MVD:COOLING:CC405:FLOW:OUT:Total"
+                               ]
+                       },
+                       "pressure": {
+                               "name": "Pressure",
+                               "PVs": [
+                                       "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_A:IKR:Voltage",
+                                       "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_A:TPR2:Voltage",
+                                       "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_B:IKR:Voltage",
+                                       "CBM:MVD:VACUUM:PRESTO_RECIPIENT:SIDE_B:TPR2:Voltage",
+                                       "CBM:MVD:VACUUM:RECIPIENT:1:Pressure",
+                                       "CBM:MVD:VACUUM:RECIPIENT:1:Status",
+                                       "CBM:MVD:VACUUM:RECIPIENT:2:Pressure",
+                                       "CBM:MVD:VACUUM:RECIPIENT:2:Status",
+                                       "CBM:MVD:VACUUM:RECIPIENT:3:Pressure",
+                                       "CBM:MVD:VACUUM:RECIPIENT:3:Status"
+                               ]
+                       },
+                       "low_voltage": {
+                               "name": "Low Voltage",
+                               "PVs": [
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:GetGeneralOutput",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOutput",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOutput",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOutput",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetVoltage",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetVoltage",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetVoltage",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetCurrent",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetCurrent",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetCurrent",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:MeasuredVoltage",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:MeasuredVoltage",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:MeasuredVoltage",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:MeasuredCurrent",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:MeasuredCurrent",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:MeasuredCurrent",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPVoltage",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPVoltage",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPVoltage",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPVoltageMin",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPVoltageMin",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPVoltageMin",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPVoltageMax",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPVoltageMax",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPVoltageMax",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN1:GetOVPMode",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN2:GetOVPMode",
+                                       "CBM:MVD:POWER:PRESTO_RECIPIENT:CHAN3:GetOVPMode"
+                               ]
+                       },
+                       "environment": {
+                               "name": "Enviroment",
+                               "PVs": [
+                                       "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:Temperature",
+                                       "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:Dewpoint",
+                                       "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:AbsoluteHumidity",
+                                       "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:RelativeHumidity",
+                                       "CBM:MVD:ENVIRON:OPUS20_CLEANROOM:BatteryVoltage"
                                ]
+                       }
                }
-       ]
 }
index d1e3a28bafeb5eb544803172a99554dd4eb3ec5f..1842dca440a3304148d20ac4b138c13d691a4187 100644 (file)
                        <h1>PRESTO - Overview<br/> Prototype of the Second Station of the Micro Vertex Detector of the Compressed Baryonic Matter</h1>
                </div>
                <div id="PVs">
-                       {% for group in groups %}
-                       <div id="{{ group.name }}">
-                               <h2>{{ group.name }}</h2>
+                       {% set page = config.pages[req_page] %}
+                       {% for group in page.groups %}
+                       {% set this_group = config.groups[group] %}
+                       <div id="{{ this_group.name }}">
+                               <h2>{{ this_group.name }}</h2>
                                         <table style="width:100%">
                                                <colgroup>
                                                        <col span="1" style="width: 60%;">
@@ -27,7 +29,8 @@
                                                        <th>Value</th>
                                                        <th>Unit</th>
                                                </tr>
-                                               {% for PV in group.PVs %}
+                                               {% for pv_name in this_group.PVs %}
+                                               {% set PV = config.PVs[config.PV_lookup[pv_name]] %}
                                                <tr>
                                                        <td>{{ PV.name }}</td>
                                                        <td class="{{ PV.classes }}">