Index: leahi_dialin/common/dd_defs.py =================================================================== diff -u -r1a7cd1e4a5f691c12086e123bf9294166877a882 -rcf2068872f9d6c000e67ede2dca3e207aa1d041e --- leahi_dialin/common/dd_defs.py (.../dd_defs.py) (revision 1a7cd1e4a5f691c12086e123bf9294166877a882) +++ leahi_dialin/common/dd_defs.py (.../dd_defs.py) (revision cf2068872f9d6c000e67ede2dca3e207aa1d041e) @@ -129,4 +129,37 @@ class DDBalancingChamberSwitchStates(DialinEnum): BAL_CHAMBER_SW_STATE1 = 0 # Balancing chamber switching state 1 (V2,V5 and V3, V8 open, rest closed) BAL_CHAMBER_SW_STATE2 = 1 # Balancing chamber switching state 2 ( V1,V6 and V4, V7 open, rest closed) - NUM_OF_BAL_CHAMBER_SW = 2 # Number of balancing chamber states \ No newline at end of file + NUM_OF_BAL_CHAMBER_SW = 2 # Number of balancing chamber states + +@unique +class ConductivitySensorsEnum(DialinEnum): + D17_COND = 0 + D27_COND = 1 + D29_COND = 2 + D43_COND = 3 + D74_COND = 4 + NUM_OF_CONDUCTIVITY_SENSORS = 5 + +@unique +class DialysatePumpsEnum(DialinEnum): + D12_PUMP = 0 # Fresh Dialysate Pump + D48_PUMP = 1 # Spent Dialysate Pump + +@unique +class DialysatePumpAttributesEnum(DialinEnum): + TARGET_RPM = 0 + MEASURED_SPEED = 1 + CURRENT_SPEED = 2 + STATE = 3 + TARGET_PRESSURE = 4 + MEASURED_PRESSURE = 5 + MEASURED_CURRENT = 6 + CONTROL = 7 + DIRECTION_ERROR_COUNT = 8 + MEASURED_DIRECTION = 9 + +@unique +class DDDialysatePumpsStates(DialinEnum): + DIALYSATE_PUMP_OFF_STATE = 0 + DIALYSATE_PUMP_RAMP_UP_STATE = 1 + DIALYSATE_PUMP_CONTROL_TO_TARGET_STATE = 2 \ No newline at end of file Index: leahi_dialin/dd/modules/conductivity_sensors.py =================================================================== diff -u -r4883713b492bdb0a8626e98fb5599841e8b17f23 -rcf2068872f9d6c000e67ede2dca3e207aa1d041e --- leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision 4883713b492bdb0a8626e98fb5599841e8b17f23) +++ leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision cf2068872f9d6c000e67ede2dca3e207aa1d041e) @@ -19,21 +19,13 @@ from .constants import RESET, NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.dd_defs import ConductivitySensorsEnum from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish, DialinEnum from leahi_dialin.utils.checks import check_broadcast_interval_override_ms from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray -@unique -class ConductivitySensorsEnum(DialinEnum): - D17_COND = 0 - D27_COND = 1 - D29_COND = 2 - D43_COND = 3 - D74_COND = 4 - NUM_OF_CONDUCTIVITY_SENSORS = 5 - class DDConductivitySensors(AbstractSubSystem): """ ConductivitySensors @@ -57,19 +49,16 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_conductivity_sensors_sync) - self.d17_cond = 0.0 - self.d27_cond = 0.0 - self.d29_cond = 0.0 - self.d43_cond = 0.0 - self.d74_cond = 0.0 self.dd_conductivity_timestamp = 0.0 + self.dd_conductivity = { + ConductivitySensorsEnum.D17_COND.name: 0.0, + ConductivitySensorsEnum.D27_COND.name: 0.0, + ConductivitySensorsEnum.D29_COND.name: 0.0, + ConductivitySensorsEnum.D43_COND.name: 0.0, + ConductivitySensorsEnum.D74_COND.name: 0.0 + } - @publish(["dd_conductivity_timestamp", - "d17_cond", - "d27_cond", - "d29_cond", - "d43_cond", - "d74_cond"]) + @publish(["dd_conductivity_timestamp", "dd_conductivity"]) def _handler_conductivity_sensors_sync(self, message, timestamp=0.0): """ Handles published DD conductivity sensor data messages. DD Conductivity sensor data are captured @@ -79,15 +68,19 @@ @return: None """ - self.d17_cond = struct.unpack('f', bytearray( + self.dd_conductivity[ConductivitySensorsEnum.D17_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.d27_cond = struct.unpack('f', bytearray( + + self.dd_conductivity[ConductivitySensorsEnum.D27_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.d29_cond = struct.unpack('f', bytearray( + + self.dd_conductivity[ConductivitySensorsEnum.D29_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.d43_cond = struct.unpack('f', bytearray( + + self.dd_conductivity[ConductivitySensorsEnum.D43_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.d74cond = struct.unpack('f', bytearray( + + self.dd_conductivity[ConductivitySensorsEnum.D74_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] self.dd_conductivity_timestamp = timestamp @@ -134,11 +127,14 @@ self.logger.error("Timeout!!!!") return False - def cmd_conductivity_sensor_readings_override(self, sensor: int, conductivity: float, reset: int = NO_RESET) -> int: + def cmd_conductivity_sensor_readings_override(self, sensor_index: int, conductivity: float, reset: int = NO_RESET) -> int: """ Constructs and sends the conductivity value override command + Constraints: + Must be logged into DD. + Given sensor_index must be one of the sensors defined in ConductivitySensorsEnum - @param sensor: unsigned int - sensor ID + @param sensor_index: unsigned int - index of the sensor @param conductivity: float - conductivity value to override sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise @@ -147,7 +143,7 @@ reset_byte_array = integer_to_bytearray(reset) cond_byte_array = float_to_bytearray(conductivity) - sensor_byte_array = integer_to_bytearray(sensor) + sensor_byte_array = integer_to_bytearray(sensor_index) payload = reset_byte_array + cond_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, @@ -158,7 +154,8 @@ str_res = "reset back to normal" else: str_res = str(conductivity) + " microsiemens/cm" - self.logger.debug("override conductivity sensor value for sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override conductivity sensor value for sensor " + ConductivitySensorsEnum[str(sensor_index)].name + + ": " + str_res) # Send message received_message = self.can_interface.send(message) @@ -171,11 +168,14 @@ self.logger.error("Timeout!!!!") return False - def cmd_conductivity_sensor_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: + def cmd_conductivity_sensor_temperature_override(self, sensor_index: int, temperature: float, reset: int = NO_RESET) -> int: """ Constructs and sends the conductivity temperature override command + Constraints: + Must be logged into DD. + Given sensor_index must be one of the sensors defined in ConductivitySensorsEnum - @param sensor: unsigned int - sensor ID + @param sensor_index: unsigned int - index of the sensor @param temperature: float - temperature value to override sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise @@ -184,7 +184,7 @@ reset_byte_array = integer_to_bytearray(reset) temp_byte_array = float_to_bytearray(temperature) - sensor_byte_array = integer_to_bytearray(sensor) + sensor_byte_array = integer_to_bytearray(sensor_index) payload = reset_byte_array + temp_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, @@ -195,7 +195,8 @@ str_res = "reset back to normal" else: str_res = str(temperature) - self.logger.debug("override temperature value for conductivity sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override temperature value for conductivity sensor " + ConductivitySensorsEnum[str(sensor_index)].name + + ": " + str_res) # Send message received_message = self.can_interface.send(message) @@ -208,9 +209,12 @@ self.logger.error("Timeout!!!!") return False - def cmd_conductivity_sensor_read_counter_override(self, sensor: int, counter: int, reset: int = NO_RESET) -> int: + def cmd_conductivity_sensor_read_counter_override(self, sensor_index: int, counter: int, reset: int = NO_RESET) -> int: """ Constructs and sends the conductivity read counter override command + Constraints: + Must be logged into DD. + Given sensor_index must be one of the sensors defined in ConductivitySensorsEnum @param sensor: unsigned int - sensor ID @param counter: int - rad count value to override sensor with @@ -221,7 +225,7 @@ reset_byte_array = integer_to_bytearray(reset) read_byte_array = integer_to_bytearray(counter) - sensor_byte_array = integer_to_bytearray(sensor) + sensor_byte_array = integer_to_bytearray(sensor_index) payload = reset_byte_array + read_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, @@ -232,7 +236,8 @@ str_res = "reset back to normal" else: str_res = str(counter) - self.logger.debug("override conductivity sensor value for sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override conductivity sensor value for sensor " + ConductivitySensorsEnum[str(sensor_index)].name + + ": " + str_res) # Send message received_message = self.can_interface.send(message) @@ -245,7 +250,7 @@ self.logger.error("Timeout!!!!") return False - def cmd_conductivity_sensor_error_counter_override(self, sensor: int, counter: int, reset: int = NO_RESET) -> int: + def cmd_conductivity_sensor_error_counter_override(self, sensor_index: int, counter: int, reset: int = NO_RESET) -> int: """ Constructs and sends the conductivity error count override command @@ -258,7 +263,7 @@ reset_byte_array = integer_to_bytearray(reset) error_byte_array = integer_to_bytearray(counter) - sensor_byte_array = integer_to_bytearray(sensor) + sensor_byte_array = integer_to_bytearray(sensor_index) payload = reset_byte_array + error_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, @@ -269,7 +274,8 @@ str_res = "reset back to normal" else: str_res = str(counter) - self.logger.debug("override conductivity sensor value for sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override conductivity sensor value for sensor " + ConductivitySensorsEnum[str(sensor_index)].name + + ": " + str_res) # Send message received_message = self.can_interface.send(message) Index: leahi_dialin/dd/modules/dialysate_pump.py =================================================================== diff -u -r2692cff9c528ec1517638b54b8e6291b0e201c6b -rcf2068872f9d6c000e67ede2dca3e207aa1d041e --- leahi_dialin/dd/modules/dialysate_pump.py (.../dialysate_pump.py) (revision 2692cff9c528ec1517638b54b8e6291b0e201c6b) +++ leahi_dialin/dd/modules/dialysate_pump.py (.../dialysate_pump.py) (revision cf2068872f9d6c000e67ede2dca3e207aa1d041e) @@ -19,25 +19,13 @@ from .constants import RESET, NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.dd_defs import DialysatePumpsEnum, DialysatePumpAttributesEnum, DDDialysatePumpsStates from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish, DialinEnum from leahi_dialin.utils.checks import check_broadcast_interval_override_ms from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray -@unique -class DialysatePumpsEnum(DialinEnum): - D12_PUMP = 0 - D48_PUMP = 1 - - -@unique -class DDDialysatePumpsStates(DialinEnum): - DIALYSATE_PUMP_OFF_STATE = 0 - DIALYSATE_PUMP_RAMP_UP_STATE = 1 - DIALYSATE_PUMP_CONTROL_TO_TARGET_STATE = 2 - - class DDDialysatePumps(AbstractSubSystem): """ DialysatePumps @@ -61,41 +49,35 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_dialysate_pumps_sync) - self.d12_pump_target_rpm_fresh = 0.0 - self.d48_pump_target_rpm_spent = 0.0 - self.d12_pump_measured_spd_fresh = 0.0 - self.d48_pump_measured_spd_spent = 0.0 - self.d12_pump_current_spd_fresh = 0.0 - self.d48_pump_current_spd_spent = 0.0 - self.d12_pump_state_fresh = 0 - self.d48_pump_state_spent = 0 - self.d12_pump_tgt_pressure_fresh = 0.0 - self.d48_pump_tgt_pressure_spent = 0.0 - self.d12_pump_measured_pressure_fresh = 0.0 - self.d48_pump_measured_pressure_spent = 0.0 - self.d12_pump_measured_current_fresh = 0.0 - self.d48_pump_measured_current_spent = 0.0 - self.d12_pump_control_fresh = 0 - self.d48_pump_control_spent = 0 - self.d12_pump_dir_err_cnt_fresh = 0 - self.d48_pump_dir_err_cnt_spent = 0 - self.d12_pump_measured_dir_fresh = 0 - self.d48_pump_measured_dir_spent = 0 - self.dd_dialysate_pump_timestamp = 0 + self.dd_dialysate_pumps = { + DialysatePumpsEnum.D12_PUMP.name: { + DialysatePumpAttributesEnum.TARGET_RPM.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_SPEED.name: 0.0, + DialysatePumpAttributesEnum.CURRENT_SPEED.name: 0.0, + DialysatePumpAttributesEnum.STATE.name: 0.0, + DialysatePumpAttributesEnum.TARGET_PRESSURE.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_PRESSURE.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_CURRENT.name: 0.0, + DialysatePumpAttributesEnum.CONTROL.name: 0.0, + DialysatePumpAttributesEnum.DIRECTION_ERROR_COUNT.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_DIRECTION.name: 0.0 + }, + DialysatePumpsEnum.D48_PUMP.name: { + DialysatePumpAttributesEnum.TARGET_RPM.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_SPEED.name: 0.0, + DialysatePumpAttributesEnum.CURRENT_SPEED.name: 0.0, + DialysatePumpAttributesEnum.STATE.name: 0.0, + DialysatePumpAttributesEnum.TARGET_PRESSURE.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_PRESSURE.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_CURRENT.name: 0.0, + DialysatePumpAttributesEnum.CONTROL.name: 0.0, + DialysatePumpAttributesEnum.DIRECTION_ERROR_COUNT.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_DIRECTION.name: 0.0 + } + } - @publish(["dd_dialysate_pump_timestamp", - "d12_pump_target_rpm_fresh","d48_pump_target_rpm_spent", - "d12_pump_measured_spd_fresh","d48_pump_measured_spd_spent", - "d12_pump_current_spd_fresh","d48_pump_current_spd_spent", - "d12_pump_state_fresh","d48_pump_state_spent", - "d12_pump_tgt_pressure_fresh","d48_pump_tgt_pressure_spent", - "d12_pump_measured_pressure_fresh","d48_pump_measured_pressure_spent", - "d12_pump_measured_current_fresh","d48_pump_measured_current_spent", - "d12_pump_control_fresh","d48_pump_control_spent", - "d12_pump_dir_err_cnt_fresh","d48_pump_dir_err_cnt_spent", - "d12_pump_measured_dir_fresh","d48_pump_measured_dir_spent", - ]) + @publish(["dd_dialysate_pump_timestamp", "dd_dialysate_pumps"]) def _handler_dialysate_pumps_sync(self, message, timestamp=0.0): """ Handles published dialysate pumps' data messages. Dialysate pumps' speed data are captured @@ -105,47 +87,56 @@ @return: None """ - self.d12_pump_target_rpm_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.d48_pump_target_rpm_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.d12_pump_measured_spd_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.d48_pump_measured_spd_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.d12_pump_current_spd_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.d48_pump_current_spd_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.d12_pump_state_fresh = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.d48_pump_state_spent = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.d12_pump_tgt_pressure_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] - self.d48_pump_tgt_pressure_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] - self.d12_pump_measured_pressure_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] - self.d48_pump_measured_pressure_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12]))[0] - self.d12_pump_measured_current_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13]))[0] - self.d48_pump_measured_current_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14]))[0] - self.d12_pump_control_fresh = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_15:MsgFieldPositions.END_POS_FIELD_15]))[0] - self.d48_pump_control_spent = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_16:MsgFieldPositions.END_POS_FIELD_16]))[0] - self.d12_pump_dir_err_cnt_fresh = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_17:MsgFieldPositions.END_POS_FIELD_17]))[0] - self.d48_pump_dir_err_cnt_spent = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18]))[0] - self.d12_pump_measured_dir_fresh = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19]))[0] - self.d48_pump_measured_dir_spent = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20]))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.TARGET_RPM.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.TARGET_RPM.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.MEASURED_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.MEASURED_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.CURRENT_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.CURRENT_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.STATE.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.STATE.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.TARGET_PRESSURE.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.TARGET_PRESSURE.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.MEASURED_PRESSURE.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.MEASURED_PRESSURE.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.MEASURED_CURRENT.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.MEASURED_CURRENT.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.CONTROL.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_15:MsgFieldPositions.END_POS_FIELD_15])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.CONTROL.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_16:MsgFieldPositions.END_POS_FIELD_16])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.DIRECTION_ERROR_COUNT.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_17:MsgFieldPositions.END_POS_FIELD_17])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.DIRECTION_ERROR_COUNT.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.MEASURED_DIRECTION.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.MEASURED_DIRECTION.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20])))[0] + self.dd_dialysate_pump_timestamp = timestamp def cmd_dialysate_pump_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: