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
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'] = '°C'
- if pv['unit'] == 'g/m3': pv['unit'] = 'g/m³'
+ 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'] = '°C'
+ if pv['unit'] == 'g/m3': pv['unit'] = 'g/m³'
+
@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():
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)
{
- "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"
]
+ }
}
- ]
}