import os from dialin.dg.dialysate_generator import DG from dialin.hd.hemodialysis_device import HD from dialin.dg.load_cells import DGLoadCellNames from dialin.hd.switches import HDSwitchesNames, HDSwitchStatus from dialin.hd.constants import RESET, NO_RESET from dialin.ui.hd_simulator import HDSimulator from dialin.common.dg_defs import DGHeatDisinfectStates, DGHeatDisinfectUIStates from dialin.dg.heat_disinfect import HeatCancellationModes, NelsonSupportModes from dialin.common.dg_defs import DGChemicalDisinfectStates, DGChemDisinfectUIStates from dialin.common.dg_defs import DGChemDisinfectFlushStates, DGChemDisinfectFlushUIStates from dialin.dg.chemical_disinfect import ChemCancellationModes from dialin.dg.drain_pump import DrainPumpStates, DrainPumpRPMFeedBackSensors from dialin.dg.thermistors import ThermistorsNames from dialin.dg.temperatures import DGTemperaturesNames from dialin.dg.dialysate_generator import DGOperationModes from dialin.hd.temperatures import HDTemperaturesNames from dialin.dg.concentrate_pumps import DGConcentratePumpsStates from dialin.dg.uv_reactors import ReactorsNames from dialin.common.hd_defs import HDOpModes, HDStandbyStates, PreTreatmentWetSelfTestStates, PostTreatmentStates, \ PreTreatmentDrySelfTestsStates from dialin.hd.post_treatment import HDPostTreatmentDrainStates from dialin.common.dg_defs import DGEventList from dialin.common.hd_defs import HDEventList from dialin.hd.reservoirs import HDReservoirStates from dialin.dg.reservoirs import DGReservoirsNames from dialin.common.dg_defs import DGGenIdleModeBadFillSubStates from dialin.common.alarm_defs import AlarmList from dialin.dg.fans import DGFansNames from dialin.dg.pressures import DGPressures from dialin.dg.conductivity_sensors import ConductivitySensorsEnum from dialin.dg.voltages import DGMonitoredVoltages from dialin.dg.valves import DGValveNames from dialin.hd.valves import HDValves from dialin.hd.voltages import HDMonitoredVoltages from dialin.hd.pretreatment import PreTreatmentRsrvrState from dialin.common.dg_defs import DGFlushStates, DGHeatDisinfectActiveCoolStates from dialin.common.test_config_defs import DGTestConfigOptions, HDTestConfigOptions from time import sleep from datetime import datetime import sys sys.path.append("..") def check_status(delay_counter, sleep_time, target_delay, state_counter): if delay_counter > (target_delay / sleep_time): state_counter += 1 delay_counter = 0 else: delay_counter += 1 return state_counter, delay_counter def expedite_pretreatment(): sleep_time = 0.1 counter = 1 delay_counter = 0 target_delay = 1 while True: if counter == 1: if delay_counter == 0: # dg.load_cells.cmd_get_load_cells_tare_values() # For testing only. Use the get function to get the actual tare values during the development of this # script and the procedure for this dg.load_cells.load_cells_tare_values[DGLoadCellNames.LOAD_CELL_RESERVOIR_1_PRIMARY.name] = 1726.822998046875 dg.load_cells.load_cells_tare_values[DGLoadCellNames.LOAD_CELL_RESERVOIR_1_BACKUP.name] = 1716.2781982421875 dg.load_cells.load_cells_tare_values[DGLoadCellNames.LOAD_CELL_RESERVOIR_2_PRIMARY.name] = 1716.46484375 dg.load_cells.load_cells_tare_values[DGLoadCellNames.LOAD_CELL_RESERVOIR_2_BACKUP.name] = 1712.1719970703125 counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) elif counter == 2 and \ dg.load_cells.load_cells_tare_values[DGLoadCellNames.LOAD_CELL_RESERVOIR_1_PRIMARY.name] != 0.0: if delay_counter == 0: # Received the load cells tare values from DG. Reset both stacks dg.cmd_dg_software_reset_request() hd.cmd_hd_software_reset_request() counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) elif counter == 3 and dg.dg_operation_mode == 3: if delay_counter == 0: # After reset log in again dg.cmd_log_in_to_dg() counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) elif counter == 4: if delay_counter == 0: dg.load_cells.cmd_set_load_cells_tare_values() counter, delay_counter = check_status(delay_counter, sleep_time, 0, counter) elif counter == 5 and hd.hd_operation_mode == 3: if delay_counter == 0: hd.cmd_log_in_to_hd() counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) elif counter == 6: if delay_counter == 0: # Set the operation mode is pre-treatment before commanding the start DG hd.cmd_hd_set_operation_mode(4) counter, delay_counter = check_status(delay_counter, sleep_time, 0, counter) elif counter == 7 and hd.hd_operation_mode == 4: if delay_counter == 0: # Start DG cannot be when HD is in standby dg.hd_proxy.cmd_start_stop_dg() counter, delay_counter = check_status(delay_counter, sleep_time, 0, counter) elif counter == 8 and dg.dg_operation_mode == 5 and dg.dg_operation_sub_mode == 1: if delay_counter == 0: # This section is for testing only to make sure we always have fluid in the reservoir. This part is not # needed in the actual test procedure dg.hd_proxy.cmd_fill(1600) counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) elif counter == 9 and dg.dg_operation_mode == 5 and dg.dg_operation_sub_mode == 1: if delay_counter == 0: hd.test_configs.cmd_set_test_config(HDTestConfigOptions.TEST_CONFIG_EXPEDITE_PRE_TREATMENT.value) counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) elif counter == 10: if delay_counter == 0: hd.ui.cmd_set_treatment_parameters() counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) elif counter == 11: if delay_counter == 0: hd.ui.cmd_ui_confirm_treatment_parameters(1) counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) elif counter == 12: if delay_counter == 0: hd.ui.cmd_ui_uf_volume_set(0.0) counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) elif counter == 13: if delay_counter == 0: hd.switches.cmd_hd_switch_status_override(HDSwitchesNames.FRONT_DOOR.value, HDSwitchStatus.OPEN.value) counter, delay_counter = check_status(delay_counter, sleep_time, 2, counter) elif counter == 14: if delay_counter == 0: hd.switches.cmd_hd_switch_status_override(HDSwitchesNames.FRONT_DOOR.value, HDSwitchStatus.OPEN.value, RESET) counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) if counter == 15: if delay_counter == 0: hd.ui.cmd_ui_patient_connection_confirm() counter, delay_counter = check_status(delay_counter, sleep_time, 2, counter) if counter == 16: if delay_counter == 0: hd.ui.cmd_ui_start_treatment_request() counter, delay_counter = check_status(delay_counter, sleep_time, target_delay, counter) sleep(sleep_time) if __name__ == "__main__": dg = DG(log_level='DEBUG') dg.cmd_log_in_to_dg() sleep(1) hd = HD(log_level='DEBUG') hd.cmd_log_in_to_hd() sleep(1) expedite_pretreatment()