EnterLowPowerMode

Bases: KPFFunction

Set KPF to a low power mode.

This is intended for use during power outages. This reduces power use in the AO electronics room. We do not currently recommend any changes in the basement due to the sensitivity of the spectrograph to thermal changes.

Procedure: - If a script is running exit or terminate it (depending on --force arg) - Disable HK detector - Stop HK cooling - Power off HK systems: J1, J2, J5 - Stop CRED2 exposures (CONTINUOUS and SAVE) - Stop CRED2 cooling (if on) - Power off CRED2 (K2, K3)

Source code in kpf/scripts/EnterLowPowerMode.py
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
class EnterLowPowerMode(KPFFunction):
    '''Set KPF to a low power mode.

    This is intended for use during power outages. This reduces power use in
    the AO electronics room. We do not currently recommend any changes in the
    basement due to the sensitivity of the spectrograph to thermal changes.

    Procedure:
    - If a script is running exit or terminate it (depending on --force arg)
    - Disable HK detector
    - Stop HK cooling
    - Power off HK systems: J1, J2, J5
    - Stop CRED2 exposures (CONTINUOUS and SAVE)
    - Stop CRED2 cooling (if on)
    - Power off CRED2 (K2, K3)
    '''
    @classmethod
    def pre_condition(cls, args):
        pass

    @classmethod
    def perform(cls, args):
        kpfconfig = ktl.cache('kpfconfig')
        kpfpower = ktl.cache('kpfpower')
        kpfmon = ktl.cache('kpfmon')
        log.warning('Configuring KPF for Low Power Mode')

        # Power down Ca HK detector systems
        kpf_hk = ktl.cache('kpf_hk')
        log.warning('Disabling Ca HK detector')
        kpfconfig['CA_HK_ENABLED'].write('No')
        log.warning('Disabling HKTEMP alarm for next 24 hours')
        kpfmon['HKTEMPDIS'].write('1 day hence')
        log.warning('Disabling ST_EXPOSE2 alarm for next 24 hours')
        kpfmon['ST_EXPOSE2DIS'].write('1 day hence')
        log.warning('Turning Ca HK detector cooling off')
        kpf_hk['COOLING'].write('off')
        time.sleep(5)
        log.warning('Powering off Ca HK detector systems')
        # Wait for HK ready to avoid confusing kpfexpose EXPLAIN%
        log.warning('Waiting for kpf_hk.EXPSTATE = Ready')
        ready = kpf_hk['EXPSTATE'].waitFor("== 'Ready'", timeout=60)
        while ready == False:
            log.warning('Asking for user input')
            print()
            print("###############################################################")
            print("  Continue waiting for hpf_hk.EXPSTATE=Ready or shut down now?")
            print()
            print("  Wait (w) or Abort (a)? [w]")
            print("###############################################################")
            print()
            user_input = input()
            log.debug(f'response: "{user_input}"')
            if user_input.lower() in ['a', 'abort', 'q', 'quit']:
                return
            else:
                log.debug('Waiting for kpf_hk.EXPSTATE = Ready')
                ready = kpf_hk['EXPSTATE'].waitFor("== 'Ready'", timeout=60)

        log.warning(f"Disabling {kpfpower['OUTLET_J1_NAME'].read()} alarm for next 24 hours")
        kpfmon['OUTLET_J1_OODIS'].write('1 day hence')
        log.warning(f"Powering off {kpfpower['OUTLET_J1_NAME'].read()}")
        kpfpower['OUTLET_J1'].write('Off')

        log.warning(f"Disabling {kpfpower['OUTLET_J2_NAME'].read()} alarm for next 24 hours")
        kpfmon['OUTLET_J2_OODIS'].write('1 day hence')
        log.warning(f"Powering off {kpfpower['OUTLET_J2_NAME'].read()}")
        kpfpower['OUTLET_J2'].write('Off')

        log.warning(f"Disabling {kpfpower['OUTLET_J5_NAME'].read()} alarm for next 24 hours")
        kpfmon['OUTLET_J5_OODIS'].write('1 day hence')
        log.warning(f"Powering off {kpfpower['OUTLET_J5_NAME'].read()}")
        kpfpower['OUTLET_J5'].write('Off')

        # Power down CRED2 detector systems
        kpfguide = ktl.cache('kpfguide')
        log.warning('Powering off CRED2 detector systems')
        kpfguide['CONTINUOUS'].write('Inactive')
        kpfguide['SAVE'].write('Inactive')
        time.sleep(5)

        log.warning(f"Disabling {kpfpower['OUTLET_K2_NAME'].read()} alarm for next 24 hours")
        kpfmon['OUTLET_K2_OODIS'].write('1 day hence')
        log.warning(f"Powering off {kpfpower['OUTLET_K2_NAME'].read()}")
        kpfpower['OUTLET_K2'].write('Off')

        log.warning(f"Disabling {kpfpower['OUTLET_K3_NAME'].read()} alarm for next 24 hours")
        kpfmon['OUTLET_K3_OODIS'].write('1 day hence')
        log.warning(f"Powering off {kpfpower['OUTLET_K3_NAME'].read()}")
        kpfpower['OUTLET_K3'].write('Off')


    @classmethod
    def post_condition(cls, args):
        pass