Index: dialin/common/msg_ids.py =================================================================== diff -u -r8f494693c531d46dce1c7e496bb91d84940f4d6c -r63b4319afbaac8d4e6df4eb62978d201d81bd6e8 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 8f494693c531d46dce1c7e496bb91d84940f4d6c) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 63b4319afbaac8d4e6df4eb62978d201d81bd6e8) @@ -395,7 +395,7 @@ MSG_ID_DG_THERMISTORS_DATA_PUBLISH_INTERVAL_OVERRIDE = 0xA02D MSG_ID_DG_THERMISTORS_VALUE_OVERRIDE = 0xA02E MSG_ID_DG_RO_PUMP_DUTY_CYCLE_OVERRIDE = 0xA02F - MSG_ID_DG_DRAIN_PUMP_CURRENT_OVERRIDE = 0xA030 + MSG_ID_DG_VALVES_SENSED_STATE_OVERRIDE = 0xA030 MSG_ID_DG_SET_RO_PUMP_TARGET_FLOW = 0xA031 MSG_ID_DG_RO_PUMP_TARGET_PRESSURE_OVERRIDE = 0xA032 MSG_ID_DG_SET_CALIBRATION_RECORD = 0xA033 @@ -436,6 +436,8 @@ MSG_ID_DG_SET_OP_MODE_REQUEST = 0xA056 MSG_ID_DG_RESERVOIR_TARE_REQUEST = 0xA057 MSG_ID_CPLD_PUBLISH_INTERVAL_OVERRIDE = 0xA058 + MSG_ID_DG_DRAIN_PUMP_CURRENT_OVERRIDE = 0xA059 + MSG_ID_DG_DRAIN_PUMP_DIRECTION_OVERRIDE = 0xA05A MSG_ID_HD_DEBUG_EVENT = 0xFFF1 MSG_ID_DG_DEBUG_EVENT = 0xFFF2 Index: dialin/dg/chemical_disinfect.py =================================================================== diff -u -r1ceb44f1f6d97ce295db7c3233043df9cca35746 -r63b4319afbaac8d4e6df4eb62978d201d81bd6e8 --- dialin/dg/chemical_disinfect.py (.../chemical_disinfect.py) (revision 1ceb44f1f6d97ce295db7c3233043df9cca35746) +++ dialin/dg/chemical_disinfect.py (.../chemical_disinfect.py) (revision 63b4319afbaac8d4e6df4eb62978d201d81bd6e8) @@ -82,7 +82,6 @@ self.current_post_rinse_count = 0 self.chemical_disinfect_ui_state = 0 - @publish(["chemical_disinfect_elapsed_time", "chemical_disinfect_target_time"]) def _handler_chemical_disinfect_to_ui_sync(self, message): """ Index: dialin/dg/drain_pump.py =================================================================== diff -u -rcd5a3a2636c040f0592664edbc712efc58e07c16 -r63b4319afbaac8d4e6df4eb62978d201d81bd6e8 --- dialin/dg/drain_pump.py (.../drain_pump.py) (revision cd5a3a2636c040f0592664edbc712efc58e07c16) +++ dialin/dg/drain_pump.py (.../drain_pump.py) (revision 63b4319afbaac8d4e6df4eb62978d201d81bd6e8) @@ -307,3 +307,82 @@ else: self.logger.debug("Timeout!!!!") return False + + def cmd_drain_pump_measured_current_amps_override(self, current: float, reset: int = NO_RESET) -> int: + """ + Constructs and sends the drain pump measured current override command. + Constraints: + Must be logged into DG. + + @param current: (float) current to override with + @param reset: (int) 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + r = float_to_bytearray(current) + payload = rst + r + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=MsgIds.MSG_ID_DG_DRAIN_PUMP_CURRENT_OVERRIDE.value, + payload=payload) + + self.logger.debug("Override drain pump measured current") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + if reset == RESET: + str_res = "reset back to normal" + else: + str_res = str(current) + self.logger.debug( + "Drain pump measured current overridden to " + str_res + " A " + + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False + + def cmd_drain_pump_measured_direction_override(self, direction: int, reset: int = NO_RESET) -> int: + """ + Constructs and sends the drain pump measured direction override command. + Constraints: + Must be logged into DG. + 1 will be forward and 0 will be backwards + + @param direction: (int) direction to override with + @param reset: (int) 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + r = integer_to_bytearray(direction) + payload = rst + r + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=MsgIds.MSG_ID_DG_DRAIN_PUMP_DIRECTION_OVERRIDE.value, + payload=payload) + + self.logger.debug("Override drain pump measured direction") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + if reset == RESET: + str_res = "reset back to normal" + else: + str_res = str(direction) + self.logger.debug( + "Drain pump measured direction overridden to " + str_res + + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False Index: tests/dg_tests.py =================================================================== diff -u -reb7bd89610aaeb4b91ecae03e276ca176d8ff808 -r63b4319afbaac8d4e6df4eb62978d201d81bd6e8 --- tests/dg_tests.py (.../dg_tests.py) (revision eb7bd89610aaeb4b91ecae03e276ca176d8ff808) +++ tests/dg_tests.py (.../dg_tests.py) (revision 63b4319afbaac8d4e6df4eb62978d201d81bd6e8) @@ -133,11 +133,6 @@ def get_dg_run_info(): - # info = ('DG_op_mode, {}, DG_sub_mode, {}, Op, {}, Sub, {}, '.format(DGOperationModes(dg.dg_operation_mode).name, - # dg.dg_operation_sub_mode, - # dg.events.get_dg_events(DGEventList(1).value, 3), - # dg.events.get_dg_events(DGEventList(2).value, 3))) - info = ('DG_op_mode, {}, DG_op_mode_num, {}, DG_sub_mode, {}, '.format(DGOperationModes(dg.dg_operation_mode).name, dg.dg_operation_mode, dg.dg_operation_sub_mode)) @@ -146,7 +141,7 @@ def get_dg_valves_states(): info = ('VPi, {}, VSP, {}, VPd, {}, VBf, {}, VPo, {}, VDr, {}, VRc, {}, VRo, {}, VRd, {}, VRi, {}, VRf, {}, ' - 'VRD1, {}, VRD2, {}, ' + 'VRD1, {}, VRD2, {}, All, {}, ' .format(dg.valves.valve_states_enum[dg.valves.VALVE_PRESSURE_INLET], dg.valves.valve_states_enum[dg.valves.VALVE_SAMPLING_PORT], dg.valves.valve_states_enum[dg.valves.VALVE_PRODUCTION_DRAIN], @@ -159,17 +154,19 @@ dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_INLET], dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_FILL], dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_DRAIN_1], - dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_DRAIN_2])) + dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_DRAIN_2], + dg.valves.valves_sensed_states)) return info def get_drain_states_info(): - info = ('Drain, {}, DAC, {}, Tgt_RPM, {}, Curr_RPM, {}, PRd, {:5.3f}, PDr, {:5.3f}, Drain_curr_A, {:5.3f}, ' - 'Drain_dir, {}, ' + info = ('Drain, {}, DAC, {}, Tgt_RPM, {}, Curr_RPM, {}, PRd, {:5.3f}, PDr, {:5.3f}, Baro, {:5.3f}, ' + 'Drain_curr_A, {:5.3f}, Drain_dir, {}, ' .format(DrainPumpStates(dg.drain_pump.drain_pump_state).name, dg.drain_pump.dac_value, dg.drain_pump.target_drain_pump_rpm, dg.drain_pump.current_drain_pump_rpm, dg.pressures.drain_pump_inlet_pressure, dg.pressures.drain_pump_outlet_pressure, - dg.drain_pump.drain_pump_current_A, dg.drain_pump.drain_pump_direction)) + dg.pressures.barometric_pressure, dg.drain_pump.drain_pump_current_A, + dg.drain_pump.drain_pump_direction)) return info @@ -220,13 +217,15 @@ def get_temperature_sensors_info(): info = ('TPi, {:5.3f}, THd, {:5.3f}, TPo, {:5.3f}, TD1, {:5.3f}, TD2, {:5.3f}, TRo, {:5.3f}, TDi, {:5.3f}, ' + 'Baro_temp, {:5.3f}, ' .format(dg.temperatures.temperatures[DGTemperaturesNames.INLET_PRIMARY_HEATER.name], dg.temperatures.temperatures[DGTemperaturesNames.HEAT_DISINFECT.name], dg.temperatures.temperatures[DGTemperaturesNames.OUTLET_PRIMARY_HEATER.name], dg.temperatures.temperatures[DGTemperaturesNames.CONDUCTIVITY_SENSOR_1.name], dg.temperatures.temperatures[DGTemperaturesNames.CONDUCTIVITY_SENSOR_2.name], dg.temperatures.temperatures[DGTemperaturesNames.OUTLET_DIALYSATE_REDUNDANT.name], - dg.temperatures.temperatures[DGTemperaturesNames.INLET_DIALYSATE.name])) + dg.temperatures.temperatures[DGTemperaturesNames.INLET_DIALYSATE.name], + dg.temperatures.temperatures[DGTemperaturesNames.BARO_TEMP_SENSOR.name])) return info @@ -730,16 +729,16 @@ # print(get_heaters_info()) # sleep(1) - #dg.ro_pump.cmd_set_ro_flow_rate(0.6) - #dg.flow_sensors.cmd_measured_flow_sensor_value_lpm_override(1, 0.8, reset=1) - #while True: + #dg.heaters.cmd_set_primary_and_trimmer_heaters_target_temperature(primary_target_temp=40, trimmer_target_temp=52) + #sleep(1) + #dg.heaters.cmd_start_stop_trimmer_heater(0) - # print(get_ro_info()) - # sleep(1) + dg.valves.cmd_valve_sensed_state_override(4, 1, reset=0) - dg.heaters.cmd_set_primary_and_trimmer_heaters_target_temperature(primary_target_temp=40, trimmer_target_temp=52) - sleep(1) - dg.heaters.cmd_start_stop_trimmer_heater(0) + while True: + print(get_dg_valves_states()) + sleep(1) +