cgse 2024.7.0__py3-none-any.whl → 2025.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.2.dist-info/METADATA +38 -0
- cgse-2025.0.2.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
BaseClass:
|
|
2
|
-
egse.tempcontrol.lakeshore.LakeShoreInterface
|
|
3
|
-
|
|
4
|
-
ProxyClass:
|
|
5
|
-
egse.tempcontrol.lakeshore.LakeShoreProxy
|
|
6
|
-
|
|
7
|
-
ControlServerClass:
|
|
8
|
-
egse.tempcontrol.lakeshore.LakeShoreControlServer
|
|
9
|
-
|
|
10
|
-
ControlServer:
|
|
11
|
-
egse.tempcontrol.lakeshore.lsci_cs
|
|
12
|
-
|
|
13
|
-
UserInterface:
|
|
14
|
-
egse.tempcontrol.lakeshore.lsci_ui
|
|
15
|
-
|
|
16
|
-
Commands:
|
|
17
|
-
|
|
18
|
-
# Each of these groups is parsed and used on both the server and the client side.
|
|
19
|
-
# The group name (e.g. is_simulator) will be monkey patched in the Proxy class for the device or service.
|
|
20
|
-
# The other field are:
|
|
21
|
-
# description: Used by the doc_string method to generate a help string
|
|
22
|
-
# cmd: Command string that will eventually be send to the hardware controller for the
|
|
23
|
-
# device after the arguments have been filled.
|
|
24
|
-
# device_method: The name of the method to be called on the device class.
|
|
25
|
-
# These should all be defined by the base class for the device, i.e. LakeShoreBase.
|
|
26
|
-
# response: The name of the method to be called from the device protocol.
|
|
27
|
-
# This method should exist in the subclass of the CommandProtocol base class, i.e.
|
|
28
|
-
# in this case it will be the LakeShoreProtocol class.
|
|
29
|
-
|
|
30
|
-
# Definition of the the DeviceInterface
|
|
31
|
-
|
|
32
|
-
disconnect:
|
|
33
|
-
description : Disconnect from the LakeShore controller. This command will be send to the
|
|
34
|
-
LakeShore Control Server which will then disconnect from the hardware controller.
|
|
35
|
-
This command doesn't affect the ZeroMQ connection of this Proxy to the
|
|
36
|
-
control server. Use the service command ``disconnect()`` to disconnect
|
|
37
|
-
from the control server.
|
|
38
|
-
|
|
39
|
-
connect:
|
|
40
|
-
description: Connect the LakeShore hardware controller
|
|
41
|
-
|
|
42
|
-
reconnect:
|
|
43
|
-
description: Reconnect the LakeShore hardware controller.
|
|
44
|
-
|
|
45
|
-
This command will force a disconnect and then try to re-connect to the controller.
|
|
46
|
-
|
|
47
|
-
is_simulator:
|
|
48
|
-
description: Ask if the control server is a simulator instead of the real LakeShoreController class.
|
|
49
|
-
returns: bool | True if the far end is a simulator instead of the real hardware
|
|
50
|
-
|
|
51
|
-
is_connected:
|
|
52
|
-
description: Check if the LakeShore Hardware Controller is connected.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
# Definition of the device commands
|
|
56
|
-
|
|
57
|
-
info:
|
|
58
|
-
description: Retrieve basic information about the LakeShore and the Controller.
|
|
59
|
-
cmd: "*IDN?\n"
|
|
60
|
-
returns: str | Model number
|
|
61
|
-
|
|
62
|
-
get_id:
|
|
63
|
-
description: Return LakeShore ID.
|
|
64
|
-
returns: str | Returns return id LakeShore LS_X
|
|
65
|
-
|
|
66
|
-
get_temperature:
|
|
67
|
-
description: Retrieve the temperature from the given channel.
|
|
68
|
-
cmd: "CRDG?\n"
|
|
69
|
-
returns: float | The current temperature for the given channel
|
|
70
|
-
|
|
71
|
-
get_params_pid:
|
|
72
|
-
description: Returns control loop PID values. See the PID command for parameter descriptions.
|
|
73
|
-
args:
|
|
74
|
-
output: int | output Specifies which output’s control loop to configure 1–4
|
|
75
|
-
cmd: "PID? {output}\n"
|
|
76
|
-
returns: list | [P, I, D]
|
|
77
|
-
|
|
78
|
-
get_setpoint:
|
|
79
|
-
description: Returns Control Setpoint Query.
|
|
80
|
-
args:
|
|
81
|
-
output: int | output Specifies which output’s control loop to configure 1–4
|
|
82
|
-
cmd: "SETP? {output}\n"
|
|
83
|
-
returns: str | value
|
|
84
|
-
|
|
85
|
-
get_tuning_status:
|
|
86
|
-
description: Returns Tuning Status
|
|
87
|
-
cmd: "TUNEST?\n"
|
|
88
|
-
returns: list
|
|
89
|
-
|
|
90
|
-
get_heater_setup:
|
|
91
|
-
description: Returns Heater Setup
|
|
92
|
-
args:
|
|
93
|
-
output: int | output Specifies which output’s control loop to configure 1–4
|
|
94
|
-
cmd: "HTRSET? {output}\n"
|
|
95
|
-
returns: list
|
|
96
|
-
|
|
97
|
-
get_range:
|
|
98
|
-
description: Get Range mode.
|
|
99
|
-
args:
|
|
100
|
-
output: int | output Specifies which output’s control loop to configure 1–4
|
|
101
|
-
cmd: "RANGE? {output}\n"
|
|
102
|
-
returns: int | Returns the remote interface mode
|
|
103
|
-
|
|
104
|
-
get_heater_status:
|
|
105
|
-
description: Returns Heater Status
|
|
106
|
-
args:
|
|
107
|
-
output: int | output Specifies which output’s control loop to configure 1–4
|
|
108
|
-
cmd: "HTRST? {output}\n"
|
|
109
|
-
returns: list
|
|
110
|
-
|
|
111
|
-
get_heater:
|
|
112
|
-
description: Heater Output Query
|
|
113
|
-
args:
|
|
114
|
-
output: int | output Specifies which output’s control loop to configure 1–4
|
|
115
|
-
cmd: "HTR? {output}\n"
|
|
116
|
-
returns: float
|
|
117
|
-
|
|
118
|
-
set_params_pid:
|
|
119
|
-
description: Set control loop PID values.
|
|
120
|
-
args:
|
|
121
|
-
output: int | output PID
|
|
122
|
-
p: int | P Value
|
|
123
|
-
i: int | I Value
|
|
124
|
-
d: int | D Value
|
|
125
|
-
cmd: "PID {output},{p},{i},{d}\n"
|
|
126
|
-
returns: None
|
|
127
|
-
|
|
128
|
-
set_setpoint:
|
|
129
|
-
description: Returns Control Setpoint Command.
|
|
130
|
-
args:
|
|
131
|
-
output: int | output Specifies which output’s control loop to configure 1–4
|
|
132
|
-
value: srt | value The value for the setpoint (in the preferred units of the control loop sensor).
|
|
133
|
-
cmd: "SETP {output},{value}\n"
|
|
134
|
-
returns: None
|
|
135
|
-
|
|
136
|
-
set_autotune:
|
|
137
|
-
description: Set Autotune params.
|
|
138
|
-
args:
|
|
139
|
-
output: int | output Specifies which output’s control loop to configure 1–4
|
|
140
|
-
value: srt | value The value for the setpoint (in the preferred units of the control loop sensor).
|
|
141
|
-
cmd: "ATUNE {output},{mode}\n"
|
|
142
|
-
returns: None
|
|
143
|
-
|
|
144
|
-
set_heater_setup:
|
|
145
|
-
description: Set Heater params.
|
|
146
|
-
args:
|
|
147
|
-
output: int
|
|
148
|
-
heater_resistant: int
|
|
149
|
-
max_current: int
|
|
150
|
-
max_user_current: str
|
|
151
|
-
output_display: int
|
|
152
|
-
|
|
153
|
-
cmd: "ATUNE {output},{mode}\n"
|
|
154
|
-
returns: None
|
|
155
|
-
|
|
156
|
-
set_range:
|
|
157
|
-
description: Set Range params.
|
|
158
|
-
args:
|
|
159
|
-
output: int | output Specifies which output’s control loop to configure 1–4
|
|
160
|
-
value: srt | value The value for the setpoint (in the preferred units of the control loop sensor).
|
|
161
|
-
cmd: "RANGE {output},{mode}\n"
|
|
162
|
-
returns: None
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import click
|
|
3
|
-
import logging
|
|
4
|
-
import sys
|
|
5
|
-
import rich
|
|
6
|
-
import zmq
|
|
7
|
-
|
|
8
|
-
import multiprocessing
|
|
9
|
-
multiprocessing.current_process().name = "lsci_cs"
|
|
10
|
-
|
|
11
|
-
from egse.control import ControlServer
|
|
12
|
-
from egse.control import is_control_server_active
|
|
13
|
-
from egse.settings import Settings
|
|
14
|
-
from egse.tempcontrol.lakeshore.lsci import LakeShoreProxy
|
|
15
|
-
from egse.tempcontrol.lakeshore.lsci_protocol import LakeShoreProtocol
|
|
16
|
-
from prometheus_client import start_http_server
|
|
17
|
-
from egse.zmq_ser import connect_address
|
|
18
|
-
|
|
19
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
|
|
20
|
-
logger = logging.getLogger("LSCI CS")
|
|
21
|
-
|
|
22
|
-
CTRL_SETTINGS = Settings.load("LakeShore Control Server")
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def is_lsci_cs_active(timeout: float = 0.5):
|
|
28
|
-
"""Check if the LSCI Control Server is running.
|
|
29
|
-
|
|
30
|
-
Args:
|
|
31
|
-
timeout (float): timeout when waiting for a reply [seconds, default=0.5]
|
|
32
|
-
Returns:
|
|
33
|
-
True if the control server is running and replied with the expected answer.
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
endpoint = connect_address(
|
|
37
|
-
CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.HOSTNAME, CTRL_SETTINGS.COMMANDING_PORT
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
return is_control_server_active(endpoint, timeout)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class LakeShoreControlServer(ControlServer):
|
|
44
|
-
"""
|
|
45
|
-
LakeShoreControlServer - Command and monitor the LakeShore Temperature Controllers.
|
|
46
|
-
|
|
47
|
-
This class works as a command and monitoring server to control the LakeShore Controller.
|
|
48
|
-
|
|
49
|
-
The sever binds to the following ZeroMQ sockets:
|
|
50
|
-
|
|
51
|
-
* a REQ-REP socket that can be used as a command server. Any client can connect and
|
|
52
|
-
send a command to the LakeShore controller.
|
|
53
|
-
|
|
54
|
-
* a PUB-SUP socket that serves as a monitoring server. It will send out LakeShore status
|
|
55
|
-
information to all the connected clients every DELAY seconds.
|
|
56
|
-
|
|
57
|
-
"""
|
|
58
|
-
|
|
59
|
-
def __init__(self, index):
|
|
60
|
-
self.index = index
|
|
61
|
-
self.name = "LS_"+str(index)
|
|
62
|
-
print(index)
|
|
63
|
-
super().__init__()
|
|
64
|
-
self.device_protocol = LakeShoreProtocol(self, self.index)
|
|
65
|
-
|
|
66
|
-
logger.debug(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
67
|
-
|
|
68
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
69
|
-
|
|
70
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
71
|
-
|
|
72
|
-
def get_communication_protocol(self):
|
|
73
|
-
return CTRL_SETTINGS.PROTOCOL
|
|
74
|
-
|
|
75
|
-
def get_commanding_port(self):
|
|
76
|
-
return CTRL_SETTINGS[self.name]['COMMANDING_PORT']
|
|
77
|
-
|
|
78
|
-
def get_service_port(self):
|
|
79
|
-
return CTRL_SETTINGS[self.name]['SERVICE_PORT']
|
|
80
|
-
|
|
81
|
-
def get_monitoring_port(self):
|
|
82
|
-
return CTRL_SETTINGS[self.name]['MONITORING_PORT']
|
|
83
|
-
|
|
84
|
-
def get_storage_mnemonic(self):
|
|
85
|
-
try:
|
|
86
|
-
return CTRL_SETTINGS[self.name]['STORAGE_MNEMONIC']
|
|
87
|
-
except AttributeError:
|
|
88
|
-
return f'LSCI_{self.index}'
|
|
89
|
-
def before_serve(self):
|
|
90
|
-
start_http_server(CTRL_SETTINGS[self.name]['METRICS_PORT'])
|
|
91
|
-
|
|
92
|
-
def after_serve(self):
|
|
93
|
-
self.device_protocol.synoptics.disconnect_cs()
|
|
94
|
-
|
|
95
|
-
@click.group()
|
|
96
|
-
def cli():
|
|
97
|
-
pass
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
@cli.command()
|
|
101
|
-
@click.option("--simulator", "--sim", is_flag=True, help="Start the Lakeshore LSCI Simulator as the backend.")
|
|
102
|
-
@click.argument('index', type=click.IntRange(1, 3))
|
|
103
|
-
def start(simulator,index):
|
|
104
|
-
"""Start the LakeShore LSCI Control Server."""
|
|
105
|
-
|
|
106
|
-
if simulator:
|
|
107
|
-
|
|
108
|
-
Settings.set_simulation_mode(True)
|
|
109
|
-
|
|
110
|
-
try:
|
|
111
|
-
logger.debug(f'Starting LakeShore {index} Control Server')
|
|
112
|
-
multiprocessing.current_process().name = f"lsci_cs_{index}"
|
|
113
|
-
|
|
114
|
-
controller = LakeShoreControlServer(index)
|
|
115
|
-
controller.serve()
|
|
116
|
-
|
|
117
|
-
except KeyboardInterrupt:
|
|
118
|
-
|
|
119
|
-
logger.exception("Shutdown requested...exiting")
|
|
120
|
-
|
|
121
|
-
except SystemExit as exit_code:
|
|
122
|
-
|
|
123
|
-
logger.exception("System Exit with code {}.".format(exit_code))
|
|
124
|
-
sys.exit(exit_code)
|
|
125
|
-
|
|
126
|
-
except Exception:
|
|
127
|
-
|
|
128
|
-
logger.exception("Cannot start the LakeShore LSCI Control Server")
|
|
129
|
-
|
|
130
|
-
# The above line does exactly the same as the traceback, but on the logger
|
|
131
|
-
# import traceback
|
|
132
|
-
# traceback.print_exc(file=sys.stdout)
|
|
133
|
-
|
|
134
|
-
return 0
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
@cli.command()
|
|
138
|
-
@click.argument('index', type=click.IntRange(1, 3))
|
|
139
|
-
def stop(index):
|
|
140
|
-
"""Send a 'quit_server' command to the LakeShore LSCI Control Server."""
|
|
141
|
-
|
|
142
|
-
with LakeShoreProxy(index) as proxy:
|
|
143
|
-
|
|
144
|
-
sp = proxy.get_service_proxy()
|
|
145
|
-
sp.quit_server()
|
|
146
|
-
|
|
147
|
-
@cli.command()
|
|
148
|
-
@click.argument('index', type=click.IntRange(1, 3))
|
|
149
|
-
def status(index):
|
|
150
|
-
"""Request status information from the Control Server."""
|
|
151
|
-
name = "LS_"+str(index)
|
|
152
|
-
protocol = CTRL_SETTINGS.PROTOCOL
|
|
153
|
-
hostname = CTRL_SETTINGS.HOSTNAME
|
|
154
|
-
port = CTRL_SETTINGS[name]['COMMANDING_PORT']
|
|
155
|
-
|
|
156
|
-
endpoint = connect_address(protocol, hostname, port)
|
|
157
|
-
|
|
158
|
-
if is_control_server_active(endpoint):
|
|
159
|
-
rich.print(f"LSCI {index} CS: [green]active")
|
|
160
|
-
with LakeShoreProxy(index) as lsci:
|
|
161
|
-
sim = lsci.is_simulator()
|
|
162
|
-
connected = lsci.is_connected()
|
|
163
|
-
ip = lsci.get_ip_address()
|
|
164
|
-
rich.print(f"mode: {'simulator' if sim else 'device'}{' not' if not connected else ''} connected")
|
|
165
|
-
rich.print(f"hostname: {ip}")
|
|
166
|
-
else:
|
|
167
|
-
rich.print(f"LSCI {index} CS: [red]not active")
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if __name__ == "__main__":
|
|
173
|
-
|
|
174
|
-
sys.exit(cli())
|
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import socket
|
|
3
|
-
import threading
|
|
4
|
-
import time
|
|
5
|
-
|
|
6
|
-
from egse.command import ClientServerCommand
|
|
7
|
-
from egse.settings import Settings
|
|
8
|
-
from egse.serialdevice import SerialDevice
|
|
9
|
-
|
|
10
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
11
|
-
|
|
12
|
-
LS_SETTINGS = Settings.load("LakeShore Controller")
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class LakeShoreError(Exception):
|
|
16
|
-
"""Base exception for all LakeShore errors."""
|
|
17
|
-
|
|
18
|
-
pass
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class LakeShoreCommand(ClientServerCommand):
|
|
22
|
-
def get_cmd_string(self, *args, **kwargs) -> str:
|
|
23
|
-
out = super().get_cmd_string(*args, **kwargs)
|
|
24
|
-
return out + "\n"
|
|
25
|
-
|
|
26
|
-
class LakeShoreEthernetInterface:
|
|
27
|
-
def __init__(self, device_index):
|
|
28
|
-
self.name = "LS_"+str(device_index)
|
|
29
|
-
self.hostname = LS_SETTINGS[self.name]['HOSTNAME']
|
|
30
|
-
self.port = LS_SETTINGS[self.name]['PORT']
|
|
31
|
-
self.sock = None
|
|
32
|
-
|
|
33
|
-
# Access-to-the-connection semaphore.
|
|
34
|
-
# Use this to lock/unlock I/O access to the connection (whatever type it is) in
|
|
35
|
-
# child classes.
|
|
36
|
-
|
|
37
|
-
self.semaphore = threading.Semaphore()
|
|
38
|
-
|
|
39
|
-
self.isConnectionOpen = False
|
|
40
|
-
self.connect()
|
|
41
|
-
|
|
42
|
-
def connect(self):
|
|
43
|
-
|
|
44
|
-
# Sanity checks
|
|
45
|
-
|
|
46
|
-
if self.isConnectionOpen:
|
|
47
|
-
raise LakeShoreError("Socket is already open")
|
|
48
|
-
if self.hostname in (None, ""):
|
|
49
|
-
raise LakeShoreError("ERROR: hostname not initialized")
|
|
50
|
-
if self.port in (None, 0):
|
|
51
|
-
raise LakeShoreError("ERROR: port number not initialized")
|
|
52
|
-
|
|
53
|
-
# Create a new socket instance
|
|
54
|
-
|
|
55
|
-
try:
|
|
56
|
-
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
57
|
-
# The following lines are to experiment with blocking and timeout, but there is no need.
|
|
58
|
-
# self.sock.setblocking(1)
|
|
59
|
-
# self.sock.settimeout(3)
|
|
60
|
-
except socket.error as e_socket:
|
|
61
|
-
raise LakeShoreError("ERROR: Failed to create socket.") from e_socket
|
|
62
|
-
|
|
63
|
-
# Attempt to establish a connection to the remote host
|
|
64
|
-
|
|
65
|
-
# FIXME: Socket shall be closed on exception?
|
|
66
|
-
|
|
67
|
-
# We set a timeout of 3 sec before connecting and reset to None
|
|
68
|
-
# (=blocking) after the connect. The reason for this is because when no
|
|
69
|
-
# LakeShore is available, e.g during testing, the timeout will take about
|
|
70
|
-
# two minutes which is way too long. It needs to be evaluated if this
|
|
71
|
-
# approach is acceptable and not causing problems during production.
|
|
72
|
-
|
|
73
|
-
try:
|
|
74
|
-
MODULE_LOGGER.debug(
|
|
75
|
-
f'Connecting a socket to host "{self.hostname}" using port {self.port}'
|
|
76
|
-
)
|
|
77
|
-
self.sock.settimeout(3)
|
|
78
|
-
self.sock.connect((self.hostname, self.port))
|
|
79
|
-
self.sock.settimeout(None)
|
|
80
|
-
except ConnectionRefusedError as e_cr:
|
|
81
|
-
raise LakeShoreError(f"ERROR: Connection refused to {self.hostname}") from e_cr
|
|
82
|
-
except TimeoutError as e_timeout:
|
|
83
|
-
raise LakeShoreError(f"ERROR: Connection to {self.hostname} timed out") from e_timeout
|
|
84
|
-
except socket.gaierror as e_gai:
|
|
85
|
-
raise LakeShoreError(f"ERROR: socket address info error for {self.hostname}") from e_gai
|
|
86
|
-
except socket.herror as e_h:
|
|
87
|
-
raise LakeShoreError(f"ERROR: socket host address error for {self.hostname}") from e_h
|
|
88
|
-
except socket.timeout as e_timeout:
|
|
89
|
-
raise LakeShoreError(f"ERROR: socket timeout error for {self.hostname}") from e_timeout
|
|
90
|
-
except OSError as ose:
|
|
91
|
-
raise LakeShoreError(f"ERROR: OSError caught ({ose}).") from ose
|
|
92
|
-
|
|
93
|
-
self.isConnectionOpen = True
|
|
94
|
-
|
|
95
|
-
# Check that we are connected to a pmac by issuing the "VERSION" command --
|
|
96
|
-
# expecting the 1.947 in return.
|
|
97
|
-
# If we don't get the right response, then disconnect automatically
|
|
98
|
-
|
|
99
|
-
if not self.is_connected():
|
|
100
|
-
raise LakeShoreError("Device is not connected, check logging messages for the cause.")
|
|
101
|
-
|
|
102
|
-
def disconnect(self):
|
|
103
|
-
"""
|
|
104
|
-
Disconnect from the Ethernet connection.
|
|
105
|
-
|
|
106
|
-
Raises a LakeShoreError on failure.
|
|
107
|
-
"""
|
|
108
|
-
try:
|
|
109
|
-
if self.isConnectionOpen:
|
|
110
|
-
MODULE_LOGGER.debug(f"Disconnecting from {self.hostname}")
|
|
111
|
-
self.semaphore.acquire()
|
|
112
|
-
self.sock.close()
|
|
113
|
-
self.semaphore.release()
|
|
114
|
-
self.isConnectionOpen = False
|
|
115
|
-
except Exception as e_exc:
|
|
116
|
-
raise LakeShoreError(f"Could not close socket to {self.hostname}") from e_exc
|
|
117
|
-
|
|
118
|
-
def is_connected(self):
|
|
119
|
-
|
|
120
|
-
if not self.isConnectionOpen:
|
|
121
|
-
return False
|
|
122
|
-
|
|
123
|
-
try:
|
|
124
|
-
response = self.get_response("*IDN?\n")
|
|
125
|
-
except LakeShoreError as e_lakeshore:
|
|
126
|
-
if len(e_lakeshore.args) >= 2 and e_lakeshore.args[1] == -1:
|
|
127
|
-
MODULE_LOGGER.error(
|
|
128
|
-
f"While trying to talk to the device the following exception occurred, "
|
|
129
|
-
f"exception={e_lakeshore}"
|
|
130
|
-
)
|
|
131
|
-
MODULE_LOGGER.error(
|
|
132
|
-
"Most probably the client connection was closed. Disconnecting..."
|
|
133
|
-
)
|
|
134
|
-
self.disconnect()
|
|
135
|
-
return False
|
|
136
|
-
else:
|
|
137
|
-
MODULE_LOGGER.error(
|
|
138
|
-
f"While trying to talk to the device the following exception occurred, "
|
|
139
|
-
f"exception={e_lakeshore}"
|
|
140
|
-
)
|
|
141
|
-
self.disconnect()
|
|
142
|
-
return False
|
|
143
|
-
finally:
|
|
144
|
-
pass
|
|
145
|
-
|
|
146
|
-
version = response
|
|
147
|
-
|
|
148
|
-
if not version.startswith("LSCI"):
|
|
149
|
-
# if the response string doesn't start with LSCI then we're not talking to a
|
|
150
|
-
# LakeShore device!
|
|
151
|
-
MODULE_LOGGER.error(
|
|
152
|
-
f'Device did not respond correctly to a "VERSION" command, response={response}. '
|
|
153
|
-
f"Disconnecting..."
|
|
154
|
-
)
|
|
155
|
-
self.disconnect()
|
|
156
|
-
return False
|
|
157
|
-
|
|
158
|
-
return True
|
|
159
|
-
|
|
160
|
-
def get_response(self, command: str, wait=True)-> str:
|
|
161
|
-
"""
|
|
162
|
-
Send a single command to the controller and block until a response from the controller.
|
|
163
|
-
|
|
164
|
-
:param str command: is the command to be sent
|
|
165
|
-
|
|
166
|
-
:param bool wait: whether to wait on the semaphore [default = True].
|
|
167
|
-
|
|
168
|
-
This should normally be left default. If we have acquired the semaphore manually,
|
|
169
|
-
then specify wait = False (and don't forget to release the semaphore eventually).
|
|
170
|
-
|
|
171
|
-
:return: either a string returned by the PMAC (on success), or an error message (on failure)
|
|
172
|
-
|
|
173
|
-
:raises: LakeShoreError when there was an I/O problem during comm with the PMAC or
|
|
174
|
-
the response does
|
|
175
|
-
not have recognised terminators.
|
|
176
|
-
"""
|
|
177
|
-
|
|
178
|
-
try:
|
|
179
|
-
if wait:
|
|
180
|
-
self.semaphore.acquire()
|
|
181
|
-
|
|
182
|
-
# Attempt to send the complete command
|
|
183
|
-
|
|
184
|
-
self.sock.sendall(command.encode())
|
|
185
|
-
|
|
186
|
-
# wait for, read and return the response from HUBER (will be at most TBD chars)
|
|
187
|
-
|
|
188
|
-
return_string = self.wait_for_response()
|
|
189
|
-
|
|
190
|
-
return return_string.decode().replace("\r\n", "").replace("+","")
|
|
191
|
-
|
|
192
|
-
except socket.timeout as e_timeout:
|
|
193
|
-
raise LakeShoreError("Socket timeout error") from e_timeout
|
|
194
|
-
except socket.error as e_socket:
|
|
195
|
-
# Interpret any socket-related error as an I/O error
|
|
196
|
-
raise LakeShoreError("Socket communication error.") from e_socket
|
|
197
|
-
finally:
|
|
198
|
-
if wait:
|
|
199
|
-
self.semaphore.release()
|
|
200
|
-
|
|
201
|
-
def write(self, command: str):
|
|
202
|
-
"""
|
|
203
|
-
Send a single command to the device controller without waiting for a response.
|
|
204
|
-
|
|
205
|
-
Args:
|
|
206
|
-
command: an order command for the controller.
|
|
207
|
-
|
|
208
|
-
Raises:
|
|
209
|
-
DeviceConnectionError when the command could not be sent due to a
|
|
210
|
-
communication problem.
|
|
211
|
-
|
|
212
|
-
DeviceTimeoutError when the command could not be sent due to a timeout.
|
|
213
|
-
"""
|
|
214
|
-
|
|
215
|
-
try:
|
|
216
|
-
self.sock.sendall(command.encode())
|
|
217
|
-
|
|
218
|
-
except socket.timeout as e_timeout:
|
|
219
|
-
raise LakeShoreError("Socket timeout error") from e_timeout
|
|
220
|
-
except socket.error as e_socket:
|
|
221
|
-
# Interpret any socket-related error as a connection error
|
|
222
|
-
raise LakeShoreError("Socket communication error.") from e_socket
|
|
223
|
-
except AttributeError:
|
|
224
|
-
if not self.is_connected:
|
|
225
|
-
msg = "The LakeShore is not connected, use the connect() method."
|
|
226
|
-
raise LakeShoreError(msg)
|
|
227
|
-
raise
|
|
228
|
-
|
|
229
|
-
def wait_for_response(self):
|
|
230
|
-
n_total = 0
|
|
231
|
-
buf_size = 2048
|
|
232
|
-
|
|
233
|
-
try:
|
|
234
|
-
for idx in range(100):
|
|
235
|
-
time.sleep(0.05) # Give the device time to fill the buffer
|
|
236
|
-
data = self.sock.recv(buf_size)
|
|
237
|
-
n = len(data)
|
|
238
|
-
n_total += n
|
|
239
|
-
if n < buf_size:
|
|
240
|
-
break
|
|
241
|
-
except socket.timeout as e_timeout:
|
|
242
|
-
MODULE_LOGGER.warning(f"Socket timeout error from {e_timeout}")
|
|
243
|
-
return b"\r\n"
|
|
244
|
-
|
|
245
|
-
# MODULE_LOGGER.debug(f"Total number of bytes received is {n_total}, idx={idx}")
|
|
246
|
-
|
|
247
|
-
return data
|
|
248
|
-
|
|
249
|
-
def info(self):
|
|
250
|
-
return self.get_response("*IDN?\n")
|
|
251
|
-
|
|
252
|
-
def get_id(self):
|
|
253
|
-
return self.name
|
|
254
|
-
|
|
255
|
-
def get_temperature(self):
|
|
256
|
-
return self.get_response("CRDG? A\n")
|
|
257
|
-
|
|
258
|
-
def get_params_pid(self, output:int):
|
|
259
|
-
return self.get_response(f"PID? {output}\n").split(",")
|
|
260
|
-
|
|
261
|
-
def get_setpoint(self, output:int):
|
|
262
|
-
return self.get_response(f"SETP? {output}\n",)
|
|
263
|
-
|
|
264
|
-
def get_tuning_status(self):
|
|
265
|
-
return self.get_response(f"TUNEST?\n").split(",")
|
|
266
|
-
|
|
267
|
-
def get_heater_setup(self, output:int):
|
|
268
|
-
return self.get_response(f"HTRSET? {output}\n").split(",")
|
|
269
|
-
|
|
270
|
-
def get_range(self, output:int):
|
|
271
|
-
return self.write(f"RANGE? {output}\n")
|
|
272
|
-
|
|
273
|
-
def get_heater_status(self, output:int):
|
|
274
|
-
return self.get_response(f"HTRST? {output}\n")
|
|
275
|
-
|
|
276
|
-
def get_heater(self, output:int):
|
|
277
|
-
return self.get_response(f"HTR? {output}\n",)
|
|
278
|
-
|
|
279
|
-
def set_params_pid(self, output:int, p:int, i:int, d:int):
|
|
280
|
-
self.write(f"PID {output} {p} {i} {d}\n")
|
|
281
|
-
|
|
282
|
-
def set_setpoint(self, outpout:int, value:str):
|
|
283
|
-
self.write(f"SETP {outpout},{value}\n")
|
|
284
|
-
|
|
285
|
-
def set_autotune(self, output:int, mode:int):
|
|
286
|
-
self.write(f"ATUNE {output},{mode}\n")
|
|
287
|
-
|
|
288
|
-
def set_heater_setup(self,output:int, heater_resistant:int, max_current:int, max_user_current:str, output_display:int):
|
|
289
|
-
self.write(f"HTRSET {output},{heater_resistant},{max_current},{max_user_current},{output_display}\n")
|
|
290
|
-
|
|
291
|
-
def set_range(self, output:int, range:int):
|
|
292
|
-
self.write(f"RANGE {output},{range}\n")
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from egse.control import ControlServer
|
|
4
|
-
from egse.metrics import define_metrics
|
|
5
|
-
from egse.protocol import CommandProtocol
|
|
6
|
-
from egse.settings import Settings
|
|
7
|
-
from egse.setup import load_setup
|
|
8
|
-
|
|
9
|
-
from egse.system import format_datetime
|
|
10
|
-
from egse.zmq_ser import bind_address
|
|
11
|
-
|
|
12
|
-
from egse.tempcontrol.lakeshore.lsci import (LakeShoreController, LakeShoreInterface, LakeShoreSimulator)
|
|
13
|
-
from egse.tempcontrol.lakeshore.lsci_devif import LakeShoreCommand
|
|
14
|
-
|
|
15
|
-
from egse.synoptics import SynopticsManagerProxy
|
|
16
|
-
|
|
17
|
-
logger = logging.getLogger(__name__)
|
|
18
|
-
|
|
19
|
-
COMMAND_SETTINGS = Settings.load(filename="lsci.yaml")
|
|
20
|
-
SITE_ID = Settings.load("SITE").ID
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class LakeShoreProtocol(CommandProtocol):
|
|
24
|
-
def __init__(self, control_server: ControlServer, device_index):
|
|
25
|
-
super().__init__()
|
|
26
|
-
self.control_server = control_server
|
|
27
|
-
self.device_index = device_index
|
|
28
|
-
if Settings.simulation_mode():
|
|
29
|
-
self.lakeshore = LakeShoreSimulator()
|
|
30
|
-
else:
|
|
31
|
-
self.lakeshore = LakeShoreController(device_index)
|
|
32
|
-
|
|
33
|
-
setup = load_setup()
|
|
34
|
-
|
|
35
|
-
self.load_commands(COMMAND_SETTINGS.Commands, LakeShoreCommand, LakeShoreInterface)
|
|
36
|
-
|
|
37
|
-
self.build_device_method_lookup_table(self.lakeshore)
|
|
38
|
-
|
|
39
|
-
self.synoptics = SynopticsManagerProxy()
|
|
40
|
-
|
|
41
|
-
self.metrics = define_metrics(origin="LSCI", use_site=True, setup=setup)
|
|
42
|
-
|
|
43
|
-
def get_bind_address(self):
|
|
44
|
-
return bind_address(
|
|
45
|
-
self.control_server.get_communication_protocol(),
|
|
46
|
-
self.control_server.get_commanding_port(),
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
def get_status(self):
|
|
50
|
-
return super().get_status()
|
|
51
|
-
|
|
52
|
-
def get_housekeeping(self) -> dict:
|
|
53
|
-
metrics_dict = self.metrics
|
|
54
|
-
hk_dict = dict()
|
|
55
|
-
hk_dict["timestamp"] = format_datetime()
|
|
56
|
-
try:
|
|
57
|
-
hk_dict[f"G{SITE_ID}_LSCI_{self.device_index}_TEMP_A"] = self.lakeshore.get_temperature()
|
|
58
|
-
pidParams = self.lakeshore.get_params_pid(1)
|
|
59
|
-
hk_dict[f"G{SITE_ID}_LSCI_{self.device_index}_P_VALUE"] = pidParams[0]
|
|
60
|
-
hk_dict[f"G{SITE_ID}_LSCI_{self.device_index}_I_VALUE"] = pidParams[1]
|
|
61
|
-
hk_dict[f"G{SITE_ID}_LSCI_{self.device_index}_D_VALUE"] = pidParams[2]
|
|
62
|
-
hk_dict[f"G{SITE_ID}_LSCI_{self.device_index}_HEATER_VALUE"] = self.lakeshore.get_heater(1)
|
|
63
|
-
hk_dict[f"G{SITE_ID}_LSCI_{self.device_index}_SET_POINT_VALUE"] = self.lakeshore.get_setpoint(1)
|
|
64
|
-
|
|
65
|
-
for hk_name in metrics_dict.keys():
|
|
66
|
-
index_lsci = hk_name.split("_")
|
|
67
|
-
if(len(index_lsci) > 2):
|
|
68
|
-
if int(index_lsci[2]) == int(self.device_index):
|
|
69
|
-
metrics_dict[hk_name].set(hk_dict[hk_name])
|
|
70
|
-
|
|
71
|
-
# Send the HK acquired so far to the Synoptics Manager
|
|
72
|
-
self.synoptics.store_th_synoptics(hk_dict)
|
|
73
|
-
|
|
74
|
-
except Exception as exc:
|
|
75
|
-
logger.warning(f'failed to get HK ({exc})')
|
|
76
|
-
return hk_dict
|